OXXO

OXXO is Mexico's most popular cash payment method, allowing customers to pay for online purchases in cash at any OXXO convenience store — the largest chain of convenience stores in Mexico with over 20,000 locations nationwide. It is especially popular among customers who prefer cash payments or don't have a credit card.

Introduction

OXXO uses a redirect-based payment flow. When a customer selects OXXO at checkout, they are redirected to a hosted page where an OXXO payment voucher (with a reference code and barcode) is generated. The customer then visits any OXXO store and pays using the reference code or by scanning the barcode at the register.

This guide explains the process of integrating OXXO into your app or website using Payrails.

Pre-requisites

Before you start accepting OXXO payments with Payrails, there are a few requirements you must meet:

  1. Integrate with Payrails using one of our SDKs or our API
  2. Configure a new integration account for OXXO via dLocal as a Payment Service Provider. If you do not have a dLocal integration already configured in your workspace, please follow the dLocal integration setup guide first.
  3. Enable OXXO as a payment method in your dLocal integration configuration. In the Payrails portal, navigate to Settings → Integrations, select your dLocal integration instance, and enable the OXXO checkbox under Payment methods, then save the account.
  4. Enable OXXO as a payment option in your workflow.
  5. Make sure you're sending the OXXO-specific meta fields in your requests.

Ways to integrate OXXO

Payrails SDK

The simplest way to use OXXO with Payrails is to use our drop-in in your checkout flow. With this integration type, no additional work is required to accept payments with OXXO except for handling success/failure screens for your users.

For a more flexible implementation using our SDK, you can use our genericRedirectButton element. See special instructions here for your client-side implementation.

Server-to-server integration

You can integrate OXXO by completely managing your own client-side implementation, and using Payrails APIs with a server-to-server integration to process OXXO payments.

Parse OXXO from lookup response

With a server-to-server integration, you can call our lookup payment options endpoint to get available payment options. As shown in the example below, you can see oxxo returned as an option of the paymentCompositionOptions.

{
  "name": "lookup",
  "actionId": "0bb6413e-cabb-4074-99e6-9e815c69f25b",
  "executedAt": "2026-03-26T12:00:00.000000000Z",
  "data": {
    "paymentCompositionOptions": [
      {
        "integrationType": "redirect",
        "paymentMethodCode": "oxxo",
        "description": "OXXO"
      }
    ]
  },
  "links": {
    "execution": "https://api.payrails.io/merchant/workflows/payment-acceptance/executions/83c534ac-13b7-43e6-b04b-f3e8b4eb4424",
    "authorize": {
      "method": "POST",
      "href": "https://api.payrails.io/merchant/workflows/payment-acceptance/executions/83c534ac-13b7-43e6-b04b-f3e8b4eb4424/authorize"
    }
  }
}

Pass OXXO payment method in request to authorize payment with Payrails

You can then make a request to our authorize a payment endpoint with oxxo as the paymentMethodCode. See an example below:

{
  "executionId": "c0fd1c51-e709-47e5-bfd1-5d1c98f7d990",
  "amount": {
    "value": "180000",
    "currency": "MXN"
  },
  "paymentComposition": [
    {
      "integrationType": "redirect",
      "paymentMethodCode": "oxxo",
      "amount": {
        "value": "180000",
        "currency": "MXN"
      }
    }
  ],
  "meta": {
    "customer": {
      "name": "Jane Doe",
      "email": "[email protected]",
      "identityCardNumber": "1234567890",
      "country": {
        "code": "MX"
      }
    }
  },
  "returnInfo": {
    "success": "https://mysuccessurl.com",
    "error": "https://myerrorurl.com"
  }
}

Note on amounts: MXN uses 2 decimal places. Amounts should be provided in the smallest currency unit — e.g., 180000 for $1,800.00 MXN.


Note: OXXO is a redirect-based, single-use payment method. After calling the authorize endpoint, the customer will be redirected to a hosted page with their OXXO payment voucher (reference code and barcode). The customer pays at any OXXO store. Vouchers expire after 10–12 days depending on provider. Notification delay is immediate or up to 24 hours depending on the agreed solution. Once confirmed, the customer will be redirected back to the returnInfo.success URL.

Handle the redirect response

After the customer returns from the hosted page, they will be redirected to your success or error URL. You should then verify the payment status by checking the workflow execution status via the Payrails API or by listening to webhook notifications.

Supported currencies

OXXO via dLocal supports the following presentment currency:

  • MXN — Mexican Peso

Supported regions / countries

Customer regions

OXXO is available to customers based in:

  • Mexico 🇲🇽

Merchant regions

Merchants enabled for Mexico can accept OXXO payments via dLocal.

Supported workflows and services

WorkflowSupported
Available via Payrails SDK✔️
Available via Payrails API✔️
Delayed / Manual Capture✖️
Instant Capture✔️
Cancel / Void✖️
Refund / Reverse✔️
Save Instruments✖️
Merchant Initiated Transaction (MIT)✖️