<?xml version="1.0" encoding="UTF-8"?>
  <?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
  <!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.39 (Ruby 4.0.6) -->


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

<!ENTITY RFC2119 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml">
<!ENTITY RFC3339 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.3339.xml">
<!ENTITY RFC8174 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml">
<!ENTITY RFC8259 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8259.xml">
<!ENTITY RFC9457 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9457.xml">
]>


<rfc ipr="noModificationTrust200902" docName="draft-xrpl-session-00" category="info" submissionType="independent">
  <front>
    <title abbrev="XRPL Session">XRP Ledger Session Intent for HTTP Payment Authentication</title>

    <author initials="M." surname="Dienger" fullname="Maxime Dienger">
      <organization>Ripple</organization>
      <address>
        <email>maximed@ripple.com</email>
      </address>
    </author>

    <date year="2026" month="September" day="09"/>

    
    
    

    <abstract>


<?line 117?>

<t>This document defines the "session" intent for the "xrpl" payment
method within the Payment HTTP Authentication Scheme. A session is
carried by an XRP Ledger Payment Channel: the client locks XRP
on-chain once, then authorises a series of off-chain claims, each a
signature over a cumulative total. The server redeems the final
claim in a single closing transaction.</t>

<t>Two on-chain transactions therefore settle an unbounded number of
payments, which is what makes per-request and per-token billing
viable at amounts where a transaction fee would otherwise dominate.</t>

<t>The "session" intent is experimental. It is defined here rather than
in a standalone intent document because it is not yet formalized in
the intent registry.</t>



    </abstract>



  </front>

  <middle>


<?line 134?>

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

<t>The charge intent <xref target="I-D.xrpl-charge"/> settles every payment on-chain.
That is correct and final, but it costs a transaction and several
seconds each time, which rules out the cases this intent exists for:
paying per API call, per inference token, or per streamed chunk.</t>

<t>An XRP Ledger Payment Channel <xref target="XRPL-PAYCHAN"/> decouples
authorisation from settlement. The funder locks XRP in a channel
naming a destination, which also locks an owner reserve for the new
ledger entry <xref target="XRPL-RESERVES"/>. Thereafter it signs claims
off-chain, each stating a <em>cumulative</em> total rather than an
increment. The destination may redeem the highest claim it holds at
any time, in one transaction.</t>

<t>Cumulative rather than incremental is the property that makes this
safe with no coordination: a lost or reordered claim costs nothing,
because the next one supersedes it. The server need only retain the
largest.</t>

<section anchor="session-flow"><name>Session Flow</name>

<figure><artwork><![CDATA[
Client                                   Server
  |                                        |
  |  PaymentChannelCreate (on-chain)       |
  |                                        |
  |------------- GET /resource ----------->|
  |<-- 402, challenge: cumulative so far --|
  |                                        |
  | sign claim over (channelId, total)     |
  |                                        |
  |-- Authorization: Payment <voucher> --->|
  |                                        | verify signature
  |                                        | check channel on-chain
  |                                        | advance high-water mark
  |<-- 200, Payment-Receipt ---------------|
  |                                        |
  |          ... N more requests ...        |
  |                                        |
  |                                        | PaymentChannelClaim
  |                                        | (on-chain, tfClose)
]]></artwork></figure>

</section>
<section anchor="channels-are-xrp-only"><name>Channels Are XRP-Only</name>

<t>Payment Channels carry XRP exclusively. Issued currencies and MPTs
cannot fund a channel, so every amount in this document is an integer
drop count. A server needing off-chain settlement in another asset
must use a different mechanism; this intent does not provide one.</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>Channel:</dt>
  <dd>
    <t>A <spanx style="verb">PayChannel</spanx> ledger entry <xref target="XRPL-PAYCHAN-OBJECT"/> created by
<spanx style="verb">PaymentChannelCreate</spanx> <xref target="XRPL-CHAN-CREATE"/>,
identified by a 256-bit channel ID, naming an <spanx style="verb">Account</spanx> (the
funder), a <spanx style="verb">Destination</spanx>, an <spanx style="verb">Amount</spanx> deposited, a <spanx style="verb">Balance</spanx>
already redeemed, a <spanx style="verb">PublicKey</spanx> authorised to sign claims, and a
<spanx style="verb">SettleDelay</spanx>.</t>
  </dd>
  <dt>Claim (voucher):</dt>
  <dd>
    <t>A signature by the channel's <spanx style="verb">PublicKey</spanx> over the tuple of channel
ID and a cumulative drop amount. Not a ledger transaction.</t>
  </dd>
  <dt>Cumulative amount:</dt>
  <dd>
    <t>The running total authorised since the channel opened
<xref target="XRPL-BASIC-TYPES"/>, not the
amount owed for one request.</t>
  </dd>
  <dt>High-water mark:</dt>
  <dd>
    <t>The largest cumulative amount a server has accepted for a channel.</t>
  </dd>
  <dt>SettleDelay:</dt>
  <dd>
    <t>Seconds the funder must wait, after initiating closure, before the
channel can be destroyed. The window in which the destination can
still redeem.</t>
  </dd>
</dl>

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

<t>The method identifier is <spanx style="verb">xrpl</spanx>, as in <xref target="I-D.xrpl-charge"/>, carried
in the challenge and credential fields the Payment HTTP
Authentication Scheme <xref target="I-D.httpauth-payment"/> defines. This
document defines only the <spanx style="verb">session</spanx> intent for it.</t>

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

<t><spanx style="verb">session</spanx> is the intent identifier on the wire. An implementation <bcp14>MAY</bcp14>
expose a local alias for its own API, but <bcp14>MUST</bcp14> advertise and accept
<spanx style="verb">session</spanx> in challenges and credentials.</t>

</section>
<section anchor="encoding"><name>Encoding Conventions</name>

