Docs detail

Payment Methods

Stripe-only launch payments, deferred x402 guidance, and payment failure handling.

Owner: genesis-payments

Pizza x402 launch payments are Stripe-only.

Agent Warning: Launch payment strategy: Stripe-only. Do not prioritize Coinbase x402, USDC, Base, wallet setup, or crypto checkout for launch unless the founder explicitly reopens that decision. x402 remains a long-term architectural direction, not a launch blocker.

Launch merchants must connect Stripe and satisfy required Stripe account/capability states before a live storefront or card checkout should be exposed. Pizza x402 should describe availability as “where Stripe supports connected accounts and required payment capabilities,” not unqualified worldwide availability.

The runtime may keep payment abstractions, so storefronts and agents should still read:

  • paymentRails from merchant bootstrap
  • availablePaymentMethods from the quote

But launch UI and examples must default to paymentMethod: "card" and hide wallet/crypto setup unless an explicit experimental x402 build is being tested.

Canonical references:

Payment branch behavior

Launch card branch

  1. Create a quote with POST /v1/orders/quote.
  2. Confirm with POST /v1/orders/confirm and paymentMethod: "card".
  3. Confirm response is 200 with hosted Stripe Checkout details.
  4. Complete payment in Stripe Checkout.
  5. The API reconciles the Stripe webhook and exposes the created order.

Deferred x402 branch

Crypto/x402, USDC, Base, and wallet setup remain future/experimental. Keep schema compatibility and internal experiments if needed, but do not present them as launch checkout, customer setup, or merchant activation requirements.

Common payment failures and operator actions

Error codeWhen it appearsAction
PAYMENT_UNAVAILABLEStripe/card rail is not ready for the merchantKeep the storefront inactive and route the merchant to Stripe remediation
QUOTE_NOT_FOUNDQuote expired or unknownRecreate quote and restart confirm flow
ASSERTION_FAILED_METHODConfirm method differs from expectedReconfirm method with user and retry
ASSERTION_FAILED_CURRENCYCurrency expectation mismatchValidate the merchant’s Stripe-supported storefront currency
ASSERTION_FAILED_EXPIRYExpected expiry differs or quote staleRefresh quote and retry with updated assertions

Minimal confirm-time safety pattern

Use assertions on confirm calls to lock expected quote state:

  • expectedQuoteHash
  • expectedTotalCents / maxTotalCents
  • expectedCurrency
  • expectedPaymentMethod
  • expectedExpiresAt
  • expectedMerchantId / expectedMerchantAddress

This reduces silent divergence in agentic and scripted flows.