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 sends the voucher automaticallyWhen 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 voucher based on the amount of the payment:
If you want to show customized instructions to your customer, you can also use barcode_url, reference_number and images of the lists of locations: We recommend prioritizing the barcode as the preferred method of presentation at the location, as it enables a faster payment process compared to dictating the reference number.
Maximum amount limit by locationSome locations only accept payments up to 5,000.00 MXN, while others have no maximum limit. You should display specific logos and a list of all locations based on the payment amount, as shown in the example voucher 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.