<t>The encoding rules of <xref target="I-D.xrpl-charge"/> apply to this document
unchanged. They are inherited rather than restated: the rule that
case must not be load-bearing in a hex identifier is the one a
divergent copy would quietly break, and one statement cannot diverge
from itself.</t>

<t>What this intent adds is narrower.</t>

<dl>
  <dt>Amounts:</dt>
  <dd>
    <t>Every amount is an integer count of drops, as a decimal string,
with no fractional part. A channel carries XRP alone, so the token
units of <xref target="I-D.xrpl-charge"/> do not arise here.</t>
  </dd>
  <dt>Cumulative amounts:</dt>
  <dd>
    <t>A voucher states the running total authorised over the channel's
life, not the increment it adds. It is an integer drop count on
the same terms as any other amount here, and it is compared and
accumulated as an exact integer -- see <xref target="amount-precision"></xref> for
why, and for the boundary that makes it a <bcp14>MUST</bcp14>.</t>
  </dd>
  <dt>Channel identifiers:</dt>
  <dd>
    <t>A <spanx style="verb">channelId</spanx> is 64 hexadecimal characters, carrying the case
rules <xref target="I-D.xrpl-charge"/> states. A claim signature is verified
over the hex-decoded identifier, so two spellings of one channel
are one channel, and anything derived from it -- a high-water mark
above all -- <bcp14>MUST</bcp14> be keyed on a canonical form.</t>
  </dd>
</dl>

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

<texttable>
      <ttcol align='left'>Field</ttcol>
      <ttcol align='left'>Type</ttcol>
      <ttcol align='left'>Required</ttcol>
      <ttcol align='left'>Meaning</ttcol>
      <c><spanx style="verb">amount</spanx></c>
      <c>string</c>
      <c>yes</c>
      <c>increment charged for this request, in drops</c>
      <c><spanx style="verb">channelId</spanx></c>
      <c>string</c>
      <c>yes</c>
      <c>64-hex channel ID, or <spanx style="verb">""</spanx> on an open</c>
      <c><spanx style="verb">recipient</spanx></c>
      <c>string</c>
      <c>yes</c>
      <c>classic address the channel must pay</c>
      <c><spanx style="verb">currency</spanx></c>
      <c>string</c>
      <c>no</c>
      <c>always <spanx style="verb">"XRP"</spanx> when present</c>
      <c><spanx style="verb">description</spanx></c>
      <c>string</c>
      <c>no</c>
      <c>display only</c>
</texttable>

<t><spanx style="verb">amount</spanx> is the increment for this request, and the cumulative total
is the server's to state where it can. A challenge that names a
channel <bcp14>SHOULD</bcp14> report the mark for it, so a client resumes from
server state rather than its own bookkeeping.</t>

<t>A challenge that names no channel cannot: there is nothing to look
the mark up by, and reporting zero is all it can do. A client <bcp14>MUST</bcp14>
therefore track the highest cumulative it has signed, per network
and channel together, and sign above that, taking whichever of the
two is greater. Signing from a reported zero alone re-sends an
accepted cumulative, which the server <bcp14>MUST</bcp14> refuse as a replay --
see <xref target="monotonicity"></xref>.</t>

<t>Per network as well as per channel because a channel ID does not
identify a channel on its own: it derives from the funder, the
destination and a sequence number, and one seed controls the same
address on every network, so the same funder opening to the same
destination from a fresh account produces the same ID twice. A mark
shared between them makes the second network sign above what it was
asked for.</t>

<t><spanx style="verb">channelId</spanx> is empty when the server names no channel, for either
of two reasons. On an open-action challenge the channel does not
exist yet: its ID cannot be read until the creating transaction is
validated. Otherwise, a server accepting callers it has not met has
no channel to name, because a client learns its channel ID from its
own <spanx style="verb">PaymentChannelCreate</spanx>. In both cases the client supplies the
channel. A <spanx style="verb">voucher</spanx> or <spanx style="verb">close</spanx> payload <bcp14>MUST</bcp14> carry a full 64-hex
channel ID; the empty form is confined to the challenge. An <spanx style="verb">open</spanx>
payload carries none, and cannot: the channel does not exist until
the transaction it carries has been validated, and the server reads
the ID from that transaction's metadata.</t>

<section anchor="network"><name>Network</name>

<t>Servers <bcp14>MUST</bcp14> set <spanx style="verb">network</spanx> in <spanx style="verb">methodDetails</spanx>, and a server <bcp14>MUST</bcp14>
refuse a credential whose challenge omits it or names a network other
than the one the server settles on. A charge only recommends it
<xref target="I-D.xrpl-charge"/>; a session requires it.</t>

<t>The reason is that a session spans requests. Absent the field, each
side falls back to a default of its own, and those can differ
silently: a claim signed for a channel the client believes is on one
ledger, verified and redeemed by a server on another. It also leaves
a client that pinned a network nothing to compare against, so that
guard cannot fire. A challenge naming a network the server does not
settle on is the same divergence stated out loud, and is reachable
where two deployments share a secret and settle on different
ledgers.</t>

<t>Clients <bcp14>SHOULD</bcp14> refuse a challenge naming a network other than the
one they were configured for. The stake is higher here than on a
charge: answering an open-action challenge means submitting a
<spanx style="verb">PaymentChannelCreate</spanx>, so a client that follows the challenge
deposits real XRP on a ledger its operator did not choose. The same
seed controls the same address on every network, so the deposit
comes from a funded account whatever the client believed it was
configured for.</t>

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

<t>Credentials and challenges are JSON <xref target="RFC8259"/>; timestamps such as a
challenge's <spanx style="verb">expires</spanx> are <xref target="RFC3339"/>.</t>

<t>The payload is discriminated by <spanx style="verb">action</spanx>.</t>

<section anchor="action-open"><name>action = "open"</name>

<figure><sourcecode type="json"><![CDATA[
{
  "action": "open",
  "transaction": "1200...",
  "amount": "100000",
  "signature": "304402..."
}
]]></sourcecode></figure>

