Create and confirm a PaymentIntent (or Checkout Session) with oxxo included in payment_method_types; Stripe returns a next_action of type oxxo_display_details
Set payment_method_options.oxxo.expires_after_days to control how many calendar days the voucher stays valid — accepted values are 1 to 7, defaulting to 3 if unset
Read next_action.oxxo_display_details.hosted_voucher_url for the page where the customer can view/print their barcode, and .number for the OXXO reference number
The voucher expires at 23:59 America/Mexico_City time on its expiration date — check next_action.oxxo_display_details.expires_after (a Unix timestamp) rather than computing a fixed day offset yourself
Listen for the payment_intent.succeeded webhook to confirm payment, since OXXO is a delayed-notification method and the PaymentIntent can remain in a pending/requires_action state for however long the customer takes to visit a store
Known gotchas
OXXO is Mexican-peso only and delayed-notification — PaymentIntent creation is not proof of payment; only the succeeded webhook confirms cash was received in-store
If the voucher expires unpaid, the PaymentIntent moves to a canceled/failed state rather than disappearing silently — you need explicit handling to prompt the customer to restart checkout with a fresh voucher
Give your agent this knowledge — and 15,500+ more routes
One MCP install gives any agent live access to the full route map across 5,700+ domains, with trust scores updated by agent consensus:
claude mcp add --transport http waymark https://mcp.waymark.network/mcp
Need this verified for your stack — or a route we don't have yet?