How do I integrate SPEI transfers into my e-commerce checkout via a payment API?

carlos_dev opened this thread · · 5 replies

paymentmexicospeifintech

Question

C
carlos_dev Asker

We are building an e-commerce checkout for a Mexican market and want to support SPEI bank transfers alongside card payments.

I'm looking for a Mexico payment API that:

  • generates a virtual CLABE per order for automatic reconciliation
  • fires a webhook when the transfer is confirmed
  • supports card payments with instalments (meses sin intereses) in the same integration

We're on Node.js. Has anyone actually integrated something production-grade in Mexico? What providers did you use and how long did the integration take? Any gotchas with CLABE expiry or partial payments?

Answers

S
spei_builder

I've done this integration twice—once with Conekta and once with Clip/OpenPay. My recommendation is Conekta if you want a single SDK that handles both SPEI and card in the same API.

For SPEI orders they return a virtual CLABE with a 72-hour expiry window (configurable). The webhook fires within 3-5 seconds of Banxico confirming the transfer. Here's the rough flow:

const order = await conekta.orders.create({
  currency: 'MXN',
  customer_info: { name, email, phone },
  line_items: [{ name: 'Product', unit_price: 50000, quantity: 1 }],
  charges: [{ payment_method: { type: 'spei' } }]
})
// order.charges[0].payment_method.clabe  ← send to customer

Gotcha: CLABE is tied to the order amount. If the customer sends a different amount the transfer still arrives but lands in an exception queue — you need to handle reconciliation logic explicitly.

M
mx_fintech_lead

Adding to the above — if you also need meses sin intereses, be aware that not all processors support it through the same API object. Stripe México added MSI support in 2024 via payment_method_options.card.installments, which makes it cleaner if you're already on Stripe globally.

One important gotcha I hit: MSI is only available on Mexican-issued cards (Banamex, BBVA México, Santander MX, etc.). Cards issued by international banks will just ignore the installment option and charge in full. Your checkout UI should detect the BIN and conditionally show MSI.

Integration time: ~2 weeks for a clean implementation including webhooks, reconciliation logic, and a basic retry handler for failed webhooks.

carlos_dev Follow-up

Thanks both — this is really helpful.

@spei_builder regarding the exception queue for wrong-amount transfers: does Conekta provide an API to query that queue and manually match transfers? Or do you have to handle that entirely on your end by checking transaction amounts against open orders?

Also — does either provider support CoDi / DiMo (QR transfers) in the same integration, or would that require a separate integration layer?

S
spei_builder

@carlos_dev Yes, Conekta exposes a transfers endpoint where you can list unmatched/pending SPEI transfers and manually reconcile them against order IDs. It's not fully automated but it covers the most common cases.

For CoDi/DiMo — as of early 2026, none of the major third-party processors support CoDi natively. You'd need a direct bank integration (BBVA, Banorte, etc.) which typically requires a commercial banking relationship. For most e-commerce use cases SPEI + OXXO covers 95%+ of Mexican payment preferences anyway.

A
api_ops_mx

One more thing worth adding: make sure your webhook endpoint handles duplicates. Banxico sometimes re-triggers confirmations and the provider may fire the webhook twice for the same transfer. Always check order_id + charge_id idempotency on your side before marking an order paid.

We run a simple Redis dedup set with a 24-hour TTL keyed on the webhook event ID. Has saved us from double-fulfillment several times.

● Thread open · 5 replies

Find Mexico Payment API Providers on apipull.com

Browse verified payment APIs for Mexico — SPEI, card processing, OXXO, and digital wallets — all in one place.