<t><spanx style="verb">transaction</spanx> is a signed but unsubmitted <spanx style="verb">PaymentChannelCreate</spanx>
<xref target="XRPL-CHAN-CREATE"/>. The
server broadcasts it, reads the channel ID from the validated
metadata, then treats <spanx style="verb">amount</spanx> and <spanx style="verb">signature</spanx> as the first claim.</t>

<t>This folds channel establishment into the 402 exchange, so no
out-of-band endpoint is needed. A server <bcp14>MAY</bcp14> instead require the
client to open the channel itself and supply the ID by other means.</t>

<t>A client <bcp14>SHOULD</bcp14> take the transaction's <spanx style="verb">Destination</spanx> from the
challenge's <spanx style="verb">recipient</spanx>, which makes the exchange self-contained:
nothing about the server has to be known before the resource is
asked for. The deposit and the <spanx style="verb">SettleDelay</spanx> are not in the
challenge and <bcp14>MUST NOT</bcp14> be inferred from one -- they bound what the
funder stands to lose and how long it waits to recover it, so they
belong to the funder.</t>

</section>
<section anchor="action-voucher"><name>action = "voucher"</name>

<figure><sourcecode type="json"><![CDATA[
{
  "action": "voucher",
  "channelId": "2D398F9458B0CF96284E3602E57A83E787C1A01658512F972CEDDB1819607E89",
  "amount": "200000",
  "signature": "304402..."
}
]]></sourcecode></figure>

<t><spanx style="verb">amount</spanx> is the new cumulative total, not the increment.</t>

</section>
<section anchor="action-close"><name>action = "close"</name>

<figure><sourcecode type="json"><![CDATA[
{
  "action": "close",
  "channelId": "2D398F9458B0CF96284E3602E57A83E787C1A01658512F972CEDDB1819607E89",
  "amount": "500000",
  "signature": "304402..."
}
]]></sourcecode></figure>

<t>Asks the server to redeem and close. The fields are those of a
<spanx style="verb">voucher</spanx>, and carry the same meaning: <spanx style="verb">amount</spanx> is the final
cumulative total, not an increment, and the signature covers it.</t>

<t>A server <bcp14>MUST</bcp14> verify a <spanx style="verb">close</spanx> payload exactly as it verifies a
<spanx style="verb">voucher</spanx> before acting on it. The request is a claim like any other,
and being the last one confers no standing: a <spanx style="verb">close</spanx> carrying a
cumulative below the mark, or a signature that does not verify, <bcp14>MUST</bcp14>
be refused on the same terms.</t>

<t>Redemption itself is the server's to perform and its timing the
server's to choose -- see <xref target="redemption"></xref>. A client cannot compel a
close by asking for one, and a server <bcp14>MAY</bcp14> treat the action as a
voucher that also signals the session is over.</t>

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

<t>The order is normative. Cheap local checks precede network calls so
that an unauthenticated caller cannot use verification to generate
ledger traffic.</t>

<section anchor="size-and-shape"><name>Size and Shape</name>

<t>The server <bcp14>MUST</bcp14> bound the credential size before parsing, and reject
a payload whose fields do not match the schema.</t>

</section>
<section anchor="signature"><name>Signature</name>

<t>The server <bcp14>MUST</bcp14> verify the claim signature over the tuple of channel
ID and cumulative amount, against the channel's authorised public
key <xref target="XRPL-KEYS"/>.</t>

<t>That key is a property of the channel, not of the server. A funder
chooses it in its own <spanx style="verb">PaymentChannelCreate</spanx> <xref target="XRPL-CHAN-CREATE"/>,
so a server accepting channels from callers it has not met cannot
know it in advance and <bcp14>MUST</bcp14> read it from the channel.</t>

<t>The signature check therefore follows the read rather than
preceding it. A consequence worth stating: a forged claim on a
channel identifier the server has not seen costs it one read.
Servers <bcp14>SHOULD</bcp14> cache channel state per channel, which reduces this
to established channels costing nothing, and <bcp14>SHOULD</bcp14> rate-limit
ahead of verification.</t>

<t>Verification <bcp14>MAY</bcp14> be performed locally or through the ledger's
<spanx style="verb">channel_verify</spanx> method <xref target="XRPL-CHANNEL-VERIFY"/>. Local verification is
preferred: it costs no round trip, and it does not disclose to a node
which channels a server is being paid through.</t>

<t>A matching <spanx style="verb">channel_authorize</spanx> <xref target="XRPL-CHANNEL-AUTHORIZE"/> exists for
producing claim signatures, but it is an admin method and takes a
secret, so a client signs locally in practice.</t>

<t>Ordering matters. A signature check is local arithmetic; a channel
lookup is a network round trip. Verifying the signature first means a
caller supplying random channel IDs is rejected without the server
making a request on its behalf.</t>

<t>The claim signs an XRP-denominated figure. Implementations <bcp14>MUST</bcp14>
derive it from the drop count by exact integer arithmetic. A
conversion through a binary floating-point value is lossy above 2^53
drops and, where it is lossy, produces a signature over a figure
differing from the amount that will be submitted, which then fails to
verify on-chain. See <xref target="amount-precision"></xref>.</t>

</section>
<section anchor="sender-binding"><name>Sender Binding</name>

<t>The channel's <spanx style="verb">Account</spanx> <bcp14>MUST</bcp14> match the address in the credential's
<spanx style="verb">source</spanx> DID. Without this, a claim can be replayed under another
party's identity.</t>

<t>The comparison <bcp14>MUST NOT</bcp14> be made against an address derived from the
channel's authorised public key. A channel may name any valid key
<xref target="XRPL-PAYCHAN-OBJECT"/>, and a funder is well advised to dedicate a
key pair to the channel so that its loss costs that channel alone;
the address derived from such a key belongs to nobody. Deriving the
funder from the key therefore rejects the funders that hold their
keys most carefully, and where it does succeed it establishes only
that the account and the channel key coincide.</t>

