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.

These fee facts are a quotation of published fee documentation, not a recommendation: no rail is endorsed, no ordering implies a best buy, and no rail is being suggested for use.

Each fee fact is quoted from the rail's own published fee documentation at the source URL given beside it, retrieved on 2026-10-09.

Every rail's fee facts are quoted from that rail's own published fee documentation, retrieved on the same date by the same procedure.

Google Cloud with AP2

not defined at this layer; recovery: not stated

Provenance documentation-derived

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

Machine Payments Protocol on Lightning

paying agent: the origin node pays forwarding fees; on the Spark path the paying wallet pays a capped routing fee; recovery: not stated

Provenance documentation-derived

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

Machine Payments Protocol on Tempo

set per challenge: paying agent by default, resource server when the challenge sets feePayer; recovery: stated (the server may recover the cost through pricing)

Provenance documentation-derived

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

facilitator, for the resource server, on the EIP-3009 path; payer, once, for a Permit2 approval where no gas extension applies; recovery: stated by the operator

Provenance documentation-derived

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

x402 on Solana

the account named as fee payer: the resource server or a third-party facilitator; recovery: not stated

Provenance documentation-derived

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

x402 on Stellar

facilitator, as the transaction source account; recovery: not stated in the specification

Provenance documentation-derived

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

Finality model class

The class of finality the settlement layer documents.

Google Cloud with AP2

not-defined-at-this-layer

Provenance documentation-derived

AP2 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

Machine Payments Protocol on Lightning

preimage-on-settlement

Provenance documentation-derived

BOLT 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

deterministic

Provenance documentation-derived

The 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

staged

Provenance documentation-derived

The 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

staged

Provenance documentation-derived

The 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

deterministic

Provenance documentation-derived

The 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

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

double spend named as a threat; overlapping closed mandates barred without a rejection receipt (Shopping Agent MUST), verifiers MAY reject; resubmission at the instrument level not addressed at this layer

Provenance documentation-derived

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

Machine Payments Protocol on Lightning

same preimage: not accepted twice (atomic consume-once, MUST); another payment to an already paid hash: MAY be accepted (BOLT 4); deduplication: optional transferId (Spark wallet)

Provenance documentation-derived

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

Machine Payments Protocol on Tempo

identical credential: rejected (single-use proof, MUST); freshly signed transaction: a distinct transaction at the chain layer; second client broadcast in push mode: not addressed; deduplication: single-use challenge (protocol), replay store (mppx SDK)

Provenance documentation-derived

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

x402 on Base

identical authorization: cannot settle twice (nonce consumed); freshly signed authorization: a separate payment; deduplication: EIP-3009 nonce (protocol), optional payment-identifier key (x402 extension)

Provenance documentation-derived

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

x402 on Solana

identical transaction: executes once (network deduplication); re-signed transaction before blockhash expiry: both can be accepted; deduplication: memo nonce and settlement cache (facilitator), optional payment-identifier key (x402 extension)

Provenance documentation-derived

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

x402 on Stellar

identical authorization entry: cannot apply twice (nonce consumed by the host); freshly signed entry: not prevented; deduplication: Soroban nonce (protocol), optional payment-identifier key (x402 extension)

Provenance documentation-derived

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

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-layer

Provenance documentation-derived

The 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

Machine Payments Protocol on Lightning

bounded-per-route
boundField
HTLC cltv_expiry (protocol layer; not documented as exposed on the Spark path)

Provenance documentation-derived

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

Machine Payments Protocol on Tempo

bounded-in-signed-artefact
boundField
valid_before

Provenance documentation-derived

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

x402 on Base

bounded-in-signed-artefact
boundField
authorization.validBefore

Provenance documentation-derived

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)

Provenance documentation-derived

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

Provenance documentation-derived

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

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

mediated

Provenance documentation-derived

AP2 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

Machine Payments Protocol on Lightning

mediated

Provenance documentation-derived

On 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

Machine Payments Protocol on Tempo

mediated-then-trustless

Provenance documentation-derived

In 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

x402 on Base

mediated-then-trustless

Provenance documentation-derived

The 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

x402 on Solana

mediated-then-trustless

Provenance documentation-derived

The 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-trustless

Provenance documentation-derived

The 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

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

Provenance documentation-derived

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)

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

Provenance documentation-derived

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)

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

Provenance documentation-derived

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)

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

Provenance documentation-derived

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)

x402 on Solana

none listed

Provenance documentation-derived

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)

x402 on Stellar

none listed

Provenance documentation-derived

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)

Observer privacy exposure

What a payment exposes, per the documentation, to a party not in the payment.

Google Cloud with AP2

payer identifier: none published by the protocol (no public ledger at this layer); amount: carried in the Payment Mandate disclosed to the Credential Provider, Network and Merchant Payment Processor; memo or metadata: checkout contents, payee, payment instrument description, optional risk_data, selectively disclosed; linkable on a public ledger: not at this layer (depends on the instrument)

Provenance documentation-derived

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

Machine Payments Protocol on Lightning

protocol layer: no public payment ledger is described; forwarding hops see the amount to forward and their adjacent nodes, not the origin (ephemeral key) or full route; the invoice carries the payee node public key and a description; the receipt reference (payment hash) is described as publicly shareable. operator layer (Spark): new wallets have privacy off, so public clients can query Bitcoin balances and transfer history unless the owner enables privacy mode

Provenance documentation-derived

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

Machine Payments Protocol on Tempo

payer identifier: public ledger address (Tempo account); amount: visible on the public ledger (TIP-20 transfer); memo: an attribution memo bound to the challenge is carried on the primary transfer when mppx is used, and an optional bytes32 memo field exists in the method draft; linkable on a public ledger: yes

