Skip to main content

Overview

SPEI cash-in generates a disposable CLABE that the payer uses to make a SPEI transfer from their banking app. When NTX Pay receives the settlement, you are notified on the cash_in webhook with the transaction.cash_in.settled event. Characteristics:
  • CLABE valid for a single transfer (one-time use)
  • Asynchronous confirmation (seconds to minutes)
  • Expires in ~24 hours if unpaid (you receive the transaction.cash_in.expired webhook)

Endpoint

POST /api/spei/cash-in

Headers

Request

Response (201)

Display the destinationClabe (and/or the checkoutUrl) to the end payer. The transactionId (UUID) is the unique transaction identifier — it is the same value delivered in webhooks; use it to correlate events and look up the transaction.

Response Fields

string
required
Unique transaction identifier (UUID). Same value delivered in webhooks.
string
required
Transaction status: PENDING, CONFIRMED, FAILED or EXPIRED.
string
required
Destination CLABE the payer must use for the SPEI transfer.
object
required
Beneficiary shown to the payer (name and, when available, taxId).
string
SPEI numeric reference, when available.
string
Hosted checkout URL (alternative to a manual transfer), when available.
string
required
Charge expiration (ISO 8601).
integer
required
Amount in MXN centavos.

Request Fields

integer
required
Amount in MXN centavos. **Minimum: 1000 centavos (10.00MXN)partnerbankfloor;belowthattheAPIreturns400withcodeCASHINMINAMOUNT.E.g.50000=10.00 MXN)** — partner bank floor; below that the API returns `400` with code `CASHIN_MIN_AMOUNT`. E.g. `50000` = 500.00 MXN.
string
Unique external identifier (up to 100 characters). Use it to correlate with your system. Recommended for idempotency.
string
Charge description (up to 255 characters).
string
required
Payer name (1–255 characters), displayed on the SPEI checkout.
string
required
Payer email (valid email format).
string
Payer RFC/CURP (10–20 characters).

Payment Flow

Transaction States

On the webhook, the settlement arrives as transaction.cash_in.settled with status: LIQUIDATED — see the full payload.

Idempotency

Resend the same request with the same externalId to guarantee a network failure does not create two charges. On duplication, NTX Pay returns the existing charge.

Testing in the Sandbox

In the sandbox, settlement is simulated within seconds — no issuing bank required. Control the outcome with the X-Sandbox-Scenario header:
See the scenario catalog to force rejection, return, and delay.

Next Steps

cash_in Webhook

Confirmation webhook payload

SPEI Cash-Out

Send SPEI transfers