<t>A server therefore has to have read the channel before it can make
this comparison, which is one more reason the read is not optional.</t>

</section>
<section anchor="channel-state"><name>Channel State</name>

<t>The server <bcp14>MUST</bcp14> confirm, against the ledger, that:</t>

<t><list style="numbers" type="1">
  <t>the channel exists;</t>
  <t>its <spanx style="verb">Destination</spanx> is the recipient this server is charging for --
a funder can otherwise open a channel to an address of its own
choosing and receive service against claims this server can never
redeem;</t>
  <t>its <spanx style="verb">PublicKey</spanx> is the key the claim signature was verified
against;</t>
  <t>its <spanx style="verb">SettleDelay</spanx> is at least the server's configured minimum;</t>
  <t>the cumulative claimed is greater than <spanx style="verb">Balance</spanx> and no greater
than <spanx style="verb">Amount</spanx>;</t>
  <t>the channel is not expired, and not within the settlement margin
of expiry.</t>
</list></t>

<t><spanx style="verb">Amount</spanx> is everything the channel holds and <spanx style="verb">Balance</spanx> is what it has
already delivered, so a cumulative claim is bounded by <spanx style="verb">Amount</spanx>
alone. Subtracting <spanx style="verb">Balance</spanx> from it would reject valid claims: a
channel holding 1,000,000 drops that has delivered 500,000 still
honours a claim for 600,000.</t>

<t>The drops a claim delivers on redemption are
<spanx style="verb">claimed - Balance</spanx>. A server tracking what it has earned <bcp14>SHOULD</bcp14>
compute the increment against <spanx style="verb">max(Balance, mark)</spanx> rather than
against its own high-water mark alone, since a claim redeemed
outside this exchange advances <spanx style="verb">Balance</spanx> without the server
observing it.</t>

<t>A server <bcp14>MAY</bcp14> cache this state briefly, but the two fields that can
move against it need care of different kinds.</t>

<t><spanx style="verb">Amount</spanx> only ever grows, since a funder may add to a channel and
cannot withdraw from it. A stale value is therefore pessimistic: it
under-reports the deposit and can only cause an unnecessary refusal,
which a single re-read resolves.</t>

<t><spanx style="verb">Expiration</spanx> is not monotone. A funder may set or shorten it at any
time, so a stale absence of an expiry is optimistic in exactly the
wrong direction. A cache lifetime as long as the settlement margin of
<xref target="closing-window"></xref> spends that whole margin on staleness: the
channel may have entered its closing window a full lifetime ago,
leaving no real
time to redeem. Implementations <bcp14>MUST</bcp14> keep the cache lifetime
materially below the margin, or read <spanx style="verb">Expiration</spanx> fresh.</t>

</section>
<section anchor="settle-delay"><name>Settle Delay Floor</name>

<t>The server <bcp14>MUST</bcp14> reject a channel whose <spanx style="verb">SettleDelay</spanx> is below a
configured minimum, and that minimum <bcp14>SHOULD</bcp14> be no less than one hour.</t>

<t>The delay is the whole of the destination's protection. Once the
funder initiates closure, the destination has exactly <spanx style="verb">SettleDelay</spanx>
to submit its claim. A channel with a delay of sixty seconds lets a
funder consume service and close before any realistic operator can
detect and respond, and the unredeemed value returns to the funder.</t>

</section>
<section anchor="closing-window"><name>Closing Window</name>

<t>The server <bcp14>MUST</bcp14> refuse a voucher when the channel is within a
configured margin of <spanx style="verb">Expiration</spanx> or <spanx style="verb">CancelAfter</spanx>.</t>

<t>One ledger amendment <xref target="XRPL-AMENDMENTS"/> bears directly on this
window. <spanx style="verb">fixPayChanCancelAfter</spanx> makes <spanx style="verb">PaymentChannelCreate</spanx> fail
when <spanx style="verb">CancelAfter</spanx> is already in the past; without it a channel
could be created that was unusable from the moment it existed. A
server <bcp14>MUST NOT</bcp14> assume the amendment is enabled on the network it is
talking to. It does not need to: reading <spanx style="verb">CancelAfter</spanx> from the
channel, which <xref target="channel-state"></xref> requires anyway, settles the
question for that channel whatever the network has enabled.</t>

<t>Accepting a claim in that window earns value the server has no time
left to redeem. Treating those fields as advisory -- reporting them
while still accepting the claim -- is not sufficient: after
<spanx style="verb">CancelAfter</spanx> anyone may delete the channel and the deposit returns
to the funder.</t>

</section>
<section anchor="state-keys"><name>State Keys</name>

<t>Every piece of state a server keeps for a channel -- its high-water
mark, any cached ledger metadata, and any record that the channel is
finalized -- <bcp14>MUST</bcp14> be keyed on the pair of network and channel ID, not
on the channel ID alone.</t>

<t>A channel ID does not identify a channel on its own. It derives from
the funder, the destination and a sequence number, and one seed
controls the same address on every network, so the same funder
opening to the same destination from a fresh account produces the
same ID twice. Keyed on the ID alone, testnet activity moves a
mainnet channel's mark, and a channel finalized on one network is
refused on the other.</t>

<t>The channel ID <bcp14>MUST</bcp14> be canonicalised before use as a key. Hex is
case-insensitive as a value, and both layers beneath the store treat
it that way: a claim signed over one casing verifies against another,
and the ledger resolves either. A key built on the raw string is
therefore not one key but one per casing, and the same voucher can be
spent once for each -- unbounded in practice, since a 64-character
identifier has as many casings as it has letters.</t>

</section>
<section anchor="monotonicity"><name>Monotonicity</name>

