Capability records: documented facts per rail
Thirteen documented structural facts for each of six payment rails, read from each rail's own primary documentation and served as signed credentials. This page renders them for readers, one card per rail under each question, rails in alphabetical order, with each card's sources folded beneath it; the signed records themselves are listed at the end for software.
This is a documentation profile, not a recommendation: every cell states what a specification or an operator's own documentation says, no number in this document was produced by executing a payment, no rail is endorsed, no ordering implies a best buy, and no rail is being suggested for use.
Rails are listed alphabetically by rail name. That ordering is fixed and carries no performance meaning.
The same thirteen questions were put to all six rails, in the same fixed order, against each rail's own primary documentation: twelve on a single date (2026-10-09) and the thirteenth, offline verifiability, on a single later date (2026-10-10).
Every documentation-derived cell cites the primary source it rests on, by URL, with the date it was retrieved.
Who pays the network fee
Who the documentation says pays the network fee for a payment, and whether recovery from either party is stated.
Google Cloud with AP2
AP2 is an authorization and evidence layer, not a settlement rail; the specification, mandate documents, considerations, FAQ and glossary contain no network-fee provision. Who pays a network fee depends on the payment instrument beneath AP2, which the protocol does not fix.
Sources (12), retrieved 2026-10-09: Google Cloud with AP2, Who pays the network fee
- https://ap2-protocol.org/ap2/specification/
- https://ap2-protocol.org/
- https://raw.githubusercontent.com/google-agentic-commerce/AP2/main/docs/ap2/specification.md
- https://raw.githubusercontent.com/google-agentic-commerce/AP2/main/docs/ap2/payment_mandate.md
- https://raw.githubusercontent.com/google-agentic-commerce/AP2/main/docs/ap2/checkout_mandate.md
- https://raw.githubusercontent.com/google-agentic-commerce/AP2/main/docs/ap2/agent_authorization.md
- https://raw.githubusercontent.com/google-agentic-commerce/AP2/main/docs/ap2/flows.md
- https://raw.githubusercontent.com/google-agentic-commerce/AP2/main/docs/ap2/implementation_considerations.md
- https://raw.githubusercontent.com/google-agentic-commerce/AP2/main/docs/ap2/security_and_privacy_considerations.md
- https://raw.githubusercontent.com/google-agentic-commerce/AP2/main/docs/faq.md
- https://raw.githubusercontent.com/google-agentic-commerce/AP2/main/docs/glossary.md
- https://raw.githubusercontent.com/google-agentic-commerce/AP2/main/docs/overview.md
Machine Payments Protocol on Lightning
Protocol layer (BOLT 7, BOLT 4): the origin node must pay each forwarding node the fee that node advertises, and the amount forwarded to a non-final hop includes the origin-computed fee. Operator layer (Spark, Lightspark): payLightningInvoice takes a required maximum fee the payer will pay, and the Spark fee table lists a fee structure for Spark to Lightning sends. Neither the Machine Payments Protocol Lightning draft nor the Spark pages read say whether the payer recovers the fee from the payee.
Sources (6), retrieved 2026-10-09: Machine Payments Protocol on Lightning, Who pays the network fee
- https://raw.githubusercontent.com/lightning/bolts/master/07-routing-gossip.md
- https://raw.githubusercontent.com/lightning/bolts/master/04-onion-routing.md
- https://docs.spark.money/api-reference/wallet/pay-lightning-invoice.md
- https://docs.spark.money/wallets/estimate-fees.md
- https://raw.githubusercontent.com/tempoxyz/mpp-specs/main/specs/methods/lightning/draft-lightning-charge-00.md
- https://mpp.dev/payment-methods/lightning/charge.md
Machine Payments Protocol on Tempo
The Tempo charge method draft makes the fee bearer a per-challenge choice: with methodDetails.feePayer false or omitted the client sets the fee token and arranges payment of the fee; with feePayer true the server commits to paying the fee and may recover the cost through pricing. The Tempo fee specification (chain layer, operator Tempo Labs) states that without a fee payer signature the sender pays, and that a fee payer signature authorizes a third party to pay; fees go to the block proposer.
Sources (3), retrieved 2026-10-09: Machine Payments Protocol on Tempo, Who pays the network fee
x402 on Base
The exact-on-EVM scheme states that the facilitator pays the gas and the client signs. The scheme-level text says a facilitator may pay the fee or relay a payer-funded payment. The CDP FAQ states the facilitator pays gas and that the per-transaction price covers it; the CDP pricing text places that price on the seller.
Sources (5), retrieved 2026-10-09: x402 on Base, Who pays the network fee
- https://raw.githubusercontent.com/x402-foundation/x402/main/specs/schemes/exact/scheme_exact_evm.md
- https://raw.githubusercontent.com/x402-foundation/x402/main/specs/schemes/exact/scheme_exact.md
- https://docs.cdp.coinbase.com/x402/support/faq.md
- https://docs.cdp.coinbase.com/x402/seller/facilitator.md
- https://raw.githubusercontent.com/x402-foundation/x402/main/specs/x402-specification-v2.md
x402 on Solana
The exact-on-Solana scheme assigns the network fee to the fee-payer account, which may be the merchant or a third-party facilitator, and restricts that account to paying the fee. Solana documentation states the fee is deducted from the fee payer and is charged even if the transaction fails. No document read says the fee is recovered from either party.
Sources (5), retrieved 2026-10-09: x402 on Solana, Who pays the network fee
- https://raw.githubusercontent.com/x402-foundation/x402/main/specs/schemes/exact/scheme_exact_svm.md
- https://solana.com/docs/core/fees/fee-structure.md
- https://solana.com/docs/tools/kora/guides/x402.md
- https://solana.com/docs/tools/x402-facilitator.md
- https://solana.com/docs/payments/agentic-payments/x402.md
x402 on Stellar
The Stellar exact scheme has the facilitator rebuild the transaction with its own account as source, and that account pays the fee; the paying agent signs an authorization entry, not the transaction. The specification does not say whether the cost is recovered; the OpenZeppelin Channels documentation for the service used by the hosted Built on Stellar facilitator says fees are paid by the service and that the service is free to use.
Sources (5), retrieved 2026-10-09: x402 on Stellar, Who pays the network fee
- https://raw.githubusercontent.com/x402-foundation/x402/main/specs/schemes/exact/scheme_exact_stellar.md
- https://developers.stellar.org/docs/learn/fundamentals/fees-resource-limits-metering.md
- https://stellar.org/blog/foundation-news/x402-on-stellar
- https://docs.openzeppelin.com/relayer/1.5.x/guides/stellar-channels-guide
- https://raw.githubusercontent.com/x402-foundation/x402/main/specs/x402-specification-v2.md
Finality model class
The class of finality the settlement layer documents.
Google Cloud with AP2
not-defined-at-this-layerAP2 is an authorization and evidence layer, not a settlement rail; AP2 describes itself as a security feature within a commerce protocol and defines mandates and receipts, not settlement. No finality class is defined.
Sources (12), retrieved 2026-10-09: Google Cloud with AP2, Finality model class
- https://ap2-protocol.org/ap2/specification/
- https://ap2-protocol.org/
- https://raw.githubusercontent.com/google-agentic-commerce/AP2/main/docs/ap2/specification.md
- https://raw.githubusercontent.com/google-agentic-commerce/AP2/main/docs/ap2/payment_mandate.md
- https://raw.githubusercontent.com/google-agentic-commerce/AP2/main/docs/ap2/checkout_mandate.md
- https://raw.githubusercontent.com/google-agentic-commerce/AP2/main/docs/ap2/agent_authorization.md
- https://raw.githubusercontent.com/google-agentic-commerce/AP2/main/docs/ap2/flows.md
- https://raw.githubusercontent.com/google-agentic-commerce/AP2/main/docs/ap2/implementation_considerations.md
- https://raw.githubusercontent.com/google-agentic-commerce/AP2/main/docs/ap2/security_and_privacy_considerations.md
- https://raw.githubusercontent.com/google-agentic-commerce/AP2/main/docs/faq.md
- https://raw.githubusercontent.com/google-agentic-commerce/AP2/main/docs/glossary.md
- https://raw.githubusercontent.com/google-agentic-commerce/AP2/main/docs/overview.md
Machine Payments Protocol on Lightning
preimage-on-settlementBOLT 2 states that knowledge of the payment preimage is irrevocable by definition, and the BOLT glossary defines the preimage as proof that payment has been received. The Machine Payments Protocol Lightning draft states that settlement is final once the preimage is revealed and that the preimage is not revealed until the HTLC resolves.
Sources (3), retrieved 2026-10-09: Machine Payments Protocol on Lightning, Finality model class
Machine Payments Protocol on Tempo
deterministicThe Tempo chain documentation (operator Tempo Labs) states that Tempo uses Simplex BFT consensus with deterministic finality and that a finalized block cannot be reverted; integrators are told to treat finalized blocks as irreversible.
Sources (1), retrieved 2026-10-09: Machine Payments Protocol on Tempo, Finality model class
x402 on Base
stagedThe Base documentation describes finality for ordinary Base transactions as a sequence of named stages, each giving increasing security guarantees. The x402 specification does not define a finality class; its settle endpoint establishes finality from the resource server perspective.
Sources (3), retrieved 2026-10-09: x402 on Base, Finality model class
x402 on Solana
stagedThe Solana RPC overview defines three named commitment levels (processed, confirmed, finalized) that state how finalized a block must be, with processed described as still able to be rolled back. The x402 specification does not define a finality class.
Sources (2), retrieved 2026-10-09: x402 on Solana, Finality model class
x402 on Stellar
deterministicThe Stellar Consensus Protocol page describes federated voting in which a confirmed statement cannot be contradicted, and states that the protocol prioritizes safety over liveness; the transaction lifecycle page says consensus settles on a single transaction set per ledger. The pages read do not use the word finality.
Sources (6), retrieved 2026-10-09: x402 on Stellar, Finality model class
- https://developers.stellar.org/docs/learn/fundamentals/stellar-consensus-protocol.md
- https://developers.stellar.org/docs/learn/fundamentals/transactions/transaction-lifecycle
- https://developers.stellar.org/docs/build/agentic-payments/x402
- https://developers.stellar.org/docs/learn/fundamentals/transactions/operations-and-transactions
- https://developers.stellar.org/docs/learn/glossary
- https://developers.stellar.org/llms.txt
Retry and idempotency
Whether resubmitting the identical credential, or signing a fresh one while the first is valid, can move value twice, and the documented deduplication mechanism and its layer.
Google Cloud with AP2
AP2 v0.2 names double spend as a threat. Its mitigation places a MUST on the Shopping Agent not to sign or present overlapping closed mandates from one open mandate without a rejection receipt for the earlier one, and gives verifiers a MAY to reject overlapping mandates. Each closed Payment Mandate carries a transaction_id that is the hash of the checkout it pays for. Whether the instrument beneath can move value twice on an identical resubmit is not answered at this layer.
Sources (7), retrieved 2026-10-09: Google Cloud with AP2, Retry and idempotency
- https://raw.githubusercontent.com/google-agentic-commerce/AP2/main/docs/ap2/security_and_privacy_considerations.md
- https://ap2-protocol.org/ap2/specification/
- https://raw.githubusercontent.com/google-agentic-commerce/AP2/main/docs/ap2/implementation_considerations.md
- https://raw.githubusercontent.com/google-agentic-commerce/AP2/main/code/sdk/schemas/ap2/payment_mandate.json
- https://raw.githubusercontent.com/google-agentic-commerce/AP2/main/docs/ap2/payment_mandate.md
- https://raw.githubusercontent.com/google-agentic-commerce/AP2/main/docs/ap2/flows.md
- https://raw.githubusercontent.com/google-agentic-commerce/AP2/main/docs/faq.md
Machine Payments Protocol on Lightning
The core draft requires single-use proofs and the Lightning method draft requires that a consumed challenge is never accepted again, with acceptance and invalidation atomic. BOLT 4 says a final node whose payment hash has already been paid MAY succeed in accepting the HTLC, so another payment to the same hash is not prevented at the protocol layer. On the Spark path, payLightningInvoice takes an optional transferId for retrying the same logical payment, and the docs tell integrators not to create another payment because the original call threw.
Sources (6), retrieved 2026-10-09: Machine Payments Protocol on Lightning, Retry and idempotency
- https://raw.githubusercontent.com/tempoxyz/mpp-specs/main/specs/core/draft-httpauth-payment-01.md
- https://raw.githubusercontent.com/tempoxyz/mpp-specs/main/specs/methods/lightning/draft-lightning-charge-00.md
- https://raw.githubusercontent.com/lightning/bolts/master/04-onion-routing.md
- https://docs.spark.money/api-reference/wallet/pay-lightning-invoice.md
- https://docs.spark.money/wallets/withdraw-to-lightning.md
- https://raw.githubusercontent.com/lightning/bolts/master/11-payment-encoding.md
Machine Payments Protocol on Tempo
The core draft requires single-use proof semantics and concurrent-request protection, and the charge intent draft requires each challenge id to be single-use; the Tempo method draft names chain ID binding, nonce consumption and validity windows. At the chain layer TIP-1009 states that a transaction hash cannot execute twice but that changing validBefore produces a different hash, so a freshly signed transaction is a distinct transaction. In pull mode the server broadcasts, so another credential for a consumed challenge is rejected before broadcast; in push mode the client broadcasts before presenting the credential, and no document read says whether a second client-broadcast transaction for the same challenge is prevented. The mppx SDK (operator layer) claims transaction hashes and proof challenge IDs in a replay store.
Sources (6), retrieved 2026-10-09: Machine Payments Protocol on Tempo, Retry and idempotency
- https://raw.githubusercontent.com/tempoxyz/mpp-specs/main/specs/core/draft-httpauth-payment-01.md
- https://raw.githubusercontent.com/tempoxyz/mpp-specs/main/specs/intents/draft-payment-intent-charge-00.md
- https://raw.githubusercontent.com/tempoxyz/mpp-specs/main/specs/methods/tempo/draft-tempo-charge-00.md
- https://tempo.xyz/developers/docs/protocol/tips/tip-1009.md
- https://mpp.dev/sdk/typescript/server/Method.tempo.charge.md
- https://tempo.xyz/developers/docs/protocol/transactions/spec-tempo-transaction.md
x402 on Base
EIP-3009 rejects an authorization whose nonce is already used, and x402 relies on that for replay protection. A newly signed authorization carries a new nonce and is a separate authorization; CDP warns that creating another payment before reconciling can charge the buyer twice. An optional x402 extension defines an idempotency key that resource servers and facilitators may honour.
Sources (5), retrieved 2026-10-09: x402 on Base, Retry and idempotency
- https://eips.ethereum.org/EIPS/eip-3009
- https://raw.githubusercontent.com/x402-foundation/x402/main/specs/x402-specification-v2.md
- https://docs.cdp.coinbase.com/x402/support/troubleshooting.md
- https://docs.cdp.coinbase.com/x402/seller/settlement-pending.md
- https://raw.githubusercontent.com/x402-foundation/x402/main/specs/extensions/payment_identifier.md
x402 on Solana
The x402 SVM scheme states that Solana deduplication makes a resubmitted transaction execute once, while the facilitator could still report success to each caller, and specifies a settlement cache as a mitigation. Solana documentation states that re-signing before the original blockhash expires can lead to both transactions being accepted.
Sources (6), retrieved 2026-10-09: x402 on Solana, Retry and idempotency
- https://raw.githubusercontent.com/x402-foundation/x402/main/specs/schemes/exact/scheme_exact_svm.md
- https://solana.com/developers/cookbook/transactions/confirmation.md
- https://solana.com/developers/cookbook/transactions/retry.md
- https://raw.githubusercontent.com/x402-foundation/x402/main/specs/schemes/exact/scheme_exact.md
- https://solana.com/docs/tools/x402-facilitator.md
- https://raw.githubusercontent.com/x402-foundation/x402/main/specs/extensions/payment_identifier.md
x402 on Stellar
The authorization entry the agent signs carries a nonce unique per address until its expiration ledger, and the host verifies and consumes it, so the same entry cannot apply twice. Nothing read prevents the agent from signing another entry with a new nonce. The x402 payment-identifier extension, published in the canonical repository, offers an optional idempotency key that resource servers and facilitators may use.
Sources (6), retrieved 2026-10-09: x402 on Stellar, Retry and idempotency
- https://developers.stellar.org/docs/learn/fundamentals/contract-development/contract-interactions/stellar-transaction
- https://developers.stellar.org/docs/learn/fundamentals/contract-development/authorization
- https://developers.stellar.org/docs/build/agentic-payments/x402/built-on-stellar
- https://raw.githubusercontent.com/x402-foundation/x402/main/specs/extensions/payment_identifier.md
- https://raw.githubusercontent.com/x402-foundation/x402/main/specs/x402-specification-v2.md
- https://raw.githubusercontent.com/x402-foundation/x402/main/specs/schemes/exact/scheme_exact_stellar.md
Ambiguity bound
Whether the window in which the paying agent cannot know the outcome is bounded by the documentation, and where the bound lives.
Google Cloud with AP2
not-defined-at-this-layerThe protocol requires a signed Payment Receipt to be returned once the Merchant Payment Processor accepts or rejects the Payment Mandate, but sets no time by which it must arrive. Mandates may carry an expiry, advised by the specification for open mandates and optional on the closed Payment Mandate; that limits how long the authorization is usable, not how long the agent waits to learn the result.
Sources (13), retrieved 2026-10-09: Google Cloud with AP2, Ambiguity bound
- https://ap2-protocol.org/ap2/specification/
- https://raw.githubusercontent.com/google-agentic-commerce/AP2/main/code/sdk/schemas/ap2/payment_mandate.json
- https://ap2-protocol.org/
- https://raw.githubusercontent.com/google-agentic-commerce/AP2/main/docs/ap2/specification.md
- https://raw.githubusercontent.com/google-agentic-commerce/AP2/main/docs/ap2/payment_mandate.md
- https://raw.githubusercontent.com/google-agentic-commerce/AP2/main/docs/ap2/checkout_mandate.md
- https://raw.githubusercontent.com/google-agentic-commerce/AP2/main/docs/ap2/agent_authorization.md
- https://raw.githubusercontent.com/google-agentic-commerce/AP2/main/docs/ap2/flows.md
- https://raw.githubusercontent.com/google-agentic-commerce/AP2/main/docs/ap2/implementation_considerations.md
- https://raw.githubusercontent.com/google-agentic-commerce/AP2/main/docs/ap2/security_and_privacy_considerations.md
- https://raw.githubusercontent.com/google-agentic-commerce/AP2/main/docs/faq.md
- https://raw.githubusercontent.com/google-agentic-commerce/AP2/main/docs/glossary.md
- https://raw.githubusercontent.com/google-agentic-commerce/AP2/main/docs/overview.md
Machine Payments Protocol on Lightning
bounded-per-route- boundField
- HTLC cltv_expiry (protocol layer; not documented as exposed on the Spark path)
Protocol half (stated): BOLT 7 has the origin compute HTLC expiries backward from the destination, each hop advertises the blocks it subtracts, and the delta contributes to the time funds are unavailable if the payment fails; BOLT 2 gates failure on downstream resolution and derives an upper allowance in blocks from stated assumptions. Operator half (not stated as a bound available to the agent): on the Spark path the hosted Lightning payment provider builds the route; payLightningInvoice returns no expiry field, the Spark overview says operators lock the sender leaves until a specified time, and the wallet guide says the swap expiry is not a guaranteed refund time.
Sources (6), retrieved 2026-10-09: Machine Payments Protocol on Lightning, Ambiguity bound
- https://raw.githubusercontent.com/lightning/bolts/master/07-routing-gossip.md
- https://raw.githubusercontent.com/lightning/bolts/master/02-peer-protocol.md
- https://docs.spark.money/learn/lightning.md
- https://docs.spark.money/wallets/withdraw-to-lightning.md
- https://docs.spark.money/api-reference/wallet/pay-lightning-invoice.md
- https://docs.spark.money/api-reference/wallet/get-lightning-send-request.md
Machine Payments Protocol on Tempo
bounded-in-signed-artefact- boundField
- valid_before
The Tempo Transaction carries an optional valid_before expiration timestamp that the payer signs, and the Tempo charge method draft has the client sign with validBefore no later than the challenge expires auth-param, within which the server may submit. TIP-1009 expiring-nonce transactions require validBefore and reject transactions outside a protocol maximum window.
Sources (4), retrieved 2026-10-09: Machine Payments Protocol on Tempo, Ambiguity bound
- https://tempo.xyz/developers/docs/protocol/transactions/spec-tempo-transaction.md
- https://raw.githubusercontent.com/tempoxyz/mpp-specs/main/specs/methods/tempo/draft-tempo-charge-00.md
- https://tempo.xyz/developers/docs/protocol/tips/tip-1009.md
- https://tempo.xyz/developers/docs/protocol/upgrades/t11.md
x402 on Base
bounded-in-signed-artefact- boundField
- authorization.validBefore
The signed EIP-3009 authorization carries validBefore, and the reference contract logic refuses execution at or after it, so an authorization unconsumed at that time cannot later be consumed. x402 adds a non-terminal settlement_pending code for a broadcast whose confirmation was not observed; CDP tells the caller to reconcile on chain and treat a revert, failure or expiry as the terminal failure.
Sources (3), retrieved 2026-10-09: x402 on Base, Ambiguity bound
x402 on Solana
bounded-in-signed-artefact- boundField
- recentBlockhash (expiry height computed by the client)
The signed transaction carries a recent blockhash and expires when that blockhash is no longer recent; Solana documentation says a dropped transaction can be discarded once the blockhash is older than lastValidBlockHeight, and that an expired transaction will never be processed. The x402 scheme can pass lastValidBlockHeight as an informational hint that is not part of the transaction, so the client computes the bound.
Sources (3), retrieved 2026-10-09: x402 on Solana, Ambiguity bound
x402 on Stellar
bounded-in-signed-artefact- boundField
- signatureExpirationLedger
The agent sets the expiration ledger of the authorization entry it signs, and the facilitator must reject an entry whose expiration exceeds the bound derived from maxTimeoutSeconds. The bound is expressed in ledger sequence numbers.
Sources (4), retrieved 2026-10-09: x402 on Stellar, Ambiguity bound
- https://raw.githubusercontent.com/x402-foundation/x402/main/specs/schemes/exact/scheme_exact_stellar.md
- https://developers.stellar.org/docs/learn/fundamentals/contract-development/contract-interactions/stellar-transaction
- https://developers.stellar.org/docs/build/agentic-payments/x402
- https://raw.githubusercontent.com/x402-foundation/x402/main/specs/x402-specification-v2.md
Outcome knowledge
Whether the paying agent's knowledge of the outcome is mediated, trustless, or mediated at submission and trustless afterwards.
Google Cloud with AP2
mediatedAP2 v0.2 defines a signed Payment Receipt with a Success or Error status, returned to the Shopping Agent by the Merchant Payment Processor, a party to the payment. The protocol defines no public arbiter; a trustless read, if any, would come from the instrument, which AP2 does not fix.
Sources (4), retrieved 2026-10-09: Google Cloud with AP2, Outcome knowledge
- https://raw.githubusercontent.com/google-agentic-commerce/AP2/main/code/sdk/schemas/ap2/payment_receipt.json
- https://raw.githubusercontent.com/google-agentic-commerce/AP2/main/docs/ap2/implementation_considerations.md
- https://ap2-protocol.org/ap2/specification/
- https://raw.githubusercontent.com/google-agentic-commerce/AP2/main/docs/ap2/flows.md
Machine Payments Protocol on Lightning
mediatedOn the profiled Spark path the paying agent learns the outcome by polling the operator: the preimage is not returned by the payment call and must be fetched from getLightningSendRequest, and the incoming-transfer event does not fire for outgoing Lightning sends. The Spark overview describes a Lightning payment provider that pays the invoice and submits proof to the Spark operators. At the protocol layer the routing error channel is documented as unreliable, and no document read describes a public arbiter for a Lightning payment.
Sources (6), retrieved 2026-10-09: Machine Payments Protocol on Lightning, Outcome knowledge
- https://docs.spark.money/api-reference/wallet/pay-lightning-invoice.md
- https://docs.spark.money/wallets/withdraw-to-lightning.md
- https://docs.spark.money/learn/lightning.md
- https://raw.githubusercontent.com/lightning/bolts/master/04-onion-routing.md
- https://raw.githubusercontent.com/tempoxyz/mpp-specs/main/specs/methods/lightning/draft-lightning-charge-00.md
- https://raw.githubusercontent.com/lightning/bolts/master/02-peer-protocol.md
Machine Payments Protocol on Tempo
mediated-then-trustlessIn pull mode the server broadcasts the signed transaction and reports success through a Payment-Receipt carrying the transaction hash, so knowledge at submission passes through the payee; the Tempo chain documentation then states that finalized blocks can be queried through standard JSON-RPC and that a public explorer shows transactions and accounts, so the arbiter is readable without the payee. In push mode the client broadcasts and can read the chain itself.
Sources (5), retrieved 2026-10-09: Machine Payments Protocol on Tempo, Outcome knowledge
- https://mpp.dev/protocol/receipts.md
- https://raw.githubusercontent.com/tempoxyz/mpp-specs/main/specs/core/draft-httpauth-payment-01.md
- https://raw.githubusercontent.com/tempoxyz/mpp-specs/main/specs/methods/tempo/draft-tempo-charge-00.md
- https://tempo.xyz/developers/docs/protocol/blockspace/consensus.md
- https://tempo.xyz/developers/docs/ecosystem/block-explorers.md
x402 on Base
mediated-then-trustlessThe paying agent initially learns the outcome from the settlement response the resource server relays from the facilitator. The arbiter is public: EIP-3009 exposes authorizationState as a view function, and CDP directs callers to look the transaction up on the network. An optional x402 extension lets the resource server return a signed receipt; that receipt is signed by the payee side.
Sources (5), retrieved 2026-10-09: x402 on Base, Outcome knowledge
- https://raw.githubusercontent.com/x402-foundation/x402/main/specs/x402-specification-v2.md
- https://eips.ethereum.org/EIPS/eip-3009
- https://docs.cdp.coinbase.com/x402/seller/settlement-pending.md
- https://raw.githubusercontent.com/x402-foundation/x402/main/specs/extensions/extension-offer-and-receipt.md
- https://raw.githubusercontent.com/x402-foundation/x402/main/specs/transports-v2/http.md
x402 on Solana
mediated-then-trustlessThe settlement response travels from the fee-paying party to the resource server and then to the client. The x402 SVM scheme notes the facilitator could report success to several callers for one transfer. Solana documentation describes getSignatureStatuses for reading a signature status from a node, and warns that a network error or malformed facilitator response is not proof of payment.
Sources (4), retrieved 2026-10-09: x402 on Solana, Outcome knowledge
x402 on Stellar
mediated-then-trustlessThe agent initially learns the outcome through the facilitator and resource server (the SettlementResponse carrying a transaction hash); afterwards the outcome can be read from the public Stellar ledger by that hash. The optional offer-and-receipt extension adds a receipt signed by the resource server, which is still a party to the payment.
Sources (4), retrieved 2026-10-09: x402 on Stellar, Outcome knowledge
- https://raw.githubusercontent.com/x402-foundation/x402/main/specs/schemes/exact/scheme_exact_stellar.md
- https://developers.stellar.org/docs/build/apps/privacy.md
- https://stellar.org/blog/developers/transaction-submission-timeouts-and-dynamic-fees-faq
- https://raw.githubusercontent.com/x402-foundation/x402/main/specs/extensions/extension-offer-and-receipt.md
Restitution kinds (refund support)
Google Cloud with AP2
- conditions
- AP2 supplies evidence (Checkout and Payment Mandates and Receipts, verified per the Dispute rules); resolution, retention and retrieval are outside the specification
- feeBorneBy
- not stated
- initiatedBy
- not stated at this layer (the FAQ gives a network adjudicator, for example a card network, as the party that uses the evidence)
- kind
- dispute
The evidence half of a dispute path is specified: mandates and receipts can be brought together and verified as dispute evidence. The resolution half (who initiates, how value returns, who bears any fee) is declared outside the specification. No refund, reversal or cancellation path is defined.
Sources (7), retrieved 2026-10-09: Google Cloud with AP2, Restitution kinds (refund support)
- https://ap2-protocol.org/ap2/specification/
- https://raw.githubusercontent.com/google-agentic-commerce/AP2/main/docs/faq.md
- https://raw.githubusercontent.com/google-agentic-commerce/AP2/main/docs/ap2/payment_mandate.md
- https://raw.githubusercontent.com/google-agentic-commerce/AP2/main/docs/ap2/checkout_mandate.md
- https://raw.githubusercontent.com/google-agentic-commerce/AP2/main/docs/ap2/agent_authorization.md
- https://raw.githubusercontent.com/google-agentic-commerce/AP2/main/docs/ap2/implementation_considerations.md
- https://raw.githubusercontent.com/google-agentic-commerce/AP2/main/docs/glossary.md
Machine Payments Protocol on Lightning
- conditions
- Protocol layer: the HTLC was not fulfilled with the preimage; the payer can cancel after a given time, and nodes must fail the incoming HTLC once its cltv_expiry is reached.
- feeBorneBy
- not stated
- initiatedBy
- payer node (spends the HTLC after its timeout) or a downstream node (fails the HTLC back)
- kind
- cancellation of an unsettled authorization
- conditions
- Operator layer (Spark): if the specified lock time expires without proof of payment, the operators unlock the sender leaves; the wallet guide states the swap expiry is not a guaranteed refund time and that the SDK has no public client cancellation method for an in-flight send.
- feeBorneBy
- not stated
- initiatedBy
- Spark operators (lapse of the lock)
- kind
- cancellation of an unsettled authorization
- conditions
- Out-of-protocol only: the Lightning method draft states settled payments cannot be refunded through the payment channel; mpp.dev states refunds in the charge flow are out-of-protocol. The Lightning draft makes the credential source field optional and forbids servers from requiring it, so the protocol does not supply a refund destination.
- feeBorneBy
- not stated
- initiatedBy
- resource server (payee), at its discretion
- kind
- refund
After settlement (preimage revealed) no in-protocol return path exists in the documents read; the method draft says so explicitly. Before settlement, the HTLC can be cancelled or failed back at the protocol layer, and on the Spark path the operator lock lapses at a specified time. Any refund of a settled charge is out-of-protocol and at the payee discretion.
Sources (7), retrieved 2026-10-09: Machine Payments Protocol on Lightning, Restitution kinds (refund support)
- https://raw.githubusercontent.com/lightning/bolts/master/00-introduction.md
- https://raw.githubusercontent.com/lightning/bolts/master/02-peer-protocol.md
- https://docs.spark.money/learn/lightning.md
- https://docs.spark.money/wallets/withdraw-to-lightning.md
- https://raw.githubusercontent.com/tempoxyz/mpp-specs/main/specs/methods/lightning/draft-lightning-charge-00.md
- https://mpp.dev/advanced/refunds.md
- https://raw.githubusercontent.com/lightning/bolts/master/11-payment-encoding.md
Machine Payments Protocol on Tempo
- conditions
- Out-of-protocol: the Machine Payments Protocol defines no refund protocol; for the charge flow the server may send funds back to the address in the credential source field by an ordinary on-chain transfer.
- feeBorneBy
- not stated
- initiatedBy
- resource server (payee), at its discretion
- kind
- refund
- conditions
- Pull mode only: a client-signed transaction that the server does not broadcast before its valid_before passes is rejected by the chain, so no value moves; this is a lapse, not a return of settled value.
- feeBorneBy
- not stated
- initiatedBy
- none (lapse)
- kind
- cancellation of an unsettled authorization
At the protocol layer the charge intent draft states reversibility is method-dependent and neither the core nor the Tempo method draft defines a refund. The mpp.dev refunds page (operator layer) states that refunds in the charge flow are out-of-protocol transfers back to the client. The chain documentation states that finalized blocks cannot be reverted, so no reversal or chargeback path exists at the settlement layer in the documents read.
Sources (6), retrieved 2026-10-09: Machine Payments Protocol on Tempo, Restitution kinds (refund support)
- https://raw.githubusercontent.com/tempoxyz/mpp-specs/main/specs/intents/draft-payment-intent-charge-00.md
- https://mpp.dev/advanced/refunds.md
- https://tempo.xyz/developers/docs/protocol/blockspace/consensus.md
- https://tempo.xyz/developers/docs/protocol/tips/tip-1009.md
- https://raw.githubusercontent.com/tempoxyz/mpp-specs/main/specs/core/draft-httpauth-payment-01.md
- https://raw.githubusercontent.com/tempoxyz/mpp-specs/main/specs/methods/tempo/draft-tempo-charge-00.md
x402 on Base
- conditions
- EIP-3009 lists cancelAuthorization under Optional, so it exists where the token contract implements it; applies to an authorization not yet used
- feeBorneBy
- not stated
- initiatedBy
- payer (the authorizer signs a CancelAuthorization message); the submitting party is not stated
- kind
- cancellation of an unsettled authorization
- conditions
- operator documentation (CDP); settled exact and upto payments are described as irreversible, with no chargebacks
- feeBorneBy
- not stated
- initiatedBy
- seller (payee), by sending a new transfer to the payer address
- kind
- refund
The x402 exact scheme defines no refund and leaves any remedy to the resource server. EIP-3009 defines an optional cancellation of an unused authorization. CDP describes settled payments as irreversible and a refund as a new transfer back to the payer.
Sources (5), retrieved 2026-10-09: x402 on Base, Restitution kinds (refund support)
- https://raw.githubusercontent.com/x402-foundation/x402/main/specs/schemes/exact/scheme_exact.md
- https://eips.ethereum.org/EIPS/eip-3009
- https://docs.cdp.coinbase.com/x402/support/faq.md
- https://raw.githubusercontent.com/x402-foundation/x402/main/specs/x402-specification-v2.md
- https://raw.githubusercontent.com/x402-foundation/x402/main/specs/schemes/exact/scheme_exact_evm.md
x402 on Solana
The x402 exact scheme states that it defines no refund and leaves any remedy to the resource server. The SVM scheme, the core specification and the Solana x402 and facilitator pages define no refund, reversal, chargeback, dispute or cancellation path for an exact payment.
Sources (6), retrieved 2026-10-09: x402 on Solana, Restitution kinds (refund support)
- https://raw.githubusercontent.com/x402-foundation/x402/main/specs/schemes/exact/scheme_exact.md
- https://raw.githubusercontent.com/x402-foundation/x402/main/specs/schemes/exact/scheme_exact_svm.md
- https://raw.githubusercontent.com/x402-foundation/x402/main/specs/x402-specification-v2.md
- https://solana.com/docs/payments/agentic-payments/x402.md
- https://solana.com/docs/tools/x402-facilitator.md
- https://solana.com/llms-full.txt
x402 on Stellar
No refund, reversal, chargeback, dispute or cancellation path is defined in the x402 v2 specification, the Stellar exact scheme, the Stellar x402 pages or the OpenZeppelin facilitator documentation read. An unsettled authorization entry lapses at its expiration ledger, which is expiry rather than a restitution path.
Sources (7), retrieved 2026-10-09: x402 on Stellar, Restitution kinds (refund support)
- https://raw.githubusercontent.com/x402-foundation/x402/main/specs/x402-specification-v2.md
- https://raw.githubusercontent.com/x402-foundation/x402/main/specs/schemes/exact/scheme_exact_stellar.md
- https://developers.stellar.org/docs/build/agentic-payments/x402
- https://developers.stellar.org/docs/build/agentic-payments/x402/built-on-stellar
- https://docs.openzeppelin.com/relayer/1.4.x/guides/stellar-x402-facilitator-guide
- https://raw.githubusercontent.com/OpenZeppelin/relayer-plugin-x402-facilitator/main/README.md
- https://docs.openzeppelin.com/relayer/1.5.x/guides/stellar-channels-guide
Observer privacy exposure
What a payment exposes, per the documentation, to a party not in the payment.
Google Cloud with AP2
AP2 shares mandates with named roles and requires selective disclosure and data minimisation; it publishes nothing to a public ledger. What a party outside the payment can see is determined by the instrument beneath, which the documents do not address beyond noting that sharing with other parties is outside the scope of AP2.
Sources (5), retrieved 2026-10-09: Google Cloud with AP2, Observer privacy exposure
- https://ap2-protocol.org/
- https://raw.githubusercontent.com/google-agentic-commerce/AP2/main/docs/ap2/security_and_privacy_considerations.md
- https://raw.githubusercontent.com/google-agentic-commerce/AP2/main/code/sdk/schemas/ap2/payment_mandate.json
- https://ap2-protocol.org/ap2/specification/
- https://raw.githubusercontent.com/google-agentic-commerce/AP2/main/docs/ap2/flows.md
Machine Payments Protocol on Lightning
BOLT 4 states intermediate nodes cannot learn route members beyond their predecessor and successor, and that hops see an ephemeral key for the origin in place of its identity; each hop payload carries the amount to forward. BOLT 11 invoices carry the payee node public key and a payment description. The Lightning method draft calls the payment hash a publicly shareable receipt identifier. Spark states new wallets start with privacy off and public clients can query their Bitcoin balances and transfer history.
Sources (4), retrieved 2026-10-09: Machine Payments Protocol on Lightning, Observer privacy exposure
- https://raw.githubusercontent.com/lightning/bolts/master/04-onion-routing.md
- https://raw.githubusercontent.com/lightning/bolts/master/11-payment-encoding.md
- https://raw.githubusercontent.com/tempoxyz/mpp-specs/main/specs/methods/lightning/draft-lightning-charge-00.md
- https://docs.spark.money/wallets/privacy.md
Machine Payments Protocol on Tempo
The Tempo documentation states that on Tempo Mainnet anyone can read any account balance and that the public explorer shows transactions, accounts and token activity. The method draft settles by TIP-20 transfer or transferWithMemo calls and defines an optional bytes32 memo; the mpp.dev Tempo charge page states the mppx client adds a challenge-bound attribution memo to the primary transfer. The core draft asks payment methods to support pseudonymous options where possible.
Sources (5), retrieved 2026-10-09: Machine Payments Protocol on Tempo, Observer privacy exposure
- https://tempo.xyz/developers/docs/protocol/zones/accounts.md
- https://tempo.xyz/developers/docs/ecosystem/block-explorers.md
- https://raw.githubusercontent.com/tempoxyz/mpp-specs/main/specs/methods/tempo/draft-tempo-charge-00.md
- https://mpp.dev/payment-methods/tempo/charge.md
- https://raw.githubusercontent.com/tempoxyz/mpp-specs/main/specs/core/draft-httpauth-payment-01.md
x402 on Base
Base documentation states that a transfer on the public chain exposes sender, recipient and amount. EIP-3009 emits an event indexed by authorizer and nonce. The x402 facilitator interface publishes signer addresses, and CDP appends attribution codes to settlement calldata when the builder-code extension is used.
Sources (6), retrieved 2026-10-09: x402 on Base, Observer privacy exposure
- https://docs.base.org/get-started/private-transactions.md
- https://eips.ethereum.org/EIPS/eip-3009
- https://raw.githubusercontent.com/x402-foundation/x402/main/specs/x402-specification-v2.md
- https://docs.cdp.coinbase.com/x402/seller/facilitator.md
- https://raw.githubusercontent.com/x402-foundation/x402/main/specs/extensions/extension-offer-and-receipt.md
- https://raw.githubusercontent.com/x402-foundation/x402/main/specs/schemes/exact/scheme_exact_evm.md
x402 on Solana
Solana documentation states that its public ledger makes every transaction, token account and mint auditable, that memos are recorded on chain and visible in logs, and that privacy is provided by application-level tools. The x402 exact scheme requires a TransferChecked transfer and a Memo instruction, and reports the payer as a public address.
Sources (4), retrieved 2026-10-09: x402 on Solana, Observer privacy exposure
x402 on Stellar
Stellar documents itself as a public blockchain on which every transaction is visible. The x402 exact scheme moves value with a token transfer(from, to, amount) call, so payer address, payee address and amount are transfer arguments in a public transaction; the facilitator appears as the transaction source account.
Sources (2), retrieved 2026-10-09: x402 on Stellar, Observer privacy exposure
Specification pin
The specification documents that define the payment flow, their stated version, and their date of last change.
Google Cloud with AP2
- document
- AP2 specification
- lastChanged
- 2026-04-28
- version
- v0.2 (release tag v0.2.0)
The site and the repository both carry the v0.2 specification; the repository release v0.2.0 and the last commit touching the specification file are dated 2026-04-28. The AP2 site and FAQ say the specification work continues in the FIDO Alliance, while the site also says the GitHub repository hosts the latest specification.
Sources (7), retrieved 2026-10-09: Google Cloud with AP2, Specification pin
- https://ap2-protocol.org/ap2/specification/
- https://api.github.com/repos/google-agentic-commerce/AP2/releases?per_page=5
- https://api.github.com/repos/google-agentic-commerce/AP2/commits?path=docs/ap2/specification.md&per_page=1
- https://raw.githubusercontent.com/google-agentic-commerce/AP2/main/docs/ap2/payment_mandate.md
- https://ap2-protocol.org/
- https://raw.githubusercontent.com/google-agentic-commerce/AP2/main/docs/faq.md
- https://blog.google/products-and-platforms/platforms/google-pay/agent-payments-protocol-fido-alliance/
Machine Payments Protocol on Lightning
- document
- Lightning charge method
- lastChanged
- 2026-04-16
- url
- https://github.com/tempoxyz/mpp-specs/blob/main/specs/methods/lightning/draft-lightning-charge-00.md
- version
- draft 00
- document
- Payment HTTP Authentication Scheme
- lastChanged
- 2026-09-21
- version
- draft 01
- document
- Charge intent
- lastChanged
- 2026-08-18
- version
- draft 00
- document
- BOLT 2
- lastChanged
- 2026-08-26
- version
- not stated
- document
- BOLT 4
- lastChanged
- 2026-08-27
- version
- not stated
- document
- BOLT 7
- lastChanged
- 2026-05-12
- version
- not stated
- document
- BOLT 11
- lastChanged
- 2026-03-09
- version
- not stated
The Machine Payments Protocol layer is defined by the Lightning charge method draft (Lightspark authors), the core scheme draft and the charge intent draft in tempoxyz/mpp-specs; the Lightning layer by BOLT 2, 4, 7 and 11 in lightning/bolts. Dates are the last commits touching each file per the GitHub commits API.
Sources (12), retrieved 2026-10-09: Machine Payments Protocol on Lightning, Specification pin
- https://raw.githubusercontent.com/tempoxyz/mpp-specs/main/specs/methods/lightning/draft-lightning-charge-00.md
- https://raw.githubusercontent.com/tempoxyz/mpp-specs/main/specs/core/draft-httpauth-payment-01.md
- https://raw.githubusercontent.com/tempoxyz/mpp-specs/main/specs/intents/draft-payment-intent-charge-00.md
- https://api.github.com/repos/tempoxyz/mpp-specs/commits?path=specs/methods/lightning/draft-lightning-charge-00.md&per_page=1
- https://api.github.com/repos/tempoxyz/mpp-specs/commits?path=specs/core/draft-httpauth-payment-01.md&per_page=1
- https://api.github.com/repos/tempoxyz/mpp-specs/commits?path=specs/intents/draft-payment-intent-charge-00.md&per_page=1
- https://api.github.com/repos/lightning/bolts/commits?path=02-peer-protocol.md&per_page=1
- https://api.github.com/repos/lightning/bolts/commits?path=04-onion-routing.md&per_page=1
- https://api.github.com/repos/lightning/bolts/commits?path=07-routing-gossip.md&per_page=1
- https://api.github.com/repos/lightning/bolts/commits?path=11-payment-encoding.md&per_page=1
- https://raw.githubusercontent.com/lightning/bolts/master/04-onion-routing.md
- https://docs.spark.money/api-reference/wallet/pay-lightning-invoice.md
Machine Payments Protocol on Tempo
- document
- Payment HTTP Authentication Scheme
- lastChanged
- 2026-09-21
- version
- draft 01
- document
- Charge intent
- lastChanged
- 2026-08-18
- version
- draft 00
- document
- Tempo charge method
- lastChanged
- 2026-10-05
- version
- draft 00
- document
- Tempo Transactions Specification
- lastChanged
- not stated
- version
- not stated
The payment flow is defined by the core Payment HTTP Authentication Scheme draft, the charge intent draft and the Tempo charge method draft in tempoxyz/mpp-specs, with the Tempo transaction format defined on the Tempo documentation site. Last-change dates are the last commits touching each file per the GitHub commits API.
Sources (8), retrieved 2026-10-09: Machine Payments Protocol on Tempo, Specification pin
- https://raw.githubusercontent.com/tempoxyz/mpp-specs/main/specs/core/draft-httpauth-payment-01.md
- https://raw.githubusercontent.com/tempoxyz/mpp-specs/main/specs/intents/draft-payment-intent-charge-00.md
- https://raw.githubusercontent.com/tempoxyz/mpp-specs/main/specs/methods/tempo/draft-tempo-charge-00.md
- https://api.github.com/repos/tempoxyz/mpp-specs/commits?path=specs/core/draft-httpauth-payment-01.md&per_page=1
- https://api.github.com/repos/tempoxyz/mpp-specs/commits?path=specs/intents/draft-payment-intent-charge-00.md&per_page=1
- https://api.github.com/repos/tempoxyz/mpp-specs/commits?path=specs/methods/tempo/draft-tempo-charge-00.md&per_page=1
- https://api.github.com/repos/tempoxyz/mpp-specs/commits?path=specs/core/draft-httpauth-payment-00.md&per_page=1
- https://tempo.xyz/developers/docs/protocol/transactions/spec-tempo-transaction.md
x402 on Base
- document
- x402 core specification
- lastChanged
- 2026-08-31
- version
- Protocol Version 2
- document
- x402 exact scheme
- lastChanged
- 2026-09-24
- version
- not stated
- document
- x402 exact scheme on EVM
- lastChanged
- 2026-08-17
- version
- not stated
- document
- x402 HTTP transport
- lastChanged
- 2026-05-26
- version
- v2 (directory)
- document
- EIP-3009
- lastChanged
- 2025-10-09
- version
- status Draft
The payment flow is defined by the x402 v2 core specification, the exact scheme documents and EIP-3009. Dates are the last commits touching each file, read from the GitHub commits API.
Sources (7), retrieved 2026-10-09: x402 on Base, Specification pin
- https://raw.githubusercontent.com/x402-foundation/x402/main/specs/x402-specification-v2.md
- https://api.github.com/repos/x402-foundation/x402/commits?path=specs/x402-specification-v2.md&per_page=1
- https://api.github.com/repos/x402-foundation/x402/commits?path=specs/schemes/exact/scheme_exact.md&per_page=1
- https://api.github.com/repos/x402-foundation/x402/commits?path=specs/schemes/exact/scheme_exact_evm.md&per_page=1
- https://api.github.com/repos/x402-foundation/x402/commits?path=specs/transports-v2/http.md&per_page=1
- https://eips.ethereum.org/EIPS/eip-3009
- https://api.github.com/repos/ethereum/ERCs/commits?path=ERCS/erc-3009.md&per_page=1
x402 on Solana
- document
- x402 core specification
- lastChanged
- 2026-08-31
- version
- Protocol Version 2
- document
- x402 exact scheme
- lastChanged
- 2026-09-24
- version
- not stated
- document
- x402 exact scheme on SVM
- lastChanged
- 2026-08-25
- version
- not stated
- document
- x402 HTTP transport
- lastChanged
- 2026-05-26
- version
- v2 (directory)
The payment flow is defined by the x402 v2 core specification and the exact scheme documents for Solana. Dates are the last commits touching each file, read from the GitHub commits API.
Sources (5), retrieved 2026-10-09: x402 on Solana, Specification pin
- https://raw.githubusercontent.com/x402-foundation/x402/main/specs/x402-specification-v2.md
- https://api.github.com/repos/x402-foundation/x402/commits?path=specs/x402-specification-v2.md&per_page=1
- https://api.github.com/repos/x402-foundation/x402/commits?path=specs/schemes/exact/scheme_exact.md&per_page=1
- https://api.github.com/repos/x402-foundation/x402/commits?path=specs/schemes/exact/scheme_exact_svm.md&per_page=1
- https://api.github.com/repos/x402-foundation/x402/commits?path=specs/transports-v2/http.md&per_page=1
x402 on Stellar
- document
- x402 core specification
- lastChanged
- 2026-08-31
- version
- Protocol Version 2
- document
- x402 exact scheme on Stellar
- lastChanged
- 2026-09-02
- version
- x402 v2
- document
- Stellar x402 developer page
- lastChanged
- 2026-09-28
- version
- not stated
The payment flow is defined by the x402 v2 core specification and the Stellar binding of the exact scheme in the canonical x402-foundation repository; the Stellar developer page describes the operator path.
Sources (6), retrieved 2026-10-09: x402 on Stellar, Specification pin
- https://raw.githubusercontent.com/x402-foundation/x402/main/specs/x402-specification-v2.md
- https://raw.githubusercontent.com/x402-foundation/x402/main/specs/schemes/exact/scheme_exact_stellar.md
- https://api.github.com/repos/x402-foundation/x402/commits?path=specs/x402-specification-v2.md&per_page=1
- https://api.github.com/repos/x402-foundation/x402/commits?path=specs/schemes/exact/scheme_exact_stellar.md&per_page=1
- https://developers.stellar.org/docs/build/agentic-payments/x402
- https://api.github.com/repos/stellar/stellar-docs/commits?path=docs/build/agentic-payments/x402/README.mdx&per_page=1
Declared rate limits
Whether the operator's documentation declares rate or throughput limits on the profiled path.
Google Cloud with AP2
- scope
- no hosted service documented
AP2 is a protocol with an SDK and samples, not a hosted API; no document read declares a rate or throughput limit.
Sources (15), retrieved 2026-10-09: Google Cloud with AP2, Declared rate limits
- https://ap2-protocol.org/ap2/specification/
- https://ap2-protocol.org/
- https://raw.githubusercontent.com/google-agentic-commerce/AP2/main/docs/ap2/specification.md
- https://raw.githubusercontent.com/google-agentic-commerce/AP2/main/docs/ap2/payment_mandate.md
- https://raw.githubusercontent.com/google-agentic-commerce/AP2/main/docs/ap2/checkout_mandate.md
- https://raw.githubusercontent.com/google-agentic-commerce/AP2/main/docs/ap2/agent_authorization.md
- https://raw.githubusercontent.com/google-agentic-commerce/AP2/main/docs/ap2/flows.md
- https://raw.githubusercontent.com/google-agentic-commerce/AP2/main/docs/ap2/implementation_considerations.md
- https://raw.githubusercontent.com/google-agentic-commerce/AP2/main/docs/ap2/security_and_privacy_considerations.md
- https://raw.githubusercontent.com/google-agentic-commerce/AP2/main/docs/faq.md
- https://raw.githubusercontent.com/google-agentic-commerce/AP2/main/docs/glossary.md
- https://raw.githubusercontent.com/google-agentic-commerce/AP2/main/docs/overview.md
- https://raw.githubusercontent.com/google-agentic-commerce/AP2/main/README.md
- https://raw.githubusercontent.com/google-agentic-commerce/AP2/main/code/README.md
- https://raw.githubusercontent.com/google-agentic-commerce/AP2/main/code/sdk/python/ap2/sdk/README.md
Machine Payments Protocol on Lightning
- scope
- Spark Lightning send path
None of the Spark wallet SDK or API reference pages read, the Spark limitations page, or the mpp.dev Lightning pages declares a rate or throughput limit for the Spark Lightning send path or the Lightning payment provider. The core draft advises servers to rate-limit challenges but declares no figure.
Sources (13), retrieved 2026-10-09: Machine Payments Protocol on Lightning, Declared rate limits
- https://raw.githubusercontent.com/tempoxyz/mpp-specs/main/specs/core/draft-httpauth-payment-01.md
- https://docs.spark.money/api-reference/wallet/pay-lightning-invoice.md
- https://docs.spark.money/api-reference/wallet/get-lightning-send-request.md
- https://docs.spark.money/wallets/withdraw-to-lightning.md
- https://docs.spark.money/wallets/estimate-fees.md
- https://docs.spark.money/learn/lightning.md
- https://docs.spark.money/learn/limitations.md
- https://docs.spark.money/learn/trust-model.md
- https://docs.spark.money/api-reference/wallet-overview.md
- https://docs.spark.money/wallets/typescript.md
- https://docs.spark.money/llms.txt
- https://mpp.dev/payment-methods/lightning.md
- https://mpp.dev/payment-methods/lightning/charge.md
Machine Payments Protocol on Tempo
declared- scope
- hosted Tempo API, per API key and per client IP; not stated for the public JSON-RPC endpoint
Tempo Labs declares default rate limits for the hosted Tempo API in fixed one-minute windows, with separate defaults for API-key and anonymous callers, and states the authoritative limit is the RateLimit-Limit response header. The API reference describes direct JSON-RPC access as outside the stable API contract with no availability guarantees. The core draft advises servers to rate-limit challenges and verification attempts but declares no figure.
Sources (5), retrieved 2026-10-09: Machine Payments Protocol on Tempo, Declared rate limits
- https://tempo.xyz/developers/docs/api/rate-limits.md
- https://tempo.xyz/developers/docs/api/rpc.md
- https://raw.githubusercontent.com/tempoxyz/mpp-specs/main/specs/core/draft-httpauth-payment-01.md
- https://tempo.xyz/developers/docs/quickstart/connection-details.md
- https://raw.githubusercontent.com/tempoxyz/mpp-specs/main/specs/methods/tempo/draft-tempo-charge-00.md
x402 on Base
- scope
- Coinbase Developer Platform API, write and read operations
CDP publishes rate limits for the CDP API with figures for write and read operations and a 429 response. No page read states a limit for the x402 facilitator endpoints; the settle endpoint reference lists rate_limit_exceeded among its error types.
Sources (5), retrieved 2026-10-09: x402 on Base, Declared rate limits
- https://docs.cdp.coinbase.com/api-reference/v2/rate-limits.md
- https://docs.cdp.coinbase.com/api-reference/v2/rest-api/x402-facilitator/settle-payment.md
- https://docs.cdp.coinbase.com/x402/seller/production-configuration.md
- https://docs.cdp.coinbase.com/x402/seller/facilitator.md
- https://raw.githubusercontent.com/x402-foundation/x402/main/specs/x402-specification-v2.md
x402 on Solana
- scope
- Solana public RPC endpoints
Solana documentation declares rate limits for its public RPC endpoints, which a client may use to fetch a blockhash or read a signature status. No facilitator operator is named in the R9 corpus, and no facilitator rate limit is declared.
Sources (5), retrieved 2026-10-09: x402 on Solana, Declared rate limits
- https://solana.com/docs/references/clusters.md
- https://raw.githubusercontent.com/x402-foundation/x402/main/specs/x402-specification-v2.md
- https://raw.githubusercontent.com/x402-foundation/x402/main/specs/schemes/exact/scheme_exact_svm.md
- https://solana.com/docs/tools/x402-facilitator.md
- https://solana.com/docs/tools/kora/guides/x402.md
x402 on Stellar
- scope
- OpenZeppelin Channels service used by the hosted facilitator
The Channels guide declares a fair-use policy in which each API key has a fee consumption limit, and requests return FEE_LIMIT_EXCEEDED once it is reached. The Stellar x402 page says the hosted facilitator leverages Channels, and its API keys are generated at the Channels address; no document read states a request-per-second limit for /verify or /settle.
Sources (6), retrieved 2026-10-09: x402 on Stellar, Declared rate limits
- https://docs.openzeppelin.com/relayer/1.5.x/guides/stellar-channels-guide
- https://developers.stellar.org/docs/build/agentic-payments/x402
- https://developers.stellar.org/docs/build/agentic-payments/x402/built-on-stellar
- https://docs.openzeppelin.com/relayer/1.4.x/guides/stellar-x402-facilitator-guide
- https://raw.githubusercontent.com/OpenZeppelin/relayer-plugin-x402-facilitator/main/README.md
- https://docs.openzeppelin.com/relayer/1.4.x
Status page
Whether the operator publishes a service status page, and its address.
Google Cloud with AP2
none-found-in-documents-readNo status page is linked from ap2-protocol.org, the repository README or the documentation; AP2 documents no hosted service whose status could be published.
Sources (5), retrieved 2026-10-09: Google Cloud with AP2, Status page
- https://ap2-protocol.org/
- https://ap2-protocol.org/ap2/specification/
- https://raw.githubusercontent.com/google-agentic-commerce/AP2/main/README.md
- https://raw.githubusercontent.com/google-agentic-commerce/AP2/main/code/README.md
- https://raw.githubusercontent.com/google-agentic-commerce/AP2/main/docs/faq.md
Machine Payments Protocol on Lightning
published- addresses
The Spark documentation index (llms.txt) lists a status page address. mpp.dev links no status page.
Sources (3), retrieved 2026-10-09: Machine Payments Protocol on Lightning, Status page
Machine Payments Protocol on Tempo
published- addresses
The Tempo homepage links a Status page at status.tempo.xyz. No status page link was found on mpp.dev or in the Tempo developer documentation index.
Sources (6), retrieved 2026-10-09: Machine Payments Protocol on Tempo, Status page
x402 on Base
publishedBoth operators on the profiled path publish a status page reachable from their own documentation. Existence and address are recorded; no uptime or incident content is recorded.
Sources (4), retrieved 2026-10-09: x402 on Base, Status page
x402 on Solana
none-found-in-documents-readNo link to a service status page was found in the Solana documentation corpus or in the x402 documents read.
Sources (7), retrieved 2026-10-09: x402 on Solana, Status page
- https://solana.com/llms-full.txt
- https://solana.com/llms.txt
- https://solana.com/docs/rpc.md
- https://solana.com/docs/references/clusters.md
- https://solana.com/docs/tools/production-readiness.md
- https://solana.com/docs/tools/x402-facilitator.md
- https://raw.githubusercontent.com/x402-foundation/x402/main/README.md
x402 on Stellar
published- addresses
The Stellar developer documentation links a status page for Stellar.org services. No status page is linked from the OpenZeppelin facilitator, Relayer or Channels documentation read.
Sources (7), retrieved 2026-10-09: x402 on Stellar, Status page
- https://developers.stellar.org/docs/build/agentic-payments/x402
- https://status.stellar.org/
- https://developers.stellar.org/docs/build/agentic-payments/x402/built-on-stellar
- https://docs.openzeppelin.com/relayer/1.4.x/guides/stellar-x402-facilitator-guide
- https://docs.openzeppelin.com/relayer/1.5.x/guides/stellar-channels-guide
- https://raw.githubusercontent.com/OpenZeppelin/relayer-plugin-x402-facilitator/main/README.md
- https://docs.openzeppelin.com/relayer/1.4.x
SDK languages
Google Cloud with AP2
- language
- Python
- package
- ap2 (code/sdk/python/ap2 in google-agentic-commerce/AP2; installed from the repository, PyPI release not yet published)
- language
- Python
- package
- reference samples (code/samples/python)
- language
- Go
- package
- reference servers and scenarios (code/samples/go)
- language
- Kotlin (Android)
- package
- Android shopping assistant sample (code/samples/android)
The repository names a Python SDK as its primary artifact and says future language SDKs would sit beside it. Reference implementations are published as Python, Go and Android samples.
Sources (2), retrieved 2026-10-09: Google Cloud with AP2, SDK languages
Machine Payments Protocol on Lightning
- language
- TypeScript
- package
- @buildonspark/lightning-mpp-sdk (github.com/buildonspark/lightning-mpp-sdk), the Lightning method implementation extending mppx
- language
- TypeScript
- package
- @buildonspark/spark-sdk (Spark wallet SDK, payLightningInvoice)
mpp.dev names @buildonspark/lightning-mpp-sdk as the implementation of the Lightning payment method, extending the mppx TypeScript SDK, with Spark as the reference wallet. The Spark documentation documents the TypeScript wallet SDK. The mpp.dev SDK feature matrix lists the Tempo and Stripe methods for its five core SDKs and says additional methods implement their own SDKs; Lightning is not marked in any core SDK.
Sources (4), retrieved 2026-10-09: Machine Payments Protocol on Lightning, SDK languages
Machine Payments Protocol on Tempo
- language
- TypeScript
- package
- mppx (github.com/wevm/mppx), Machine Payments Protocol reference implementation, Tempo charge supported
- source
- https://mpp.dev/sdk.md
- language
- Python
- package
- pympp (github.com/tempoxyz/pympp), Tempo charge supported
- language
- Rust
- package
- mpp crate (github.com/tempoxyz/mpp-rs), Tempo charge supported
- language
- Go
- package
- github.com/tempoxyz/mpp-go, Tempo charge supported
- language
- Ruby
- package
- mpp-rb (github.com/stripe/mpp-rb), Tempo charge supported
- language
- TypeScript (chain)
- package
- Tempo extensions for Viem and Wagmi
- language
- Go (chain)
- package
- github.com/tempoxyz/tempo-go
- language
- Rust (chain)
- package
- tempo-alloy (github.com/tempoxyz/tempo)
- language
- Python (chain)
- package
- pytempo
mpp.dev lists five official Machine Payments Protocol SDKs (TypeScript, Python, Rust, Go, Ruby), and its feature matrix marks the Tempo method and charge intent as supported in all five. The Tempo documentation separately lists chain SDKs; Foundry is listed as tooling and is not counted as a language SDK.
Sources (10), retrieved 2026-10-09: Machine Payments Protocol on Tempo, SDK languages
- https://mpp.dev/sdk.md
- https://mpp.dev/sdk/features.md
- https://mpp.dev/sdk/typescript.md
- https://mpp.dev/sdk/python.md
- https://mpp.dev/sdk/rust.md
- https://mpp.dev/sdk/go.md
- https://mpp.dev/sdk/ruby.md
- https://tempo.xyz/developers/docs/sdk/go.md
- https://tempo.xyz/developers/docs/sdk/rust.md
- https://tempo.xyz/developers/docs/sdk/python.md
x402 on Base
- language
- TypeScript
- package
- @x402/core, @x402/evm, @x402/fetch, @x402/express and further @x402 packages (x402 Foundation reference SDK)
- language
- Python
- package
- x402 (pip), x402 Foundation
- language
- Go
- package
- github.com/x402-foundation/x402/go/v2
- language
- TypeScript
- package
- CDP SDK x402 helpers (createX402Server, CdpX402Client, CDP Facilitator client)
- language
- Python
- package
- CDP SDK cdp.x402 module (coinbase/cdp-sdk python/cdp/x402), facilitator configuration
The x402 Foundation README documents reference SDKs in TypeScript, Python and Go. CDP documents its own x402 helpers in TypeScript and a facilitator configuration module in Python, and states that its SDK has no Go x402 helpers.
Sources (3), retrieved 2026-10-09: x402 on Base, SDK languages
x402 on Solana
- language
- TypeScript
- package
- @x402/svm with @x402/core, @x402/fetch, @x402/express (x402 Foundation reference SDK)
- language
- Python
- package
- x402 (pip), x402 Foundation
- language
- Go
- package
- github.com/x402-foundation/x402/go/v2
- language
- TypeScript
- package
- @x402/svm, @x402/express, @x402/fetch as documented in the Solana x402 guide
The x402 Foundation README documents reference SDKs in TypeScript, Python and Go. The Solana x402 guide builds its client and server with the TypeScript @x402 packages including @x402/svm.
Sources (3), retrieved 2026-10-09: x402 on Solana, SDK languages
x402 on Stellar
- language
- TypeScript
- package
- @x402/stellar (x402-foundation/x402, typescript/packages/mechanisms/stellar)
- language
- TypeScript
- package
- stellar/x402-stellar (examples and a reference facilitator service, published by the Stellar organisation)
- language
- TypeScript
- package
- @openzeppelin/relayer-plugin-x402-facilitator (facilitator side, operator)
The x402 Foundation publishes a Stellar mechanism package for TypeScript covering client, server and facilitator roles. The canonical repository tree contains no Stellar mechanism for Python, Go or Java. The Stellar organisation publishes a TypeScript examples repository, and OpenZeppelin publishes the facilitator plugin in TypeScript.
Sources (5), retrieved 2026-10-09: x402 on Stellar, SDK languages
- https://raw.githubusercontent.com/x402-foundation/x402/main/typescript/packages/mechanisms/stellar/README.md
- https://registry.npmjs.org/@x402/stellar/latest
- https://developers.stellar.org/docs/build/agentic-payments/x402
- https://docs.openzeppelin.com/relayer/1.4.x/guides/stellar-x402-facilitator-guide
- https://api.github.com/repos/x402-foundation/x402/git/trees/main?recursive=1
Error catalogue
Whether the specification or the operator publishes a catalogue of error codes or reasons a paying client can receive, and its address.
Google Cloud with AP2
published- enumeration
- Agent Authorization Framework error codes; receipt error field
The Agent Authorization Framework document defines four error codes for all action authorizations and marks two as terminal; receipts carry an error code when the status is Error.
Sources (3), retrieved 2026-10-09: Google Cloud with AP2, Error catalogue
Machine Payments Protocol on Lightning
published- address
- https://github.com/tempoxyz/mpp-specs/blob/main/specs/methods/lightning/draft-lightning-charge-00.md
- enumeration
- Lightning problem types in the method draft (absent from the paymentauth.org index); BOLT 4 failure_code
The Lightning method draft defines four RFC 9457 problem types on top of the core codes. BOLT 4 lists the supported failure_code values returned to the origin node. The Spark pages read publish no error catalogue for payLightningInvoice or getLightningSendRequest; the guide shows one send status value. The paymentauth.org problems index lists core and session types and no Lightning types.
Sources (6), retrieved 2026-10-09: Machine Payments Protocol on Lightning, Error catalogue
- https://raw.githubusercontent.com/tempoxyz/mpp-specs/main/specs/methods/lightning/draft-lightning-charge-00.md
- https://raw.githubusercontent.com/lightning/bolts/master/04-onion-routing.md
- https://docs.spark.money/wallets/withdraw-to-lightning.md
- https://paymentauth.org/problems/
- https://docs.spark.money/api-reference/wallet/pay-lightning-invoice.md
- https://docs.spark.money/api-reference/wallet/get-lightning-send-request.md
Machine Payments Protocol on Tempo
published- enumeration
- Problem Details types (RFC 9457) under the paymentauth.org base URI; Tempo API error.code values
The core draft defines a table of payment error codes delivered as RFC 9457 Problem Details types under a canonical base URI, and the paymentauth.org problems page lists the same core types plus session types. The Tempo charge method draft refers failures to HTTP status codes and Problem Details without adding types. The Tempo API errors page lists stable error.code values for the hosted API.
Sources (4), retrieved 2026-10-09: Machine Payments Protocol on Tempo, Error catalogue
x402 on Base
published- enumeration
- x402 error codes (errorReason, invalidReason), section 9; Coinbase Developer Platform x402SettleErrorReason
The x402 specification lists standard error codes, including EVM-specific ones and the non-terminal settlement_pending. CDP publishes an enumeration of settle error reasons and a reference table, and states that it returns a smaller set than the specification defines.
Sources (4), retrieved 2026-10-09: x402 on Base, Error catalogue
- https://raw.githubusercontent.com/x402-foundation/x402/main/specs/x402-specification-v2.md
- https://raw.githubusercontent.com/x402-foundation/x402/main/specs/transports-v2/http.md
- https://docs.cdp.coinbase.com/api-reference/v2/rest-api/x402-facilitator/settle-payment.md
- https://docs.cdp.coinbase.com/x402/support/troubleshooting.md
x402 on Solana
published- enumeration
- x402 error codes (errorReason, invalidReason), section 9; further codes named in the SVM scheme text
The x402 specification publishes a list of standard error codes; the SVM scheme adds named codes in its text without a separate enumeration. Solana documentation lists HTTP error codes for its public RPC endpoints.
Sources (4), retrieved 2026-10-09: x402 on Solana, Error catalogue
- https://raw.githubusercontent.com/x402-foundation/x402/main/specs/x402-specification-v2.md
- https://raw.githubusercontent.com/x402-foundation/x402/main/specs/transports-v2/http.md
- https://raw.githubusercontent.com/x402-foundation/x402/main/specs/schemes/exact/scheme_exact_svm.md
- https://solana.com/docs/references/clusters.md
x402 on Stellar
published- enumeration
- x402 error codes (errorReason, invalidReason), section 9; one Stellar scheme code; OpenZeppelin Channels error table
The v2 specification lists standard error codes returned by facilitators or resource servers; the Stellar scheme adds one scheme-specific code for the fee ceiling. The Channels guide publishes a table of service error codes.
Sources (5), retrieved 2026-10-09: x402 on Stellar, Error catalogue
- https://raw.githubusercontent.com/x402-foundation/x402/main/specs/x402-specification-v2.md
- https://raw.githubusercontent.com/x402-foundation/x402/main/specs/schemes/exact/scheme_exact_stellar.md
- https://docs.openzeppelin.com/relayer/1.5.x/guides/stellar-channels-guide
- https://developers.stellar.org/docs/build/agentic-payments/x402
- https://developers.stellar.org/docs/build/agentic-payments/x402/built-on-stellar
Offline verifiability
Whether the documentation defines an object the paying agent can check later, without asking any party, to establish the payment's outcome; who signs it; and the limits the documentation states on that check.
Google Cloud with AP2
AP2 v0.2 defines signed mandates and a signed Payment Receipt bound to the closed Mandate by hash, and the reference SDK verifies the receipt's ES256 signature locally given the issuer's public key. How a verifier obtains and trusts that key is not stated in the documents read. The signer is the Merchant Payment Processor, a party to the payment.
Sources (3), retrieved 2026-10-10: Google Cloud with AP2, Offline verifiability
Machine Payments Protocol on Lightning
The Machine Payments Protocol Lightning method and the mpp.dev Lightning page state that the preimage is verified by a single hash operation, locally, without contacting any external service. Two limits: the documents describe the server performing that check, and no page read states it from the paying agent's side; and a preimage shows that the invoice was settled, not which agent paid.
Sources (2), retrieved 2026-10-10: Machine Payments Protocol on Lightning, Offline verifiability
Machine Payments Protocol on Tempo
The Payment-Receipt defined by the Machine Payments Protocol core draft is a plain JSON object with no signature field, and neither the core draft nor the mpp.dev receipts page addresses signing or offline verification. The receipt carries a transaction reference, so establishing the outcome is a read of that transaction on the Tempo chain.
Sources (2), retrieved 2026-10-10: Machine Payments Protocol on Tempo, Offline verifiability
x402 on Base
The x402 Offer and Receipt extension, an optional addition to x402, lets the settlement response carry a receipt signed by the resource server on success. On this network the signer address is recovered from an EIP-712 signature with no network call. Three limits are stated in the extension: a valid signature does not establish that the key may sign for the service, and no mechanism for establishing that is mandated (some of the listed routes are network lookups); the receipt is the resource server's own statement and by default omits the transaction reference; and the extension is optional, with its wire shape not yet stable. The settle response itself is unsigned.
Sources (1), retrieved 2026-10-10: x402 on Base, Offline verifiability
x402 on Solana
The x402 Offer and Receipt extension, an optional addition to x402, lets the settlement response carry a receipt signed by the resource server on success, and states that its EIP-712 signing works on non-EVM networks including Solana. Three limits are stated in the extension: a valid signature does not establish that the key may sign for the service, and no mechanism for establishing that is mandated (some of the listed routes are network lookups); the receipt is the resource server's own statement and by default omits the transaction reference; and the extension is optional, with its wire shape not yet stable. Without the extension the agent holds a transaction signature, which is checked by querying a node.
Sources (1), retrieved 2026-10-10: x402 on Solana, Offline verifiability
x402 on Stellar
The x402 Offer and Receipt extension defines an optional receipt signed by the resource server; the settle response of the x402 v2 specification is unsigned. Whether that receipt can be checked offline on a Stellar network is not settled by the documents read: one section of the extension limits EIP-712 receipts to EVM networks while another states that EIP-712 signing works on non-EVM networks, and a JWS receipt needs a DID URL resolved by a method the extension does not fix. The Stellar x402 page read does not mention the extension.
Sources (3), retrieved 2026-10-10: x402 on Stellar, Offline verifiability
Facts not yet sourced
| Field | Status across the six rails |
|---|---|
| Custody model | pending for every rail |
| Supported assets | pending for every rail |
| Headline fee | pending for every rail |
| Fee model | pending for every rail |
| Authorization model | pending for every rail |
| Dispute mechanism | pending for every rail |
| Sanctions screening | pending for every rail |
For agents and software
The same facts as signed data, verifiable offline against the published key.
capabilities/index.jsonthe index of the six signed credentials, with the noticecapabilities/R6.vc.jsonGoogle Cloud with AP2: the signed credential (ES256 over P-256)capabilities/R11.vc.jsonMachine Payments Protocol on Lightning: the signed credential (ES256 over P-256)capabilities/R10.vc.jsonMachine Payments Protocol on Tempo: the signed credential (ES256 over P-256)capabilities/R1.vc.jsonx402 on Base: the signed credential (ES256 over P-256)capabilities/R9.vc.jsonx402 on Solana: the signed credential (ES256 over P-256)capabilities/R2.vc.jsonx402 on Stellar: the signed credential (ES256 over P-256)tier2/statements.mdthe statements every served cell carriesschema/capability.schema.jsonthe JSON Schema every record conforms toschema/capability.context.jsonldthe vocabulary, a JSON-LD context.well-known/did.jsonthe signing key as a DID document