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 thecash_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.expiredwebhook)
Endpoint
POST /api/spei/cash-in
Headers
Request
Response (201)
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 (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 sameexternalId 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 theX-Sandbox-Scenario header:
Next Steps
cash_in Webhook
Confirmation webhook payload
SPEI Cash-Out
Send SPEI transfers