<t>The server <bcp14>MUST</bcp14> reject a cumulative amount that is not strictly
greater than its high-water mark for that channel, and <bcp14>MUST</bcp14> perform
the comparison and the update as one atomic operation.</t>

<t>Three outcomes are distinct and <bcp14>MUST</bcp14> be distinguished:</t>

<texttable>
      <ttcol align='left'>Condition</ttcol>
      <ttcol align='left'>Meaning</ttcol>
      <c>cumulative equals the mark</c>
      <c>replay of an accepted claim</c>
      <c>cumulative below the mark</c>
      <c>attempt to roll back</c>
      <c>cumulative above, but increment below what was requested</c>
      <c>underpayment</c>
</texttable>

<t>The third is the one most easily missed. A first claim on a fresh
channel has no previous mark to exceed, so a check written only
against the mark accepts any positive amount -- one drop satisfies a
one-XRP request.</t>

<t>The update <bcp14>MUST</bcp14> be a compare-and-set, shared across every process
serving the channel and durable across restarts. A read followed by a
write lets two replicas accept the same claim concurrently, and a
mark lost on restart lets every claim be replayed.</t>

</section>
<section anchor="finalized-channels"><name>Finalized Channels</name>

<t>Once the server has closed a channel, it <bcp14>MUST</bcp14> record that and reject
later claims against it. A closed channel cannot be redeemed again,
so a claim accepted afterwards is service given away.</t>

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

<section anchor="redemption"><name>Redemption</name>

<t>The server submits <spanx style="verb">PaymentChannelClaim</spanx> <xref target="XRPL-CHAN-CLAIM"/>
carrying the highest cumulative amount it holds and the matching
signature.</t>

<t>The <spanx style="verb">tfClose</spanx> flag is accepted from the source and from the
destination alike, and its effect differs by sender. From the
destination the channel closes at once: the claim settles, the entry
is deleted, and the unspent deposit returns to the funder. From the
source it schedules closure for once <spanx style="verb">SettleDelay</spanx> has elapsed,
which is what preserves the destination's window described in
<xref target="settle-delay"></xref>.</t>

<t>A server ending a session <bcp14>SHOULD</bcp14> set it. One transaction then both
collects what was earned and releases the funder's deposit and owner
reserve, where a claim without it leaves the entry in place holding
both.</t>

<t>Implementations <bcp14>MUST</bcp14> verify which flag they set. <spanx style="verb">tfClose</spanx> and
<spanx style="verb">tfRenew</spanx> are adjacent values, and <spanx style="verb">tfRenew</spanx> clears the channel's
<spanx style="verb">Expiration</spanx> rather than closing anything. Substituting one for the
other fails silently: the claim still settles and the transaction
still succeeds, so only reading the channel entry afterwards
distinguishes a close from a renewal.</t>

<t>The submitted <spanx style="verb">Balance</spanx> <bcp14>MUST</bcp14> be the exact drop count the signature
covers. If the two disagree the ledger rejects the signature and the
earned value becomes unredeemable.</t>

</section>
<section anchor="idle-channels"><name>Idle Channels</name>

<t>A funder may extend a channel's deposit or expiry with
<spanx style="verb">PaymentChannelFund</spanx> <xref target="XRPL-CHAN-FUND"/>, but is under no obligation
to. A client that disappears mid-session leaves value authorised but
unclaimed, and the funder may begin closure at any time. A server
<bcp14>SHOULD</bcp14> therefore redeem proactively rather than waiting for a client
that may not return.</t>

<t>Where <spanx style="verb">fixPayChanRecipientOwnerDir</spanx> <xref target="XRPL-AMENDMENTS"/> is enabled,
a channel is listed in the recipient's owner directory as well as
the funder's, so a server can enumerate the channels paying it
rather than relying solely on its own records. The owner reserve for
the entry stays with the funder, who created it; being listed costs
the recipient nothing.</t>

</section>
<section anchor="receipts"><name>Receipts</name>

<t>A receipt for a session payment identifies the claim, not a
transaction. Beyond the base fields <xref target="I-D.httpauth-payment"/> defines:</t>

<texttable>
      <ttcol align='left'>Field</ttcol>
      <ttcol align='left'>Type</ttcol>
      <ttcol align='left'>Open</ttcol>
      <ttcol align='left'>Voucher</ttcol>
      <ttcol align='left'>Close</ttcol>
      <ttcol align='left'>Meaning</ttcol>
      <c><spanx style="verb">channelId</spanx></c>
      <c>string</c>
      <c><bcp14>REQUIRED</bcp14></c>
      <c><bcp14>REQUIRED</bcp14></c>
      <c><bcp14>REQUIRED</bcp14></c>
      <c>Channel the payment went through</c>
      <c><spanx style="verb">cumulative</spanx></c>
      <c>string</c>
      <c><bcp14>OPTIONAL</bcp14></c>
      <c><bcp14>REQUIRED</bcp14></c>
      <c><bcp14>REQUIRED</bcp14></c>
      <c>Drop total authorised after this claim</c>
      <c><spanx style="verb">txHash</spanx></c>
      <c>string</c>
      <c><bcp14>REQUIRED</bcp14></c>
      <c>absent</c>
      <c>conditional</c>
      <c>Transaction the server submitted</c>
</texttable>

<t>A voucher receipt carries no <spanx style="verb">txHash</spanx>, and <bcp14>MUST NOT</bcp14> invent one: the
claim settles nothing by itself, and no transaction exists until the
channel is closed. An open receipt does carry one, for the
<spanx style="verb">PaymentChannelCreate</spanx> the server submitted.</t>

<t>A <spanx style="verb">close</spanx> receipt carries one when the server redeemed in the course
of answering, and none when it accepted the claim and deferred
redemption, which <xref target="redemption"></xref> permits. Its presence is therefore
what tells a client whether settlement has happened, and a client
<bcp14>MUST NOT</bcp14> infer settlement from the action alone.</t>

