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:
paymentRailsfrom merchant bootstrapavailablePaymentMethodsfrom 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
- Create a quote with
POST /v1/orders/quote. - Confirm with
POST /v1/orders/confirmandpaymentMethod: "card". - Confirm response is
200with hosted Stripe Checkout details. - Complete payment in Stripe Checkout.
- 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 code | When it appears | Action |
|---|---|---|
PAYMENT_UNAVAILABLE | Stripe/card rail is not ready for the merchant | Keep the storefront inactive and route the merchant to Stripe remediation |
QUOTE_NOT_FOUND | Quote expired or unknown | Recreate quote and restart confirm flow |
ASSERTION_FAILED_METHOD | Confirm method differs from expected | Reconfirm method with user and retry |
ASSERTION_FAILED_CURRENCY | Currency expectation mismatch | Validate the merchant’s Stripe-supported storefront currency |
ASSERTION_FAILED_EXPIRY | Expected expiry differs or quote stale | Refresh quote and retry with updated assertions |
Minimal confirm-time safety pattern
Use assertions on confirm calls to lock expected quote state:
expectedQuoteHashexpectedTotalCents/maxTotalCentsexpectedCurrencyexpectedPaymentMethodexpectedExpiresAtexpectedMerchantId/expectedMerchantAddress
This reduces silent divergence in agentic and scripted flows.