Skip to main content
This guide shows you how to accept cash payments at OXXO convenience stores in Mexico. OXXO is Mexico’s largest convenience store chain, making it ideal for customers who prefer to pay with cash or don’t have bank accounts.

When to Use OXXO

OXXO payments are perfect for:
  • Customers without bank accounts or credit cards.
  • E-commerce customers who prefer cash payments.
  • Areas with high OXXO store density.
  • Building trust with cash-preferred demographics.

Step 1: Create and Send the Payment Request

OXXO payments are simple to set up - just specify the payment type and amount. Send your payment request to the Process Transaction endpoint and the API will generate a payment voucher for your customer:
For detailed information about all available request fields and their requirements, see the Create a Payment guide.

Step 2: Handle the Response

OXXO payments start with a pending status and include payment instructions for the customer:
The response contains key fields you need to handle the OXXO payment flow:
Id and Status Fields ValidationCheck that you received a valid id and status before proceeding. If either is missing or invalid, do not display payment instructions and handle the error appropriately.
Payment confirmation is near-instant under normal conditions. Once a customer pays at an OXXO store, confirmation typically arrives within minutes. However, OXXO’s system may hold a payment in pending status for up to 3 hours while it checks for internal failures or potential refund scenarios. This is expected behaviour and does not indicate a problem.If a payment remains pending beyond 3 hours, contact soporte@tonder.io so the team can investigate with the payment provider.

Step 3: Display Payment Instructions to Your Customer

Present the payment voucher clearly to help customers complete their OXXO payment successfully. Create a user-friendly page that displays all necessary information for the customer to pay at any OXXO store:
1

Show the barcode prominently

Display the barcode in a format the customer can easily show to the cashier.
2

Include the reference code

Show the reference_code as backup in case the barcode can’t be scanned.
3

Provide clear instructions

Use the instructions array to guide the customer through the payment process.
4

Highlight the expiration date

Make sure customers know when the voucher expires.
5

Offer the PDF voucher

Provide a link to download the voucher_pdf for printing.
Here’s an example of a customer voucher template:

Step 4: Track Payment Status

OXXO payments follow this status flow:
  1. pending - Waiting for customer to pay at store.
  2. success - Cash payment received and confirmed.
Webhooks provide real-time notifications when payment status changes. Set up webhooks to receive payment confirmations automatically:
If you prefer not to use webhooks, you can check payment status via API:

Step 5: Handle OXXO-Specific Scenarios

There are some specificities to consider when using OXXO payments:
OXXOPay confirmations are near-instant under normal conditions:
  • Confirmation typically arrives within 10 minutes of the customer paying at the store.
  • In some cases, OXXO’s system holds the status in pending for up to 3 hours while processing internal checks. This is normal.
  • If a payment remains pending beyond 3 hours and customer claims payment was made, report it to soporte@tonder.io.
  • OXXO stores are typically open 24/7.
  • Vouchers expire after 5 days if unpaid.
Regarding the amount limits, OXXO has the following restrictions:
  • Minimum amount is $20 MXN (varies by configuration).
  • Maximum amount is $10,000 MXN per transaction.
  • Daily limits may apply per customer.
Some common issues that may occur when using OXXO payments are:

Best Practices for OXXO Payments

Follow the best practices below to integrate OXXO payments:
  • Send payment instructions via email and SMS.
  • Include store locator links to help customers find nearby OXXO stores.
  • Provide clear expiration date warnings.
  • Offer customer support for payment questions.
  • Keep orders in “pending payment” status until confirmed.
  • Send reminder emails before voucher expiration.
  • Have a process for handling expired payments.
  • Consider offering payment extensions for loyal customers.
  • Generate barcode images for better user experience.
  • Make vouchers mobile-friendly for easy display at stores.
  • Cache PDF vouchers for faster loading.
  • Implement retry logic for voucher generation.

Implementation Example

Here is an example of how to implement OXXO payments. This code displays the payment voucher information on the frontend:

Next Steps