<t>The base <spanx style="verb">reference</spanx> remains method-specific and <bcp14>MAY</bcp14> carry these
values in a composite form. A server <bcp14>MUST NOT</bcp14> rely on a client
parsing one: a composite cannot be read without method knowledge,
which is what the named fields are for.</t>

</section>
</section>
<section anchor="errors"><name>Error Responses</name>

<t>Problem Details <xref target="RFC9457"/> on a <spanx style="verb">402</spanx>. Ledger result codes
<xref target="XRPL-TX-RESULTS"/> <bcp14>MUST NOT</bcp14> be surfaced raw. Distinct conditions
<bcp14>MUST</bcp14> be distinguishable by the client, and a server <bcp14>SHOULD</bcp14> report
each with the type named here:</t>

<texttable>
      <ttcol align='left'>Condition</ttcol>
      <ttcol align='left'>Meaning</ttcol>
      <ttcol align='left'>Problem type</ttcol>
      <c>channel not found</c>
      <c>no such channel on the ledger</c>
      <c><spanx style="verb">session/channel-not-found</spanx></c>
      <c>destination mismatch</c>
      <c>channel does not pay this server</c>
      <c><spanx style="verb">verification-failed</spanx></c>
      <c>settle delay too short</c>
      <c>below the server's floor</c>
      <c><spanx style="verb">verification-failed</spanx></c>
      <c>channel expired</c>
      <c>past <spanx style="verb">Expiration</spanx>/<spanx style="verb">CancelAfter</spanx></c>
      <c><spanx style="verb">session/channel-finalized</spanx></c>
      <c>channel closing</c>
      <c>inside the settlement margin</c>
      <c><spanx style="verb">session/channel-finalized</spanx></c>
      <c>channel exhausted</c>
      <c>claim exceeds the deposit left</c>
      <c><spanx style="verb">session/amount-exceeds-deposit</spanx></c>
      <c>invalid signature</c>
      <c>claim does not verify</c>
      <c><spanx style="verb">session/invalid-signature</spanx></c>
      <c>replay detected</c>
      <c>cumulative not above the mark</c>
      <c><spanx style="verb">verification-failed</spanx></c>
</texttable>

<t>The types are relative to <spanx style="verb">https://paymentauth.org/problems/</spanx>, the
base URI <xref target="I-D.httpauth-payment"/> establishes. Those in the
<spanx style="verb">session</spanx> namespace are the ones payment-channel methods already
share; this document adds none. Three conditions carry
<spanx style="verb">verification-failed</spanx> because they are refusals of the procedure in
<xref target="verification"></xref> rather than states of the channel, and the detail
field distinguishes them.</t>

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

<section anchor="the-server-bears-the-settlement-risk"><name>The Server Bears the Settlement Risk</name>

<t>The asymmetry is structural and worth stating plainly. The funder's
exposure is bounded by the deposit. The server's exposure is every
claim it has accepted but not yet redeemed, and it can lose that
value in three ways: the funder closes and the delay elapses
unnoticed, <spanx style="verb">CancelAfter</spanx> passes, or the server's high-water record is
lost before redemption. Only a redemption in a validated ledger
settles the matter <xref target="XRPL-FINALITY"/>.</t>

<t>Sections 7.5, 7.6, 7.7 and 8.2 each close one of these. None is
optional.</t>

</section>
<section anchor="signature-malleability"><name>Signature Malleability</name>

<t>For secp256k1 keys an ECDSA signature has two valid encodings
differing in the sign of S. An implementation <bcp14>MUST NOT</bcp14> treat the two
as distinct claims -- a distinct encoding of an accepted claim is
still that claim, and accepting it as new would credit the funder
twice.</t>

<t>Enforcing canonical low-S form on verification is the direct defence.
Implementations <bcp14>SHOULD</bcp14> confirm their verifier does so rather than
assume it.</t>

</section>
<section anchor="cache-staleness"><name>Cache Staleness</name>

<t>Caching channel state trades a round trip for a window in which the
server acts on a stale view. The deposit is safe to cache because it
only grows. The expiry is not, and a cache lifetime at or above the
settlement margin makes that margin nominal -- see <xref target="closing-window"></xref>.</t>

</section>
<section anchor="replay-store-durability"><name>Replay Store Durability</name>

<t>The high-water mark is the only record that a claim has been spent.
It is not reconstructible from the ledger, which sees only the final
redemption. A store lost on restart therefore does not degrade
gracefully: every claim ever issued becomes replayable.</t>

</section>
<section anchor="amount-precision"><name>Amount Precision</name>

<t>Drop counts up to the total supply exceed the 2^53 integers exactly
representable in IEEE-754; the boundary is 9,007,199,254 XRP. Above
it, a conversion through a floating-point value yields a signature
over a figure differing from the submitted amount, and the ledger
rejects it. The threshold is far above any plausible channel, but the
failure is silent and the arithmetic is not hard to get right, so
exact integer handling is a <bcp14>MUST</bcp14>.</t>

</section>
<section anchor="the-challenge-must-match-the-resource"><name>The Challenge Must Match the Resource</name>

<t>A verifier reads the increment, the channel and the recipient from
the challenge the credential carries, so the requirement in "The
Challenge Must Match the Resource" of <xref target="I-D.xrpl-charge"/> applies
here unchanged: a server <bcp14>MUST</bcp14> confirm that the terms it is about to
verify are the terms the requested resource charges, and <bcp14>MUST</bcp14> refuse
the credential otherwise. A session compounds the consequence,
because a challenge accepted against the wrong resource moves that
resource's high-water mark for every voucher that follows.</t>

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

<t>As <xref target="I-D.xrpl-charge"/>: TLS for any non-loopback ledger connection.</t>

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

<t>The <spanx style="verb">xrpl</spanx> payment method is registered in the "HTTP Payment
Methods" registry by <xref target="I-D.xrpl-charge"/>; this document does not
register it again.</t>

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