Provenance documentation-derived

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

x402 on Base

Payer identifier: public ledger address (authorization.from), and the facilitator signer address is published in /supported. Amount: visible on the public chain. Metadata: the authorization nonce via the AuthorizationUsed event; optional ERC-8021 builder-code attribution appended to settlement calldata by the CDP Facilitator. Linkable on the public ledger: yes.

Provenance documentation-derived

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

x402 on Solana

Payer identifier: public ledger address (the client signer and source token account; the fee-payer address is also public). Amount: visible; transactions are described as fully auditable and amount confidentiality is an opt-in Token-2022 extension the exact scheme does not name. Metadata: a Memo instruction carrying extra.memo or a random nonce, recorded in transaction logs. Linkable on the public ledger: yes.

Provenance documentation-derived

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

payer identifier: public ledger address (the from argument of the token transfer); amount: visible (transfer argument on a public ledger); memo or metadata: none defined by the scheme on-chain (the resource URL travels to the facilitator, not on-chain); linkable on a public ledger: yes

Provenance documentation-derived

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

Provenance documentation-derived

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

Machine Payments Protocol on Lightning

Provenance documentation-derived

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

Machine Payments Protocol on Tempo

Provenance documentation-derived

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

x402 on Base

Provenance documentation-derived

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

x402 on Solana

Provenance documentation-derived

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

x402 on Stellar

Provenance documentation-derived

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

Declared rate limits

Whether the operator's documentation declares rate or throughput limits on the profiled path.

Google Cloud with AP2

not declared in the documents read
scope
no hosted service documented

Provenance documentation-derived

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

Machine Payments Protocol on Lightning

not declared in the documents read
scope
Spark Lightning send path

Provenance documentation-derived

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

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

Provenance documentation-derived

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

x402 on Base

declared for the operator API in general; not stated for the x402 facilitator endpoints
scope
Coinbase Developer Platform API, write and read operations

Provenance documentation-derived

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

x402 on Solana

declared for the public RPC endpoints; no facilitator is named in the documents read
scope
Solana public RPC endpoints

Provenance documentation-derived

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

x402 on Stellar

a fee-consumption limit per API key is declared; no request-rate limit is declared for the facilitator endpoints
scope
OpenZeppelin Channels service used by the hosted facilitator

Provenance documentation-derived

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

Status page

Whether the operator publishes a service status page, and its address.

Google Cloud with AP2

none-found-in-documents-read

Provenance documentation-derived

No 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

Machine Payments Protocol on Lightning

published

Provenance documentation-derived

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

Provenance documentation-derived

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

published

Provenance documentation-derived

Both 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-read

Provenance documentation-derived

No 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

x402 on Stellar

published

Provenance documentation-derived

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

SDK languages

Google Cloud with AP2

Provenance documentation-derived

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

Provenance documentation-derived

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

Provenance documentation-derived

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

x402 on Base

Provenance documentation-derived

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

Provenance documentation-derived

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

Provenance documentation-derived

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

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

Provenance documentation-derived

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
enumeration
Lightning problem types in the method draft (absent from the paymentauth.org index); BOLT 4 failure_code

Provenance documentation-derived

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

Machine Payments Protocol on Tempo

published
enumeration
Problem Details types (RFC 9457) under the paymentauth.org base URI; Tempo API error.code values

Provenance documentation-derived

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

Provenance documentation-derived

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

x402 on Solana

published
enumeration
x402 error codes (errorReason, invalidReason), section 9; further codes named in the SVM scheme text

Provenance documentation-derived

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

x402 on Stellar

published
enumeration
x402 error codes (errorReason, invalidReason), section 9; one Stellar scheme code; OpenZeppelin Channels error table

Provenance documentation-derived

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

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

outcome: a Payment Receipt signed by the Merchant Payment Processor (an ES256 JWT bound to the closed Mandate by hash), checkable locally given the issuer's public key; authorization: signed mandates; how the verifier obtains and trusts the issuer's key: not stated in the documents read

Provenance documentation-derived

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

success outcome: the preimage, checked against the payment hash by one local hash operation with no external service; stated from the server's side, not the paying agent's; a preimage does not identify the payer

Provenance documentation-derived

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

receipt: an unsigned acknowledgment by the server, with no signature field defined; offline verification: not addressed by the core draft or the receipts page; establishing the outcome: a read of the referenced transaction on the Tempo chain

Provenance documentation-derived

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

by an optional extension: a receipt signed by the resource server, EIP-712 on this network, with the signer address recoverable from the signature and no network call; limits: signer authority is a separate check with no mandated mechanism; the transaction reference is omitted by default; the extension is optional and not yet stable; the settle response itself is unsigned

Provenance documentation-derived

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

by an optional extension: a receipt signed by the resource server, EIP-712 with a constant chainId that the extension states covers Solana; limits: signer authority is a separate check with no mandated mechanism; the transaction reference is omitted by default; the extension is optional and not yet stable; without it, a transaction signature checked by a node query

Provenance documentation-derived

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

receipt: defined by the same optional extension, signed by the resource server; checkable offline on a Stellar network: not settled by the documents read; operator documentation: does not mention the extension

Provenance documentation-derived

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

These fields are served as "pending" in every credential: roadmap, no measurement, never invented.

FieldStatus across the six rails
Custody modelpending for every rail
Supported assetspending for every rail
Headline feepending for every rail
Fee modelpending for every rail
Authorization modelpending for every rail
Dispute mechanismpending for every rail
Sanctions screeningpending for every rail

For agents and software

The same facts as signed data, verifiable offline against the published key.