Skip to main content
You can accept cash payments from customers in Mexico. Customers pay by providing a reference (number or barcode) at more than 13,000 available locations. Fintoc notifies you after the customer completes the payment. You can offer cash in three ways:
  • Payment Links: If your organization has cash enabled, your Payment Links offer cash automatically.
  • Checkout Sessions: Add cash to payment_method_types when you create an MXN Checkout Session. Your customer chooses to pay in cash on the Fintoc-hosted checkout page.
  • Payment Intent API: Create a cash PaymentIntent directly and show the reference to your customer, as described in this guide.

Offer cash in a Checkout Session

Include cash in payment_method_types on its own, or combine it with card and bank_transfer. You can’t combine cash with installments. Server
Fintoc responds with the session object, including cash in payment_method_types:
To have Fintoc send the cash voucher to your customer, include customer_email or customer_phone (E.164 format, for example +525512345678) when you create the session. You can also set payment_method_options.cash.notification_preferences with the same options described in Configure voucher notifications. Fintoc copies the phone number and preferences to the cash payment when your customer chooses cash. If customer_phone isn’t in E.164 format, Fintoc returns an invalid_phone error. If your customer’s card or bank transfer payment fails and cash is available in the session, your customer can retry the payment in cash from the same checkout. To finish the integration, follow the Accept a payment guide. If your organization has cash enabled, every MXN Payment Link you create offers cash. You don’t need to send any extra parameter. Your customer sees a Paga en efectivo option next to the other payment methods and can generate a voucher to pay at the store. Fintoc doesn’t show the cash option when:
  • No store accepts the Payment Link’s amount.
  • Your organization’s checkout session lasts less than the time your customer needs to pay in cash.

Create a payment

Using your secret key, create a PaymentIntent on your server with an amount, currency (MXN only for cash payments), and payment_type: "cash".
Node

Response when creating a Payment Intent for a cash payment

After making the request, Fintoc responds with the Payment Intent with the status created, including payment_type_options.cash with the cash payment reference:

Share the reference and instructions to pay with your customer

After creating the payment, share the voucher with your customer for clear instructions on how to complete the payment at one of the available locations.
Fintoc can send the voucher automatically to your customerWhen you create a cash payment through the API, Fintoc sends the voucher as soon as the payment is created. Fintoc sends it by email to customer_email and by WhatsApp to customer_phone, depending on the channels in notification_preferences. Fintoc doesn’t send the voucher if you turned off voucher notifications in your preferences or if your account suppresses customer communications. In test mode, Fintoc also sends real messages, so use an email address and phone number you control.You can still share the voucher through your own channels or build your own instructions with the fields below.

Configure voucher notifications

Use notification_preferences to choose how Fintoc sends the voucher to your customer. Send it in payment_type_options.cash when you create a Payment Intent:
Fintoc validates the preferences when you create the payment:
  • If channels includes email without customer_email, or phone without customer_phone, Fintoc returns a missing_parameter error.
  • If send_voucher or send_reminders is true and you don’t send any contact, Fintoc returns a missing_parameter error.
  • If channels is empty or includes a value other than email or phone, Fintoc returns an invalid_param_value error.
To send the voucher only by email even if you have the customer’s phone, set channels to ["email"]. To stop Fintoc from sending the voucher for a payment, set send_voucher to false.

Payment reminders

When send_reminders is true, Fintoc reminds your customer to pay a pending cash payment. Fintoc sends reminders at 10:00 and 19:00 (Mexico City time) through the same channels it uses for the voucher. Your customer receives up to 2 reminders per channel. Fintoc doesn’t send a reminder when:
  • The payment is in test mode.
  • The payment was created less than 6 hours ago.
  • The payment expires in less than 30 minutes.
  • Your account suppresses customer communications.
To turn off reminders for a payment, set send_reminders to false. Example of a cash payment voucher:
Cash payment voucher with the amount, available stores, and barcode.
If you build your own payment instructions, use barcode_url and reference_number. Prioritize the barcode so your customer doesn’t need to dictate the reference number at the store. The following table lists the Pespay chains, their maximum payment amounts, and the fees charged to the payer. All amounts are in Mexican pesos (MXN):
Maximum amount limit by locationShow only the available chains that accept your payment amount. Each chain’s maximum appears in the table above.

Handle post-payment events

Once a Payment Intent is completed, handle the payment result using the events sent by the webhooks to complete the payment in your backend. Fintoc sends a payment_intent.succeeded event when the payment is successfully completed. Use the webhook guide to receive these events and run actions, such as sending an order confirmation email to your customer, logging the sale in a database, or starting a shipping workflow.
You should handle the following events when using our Payment Initiation product:

Expire a payment in progress

If needed, you can expire a payment that is in the created status using the Payment Intent expire endpoint like in the example below:
Node
After the payment expires, your customer can no longer pay using the reference.

Test your integration

To simulate a successful or expired cash payment, use one of the following amounts when creating the PaymentIntent with payment_type: "cash": In test mode, the succeeded scenario delivers an immediate webhook notification of the payment_intent.succeeded event. For the expired scenario, the Payment Intent goes to the created status, so you can test the endpoint to expire a Payment Intent or wait for the end of the expiration time to receive the payment_intent.expired event.