<t>This document requests registration of the following entry in the
"HTTP Payment Intents" registry established by
<xref target="I-D.httpauth-payment"/>:</t>

<texttable>
      <ttcol align='left'>Intent</ttcol>
      <ttcol align='left'>Applicable Methods</ttcol>
      <ttcol align='left'>Description</ttcol>
      <ttcol align='left'>Reference</ttcol>
      <c><spanx style="verb">session</spanx></c>
      <c><spanx style="verb">xrpl</spanx></c>
      <c>Off-ledger payment channel vouchers</c>
      <c>This document</c>
</texttable>

<t>Contact: Maxime Dienger (<eref target="mailto:maximed@ripple.com">maximed@ripple.com</eref>)</t>

<t><spanx style="verb">session</spanx> is an experimental intent, defined by method documents
rather than by an intent document of its own. Should it be
formalized, this document should be updated to reference that
document rather than define the intent here.</t>

</section>
<section anchor="problem-types"><name>Problem Types</name>

<t>This document registers no problem type URI. The conditions in
<xref target="errors"></xref> are reported with types already established: the core
types of <xref target="I-D.httpauth-payment"/>, and the <spanx style="verb">session</spanx> namespace that
payment-channel methods share.</t>

</section>
</section>


  </middle>

  <back>


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

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

&RFC2119;
&RFC3339;
&RFC8174;
&RFC8259;
&RFC9457;
<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>
<reference anchor="I-D.xrpl-charge" target="https://datatracker.ietf.org/doc/draft-xrpl-charge/">
  <front>
    <title>XRP Ledger Charge Intent for HTTP Payment Authentication</title>
    <author initials="M." surname="Dienger" fullname="Maxime Dienger">
      <organization></organization>
    </author>
    <date year="2026"/>
  </front>
</reference>


    </references>

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

<reference anchor="XRPL-PAYCHAN" target="https://xrpl.org/docs/concepts/payment-types/payment-channels">
  <front>
    <title>Payment Channels</title>
    <author >
      <organization>XRP Ledger Foundation</organization>
    </author>
    <date year="2026"/>
  </front>
</reference>
<reference anchor="XRPL-PAYCHAN-OBJECT" target="https://xrpl.org/docs/references/protocol/ledger-data/ledger-entry-types/paychannel">
  <front>
    <title>PayChannel Ledger Entry</title>
    <author >
      <organization>XRP Ledger Foundation</organization>
    </author>
    <date year="2026"/>
  </front>
</reference>
<reference anchor="XRPL-CHAN-CREATE" target="https://xrpl.org/docs/references/protocol/transactions/types/paymentchannelcreate">
  <front>
    <title>PaymentChannelCreate Transaction</title>
    <author >
      <organization>XRP Ledger Foundation</organization>
    </author>
    <date year="2026"/>
  </front>
</reference>
<reference anchor="XRPL-CHAN-CLAIM" target="https://xrpl.org/docs/references/protocol/transactions/types/paymentchannelclaim">
  <front>
    <title>PaymentChannelClaim Transaction</title>
    <author >
      <organization>XRP Ledger Foundation</organization>
    </author>
    <date year="2026"/>
  </front>
</reference>
<reference anchor="XRPL-CHAN-FUND" target="https://xrpl.org/docs/references/protocol/transactions/types/paymentchannelfund">
  <front>
    <title>PaymentChannelFund Transaction</title>
    <author >
      <organization>XRP Ledger Foundation</organization>
    </author>
    <date year="2026"/>
  </front>
</reference>
<reference anchor="XRPL-CHANNEL-VERIFY" target="https://xrpl.org/docs/references/http-websocket-apis/public-api-methods/payment-channel-methods/channel_verify">
  <front>
    <title>channel_verify Method</title>
    <author >
      <organization>XRP Ledger Foundation</organization>
    </author>
    <date year="2026"/>
  </front>
</reference>
<reference anchor="XRPL-CHANNEL-AUTHORIZE" target="https://xrpl.org/docs/references/http-websocket-apis/admin-api-methods/signing-methods/channel_authorize">
  <front>
    <title>channel_authorize Method</title>
    <author >
      <organization>XRP Ledger Foundation</organization>
    </author>
    <date year="2026"/>
  </front>
</reference>
<reference anchor="XRPL-RESERVES" target="https://xrpl.org/docs/concepts/accounts/reserves">
  <front>
    <title>Reserves</title>
    <author >
      <organization>XRP Ledger Foundation</organization>
    </author>
    <date year="2026"/>
  </front>
</reference>
<reference anchor="XRPL-FINALITY" target="https://xrpl.org/docs/concepts/transactions/finality-of-results">
  <front>
    <title>Finality of Results</title>
    <author >
      <organization>XRP Ledger Foundation</organization>
    </author>
    <date year="2026"/>
  </front>
</reference>
<reference anchor="XRPL-TX-RESULTS" target="https://xrpl.org/docs/references/protocol/transactions/transaction-results">
  <front>
    <title>Transaction Results</title>
    <author >
      <organization>XRP Ledger Foundation</organization>
    </author>
    <date year="2026"/>
  </front>
</reference>
<reference anchor="XRPL-KEYS" target="https://xrpl.org/docs/concepts/accounts/cryptographic-keys">
  <front>
    <title>Cryptographic Keys</title>
    <author >
      <organization>XRP Ledger Foundation</organization>
    </author>
    <date year="2026"/>
  </front>
</reference>
<reference anchor="XRPL-BASIC-TYPES" target="https://xrpl.org/docs/references/protocol/data-types/basic-data-types">
  <front>
    <title>Basic Data Types</title>
    <author >
      <organization>XRP Ledger Foundation</organization>
    </author>
    <date year="2026"/>
  </front>
