Skip to main content
This guide shows you how to create payments using alternative payment methods (APMs) through Tonder’s unified Process Transaction endpoint. You can process local payment options like SPEI bank transfers and OXXO Pay cash payments through a single, consistent API call.
Looking for card payments?This guide covers non-card payment methods only. For credit and debit card processing, see the Card Payments Overview.

Step 1: The Core Request

All payments are created by sending a POST request to the Process Transaction endpoint. The request body must contain required fields that are common to all payment methods, plus a payment_method object with specific fields for your chosen payment method.

Basic Request Structure

Every payment request to the Process Transaction endpoint follows this structure:
These fields are required for all payment requests:
Depending on the payment method you choose, additional fields may be required inside the payment_method object. For detailed information about each payment method and their specific requirements, see the Payment Methods Overview.

Step 2: Processing Different Payment Methods

To process a specific payment method, you change the type inside the payment_method object and provide any required additional fields. The examples below show how to process different payment methods.
To let a customer pay via a SPEI transfer, set the type to SPEI. The API will generate payment instructions for the customer. Here’s an example request:
SPEI Bank Transfer
A successful SPEI response will have a status of pending and includes payment instructions for the customer:
SPEI Payment Response
Display the payment_instructions to your customer so they can complete the bank transfer. The clabe is the destination account number and reference should be included in the transfer description.
To generate a voucher for a cash payment at an OXXO store, set the type to oxxopay. Here’s an example request:
OXXO Cash Payment
A successful OXXO Pay response will have a status of pending and includes a url to payment instructions and reference for the customer:
OXXO Payment Response
Display the voucher image and reference number to your customer. They can present either at any OXXO store to complete the payment. Note that OXXO payments typically have a longer expiration window (usually 7 days).
For detailed information about each payment method and their specific requirements, see the Payment Methods Overview.

Step 3: Handling the Response

After you send the request, the API will respond immediately with the initial status of the transaction. The status field can have one of the following values:
Validation of id and status fieldsFor proper payment validation, you must check:
  • id is the unique transaction identifier - store this for future reference.
  • status is the current payment state - determines next actions.
Never rely on HTTP status codes alone for payment validation.
The table below details the fields that are returned in the response:

Asynchronous Payment Flow

SPEI and OXXO payments are asynchronous. The initial status will always be pending because they require the customer to take further action (complete a bank transfer or visit an OXXO store). You must use Webhooks or poll the transaction status endpoint to know when the payment is completed.

Step 4: Check the Transaction Status

For asynchronous payments, or if you need to confirm the final status of any transaction, you can query the transaction status using the Get Transaction Status endpoint with the id from the payment response:
cURL
This will return the full transaction object with its current status (e.g., success, failed, expired). Always validate both the id and status fields in the response.

Next Steps