How a session works
- Deposit. The client transfers a budget into a session-escrow contract on the settlement layer. The escrow holds the funds and exposes a settlement function that pays the seller and refunds the remainder.
- Voucher per request. For each paid request, the client signs an off-chain voucher carrying
(sessionId, cumulativeAmount, nonce, expiry). The server checks that the cumulative amount is monotonically increasing and within the deposited balance. No on-chain action is needed at this step. - Settle. At the end of the session or on a configured cadence, a facilitator submits the latest voucher to the escrow. The escrow pays the seller the cumulative amount and returns the remaining balance to the client. Only this transaction touches the chain.
When to use sessions vs. charge
The break-even point depends on how expensive the per-request on-chain settlement is relative to the request price. As soon as you are paying more in gas than in payment, sessions are the right pattern.
Agent use cases
- Token-priced LLM inference. A client streams completions and signs a voucher per token batch; the inference server settles at session end.
- Frame-priced video. An agent consuming a generated video signs vouchers per N frames; the renderer settles when the stream closes.
- Real-time data feeds. A subscriber pays per tick of an oracle or market-data stream, settling once per session window.
Status on Stable
Sessions require two pieces that Stable does not currently provide:- A session-aware escrow contract for USDT0 that holds the deposit and exposes a
settleVouchers(or equivalent) function. - A facilitator that issues vouchers on the seller side and verifies them on the buyer side, batching submissions to the escrow.
Next recommended
MPP concept
Read the broader standard, including charge and subscription intents.
Agent settlement
See where MPP sessions would sit in the agent-payment rail on Stable.
Build an MPP endpoint on Stable
Use the charge intent today while sessions are forthcoming.