</reference>
<reference anchor="XRPL-AMENDMENTS" target="https://xrpl.org/resources/known-amendments">
  <front>
    <title>Known Amendments</title>
    <author >
      <organization>XRP Ledger Foundation</organization>
    </author>
    <date year="2026"/>
  </front>
</reference>


    </references>

</references>


<?line 817?>

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

<section anchor="voucher-challenge"><name>Voucher Challenge</name>

<t>As on a charge, the challenge travels as <spanx style="verb">WWW-Authenticate</spanx>
parameters with the request object base64url-encoded in <spanx style="verb">request</spanx>:</t>

<figure><sourcecode type="http"><![CDATA[
HTTP/1.1 402 Payment Required
WWW-Authenticate: Payment id="qp9htNPwjAcnwDQqNTfHEulIIuAd...",
  realm="api.example.com", method="xrpl", intent="session",
  request="eyJhbW91bnQiOiIxMDAwMDAiLCJjaGFubmVsSWQiOiIyRDM5OEY5NDU...",
  expires="2026-08-21T10:32:00Z"
]]></sourcecode></figure>

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

<figure><sourcecode type="json"><![CDATA[
{
  "amount": "100000",
  "channelId":
    "2D398F9458B0CF96284E3602E57A83E787C1A01658512F972CEDDB1819607E89",
  "methodDetails": {
    "cumulativeAmount": "200000",
    "network": "testnet",
    "reference": "a55d88b1-0174-4542-9c63-83aa7ac0db2f"
  },
  "recipient": "rhewi79quXUDwcqjkpj4bXuw3cuHYC9fwv"
}
]]></sourcecode></figure>

<t><spanx style="verb">amount</spanx> is the increment for this request and <spanx style="verb">cumulativeAmount</spanx> the
total already accepted, so the credential below signs their sum. The
line breaks are for presentation.</t>

</section>
<section anchor="voucher-credential"><name>Voucher Credential</name>

<t>Third request in a session, each charging 100,000 drops. The
cumulative total is 300,000; the increment is 100,000.</t>

<figure><sourcecode type="json"><![CDATA[
{
  "action": "voucher",
  "channelId":
    "2D398F9458B0CF96284E3602E57A83E787C1A01658512F972CEDDB1819607E89",
  "amount": "300000",
  "signature": "3044022057..."
}
]]></sourcecode></figure>

</section>
<section anchor="redemption-transaction"><name>Redemption Transaction</name>

<t>After five such requests the server holds a claim for 500,000 drops
and submits:</t>

<figure><sourcecode type="json"><![CDATA[
{
  "TransactionType": "PaymentChannelClaim",
  "Channel":
    "2D398F9458B0CF96284E3602E57A83E787C1A01658512F972CEDDB1819607E89",
  "Balance": "500000",
  "Amount": "500000",
  "Signature": "3044022057...",
  "PublicKey": "ED690468FD78177F3158..."
}
]]></sourcecode></figure>

<t>Five payments, two on-chain transactions.</t>

</section>
</section>


  </back>

<!-- ##markdown-source:
H4sIAAAAAAAAA71963YbR5Lm/3yKWuqHrT4ERVKkLlS7Z2mSGtPWrUm63Z45
s4sEkCDKBKrgyoIgtKR+lnmWebKJLyLyUiAoW17t6BxJJFCVlZe4fnGpXq9n
2rKduqPi7xdvihdudO2a4tJ5X9ZVcV61rmqLcd0U311dvSne2NUMHxwv2gn9
Xw5tS5cZOxg07i2P8CLca0b1sLIzGnfU2HHbe9fMpz0v3/V2d81b1+DHo4J+
pmHcdd2sjoqyGtemnDdHRVW/rEflWB9x1Sx8u7+7+3R33/jFYFbyOO1q7nDP
yM0d/VO1ZlhX3lV+4Y+KsZ16Z4ylqdbNkSmKXiHzeWnflTNXnJauorXSFwUN
QTe83Ol85ma2nB4VM7569L+bcj6fup1hPeNv6+b6qLjgz4yp6mZG03zr8JiL
5yf7e3tP9ceHDx+GH5/sPT4IP+4fhk+fHhw+xo/nvdOdSdvOMd/eXPb5iB+l
x7N1NXHFV3oCX8l5dM+huBxO3MxtyV22uXbtUYEx/dGDByPb2raxwxvX7JSu
He/QCh7QGT2Q42lWtuqtP/8Bj5R2EH/CLn5vb1zxsn7nVvwFDU8f7u/uP+rt
7uly+MiHE0yku5KM0k74699JaH9oZdksPrWeDVSR1mQMCDM7ZFB6783xzyff
Hb/qri3MnBZWVW7qN88Zkwrz9A+Iaodu3voHuu89EHb6bahDbZw9E2K2oc/r
RTUStlxbQ3fWvdfffn92cnVr8jrvMNxZ1Tar37OGxo1d42gdNO+mbuthPX0w
5TF6OKDws8N4aX26tC+zMl7WycXZ8dXZxjPRpZ00jm4trhpbeTu8m65+e31t
GsI/6JyZrmvIj/qSq3txfP7yk4ub2nL2P7M2POkLLu35j69OP7Wy5zTI/8jC
xvSgL7euV2cven87uzh//nN3cfqw/0t6sByvipeOnjX6zDXhgt7SDXxNwq/t
2XlJa1kMpuUQP/dmPOYtORI/707hyy75+Mer715fnP/b2eZVy3PKf7gvt3A7
mpVVZ92+vK7K6vrWeuPDv8ySL84uzy7+dnbZXemF86556z5P/tvhkJ7WYq1y
95eZ4fPzV8cvzq/WKPB5Wdlp2a6KelzQbBfT9vMm22GksQ7Wq8e9Rgb7MnO/
+js2+McXV2v7m0mCz5n9b0uE9MuXXcgPZz+vLeGkWc3b+rqx80k5LH5wqz9I
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
jS2wfg6GAAA=

-->

</rfc>

