SPEI
Quick Reference
What is SPEI
SPEI (Sistema de Pagos Electrónicos Interbancarios) is Mexico's real-time interbank transfer system operated by Banco de México. It enables 24/7 instant transfers between any bank accounts in Mexico using a CLABE (Clave Bancaria Estandarizada) number as the payment reference.
| Feature | Detail |
|---|---|
| Market | Mexico |
| Currency | MXN |
| Settlement | Near real-time (same day) |
| Availability | 24/7/365 |
| Chargebacks | None — irrevocable push payment |
| Default expiration | 24 hours (configurable) |
How it works
Merchant creates charge
Your server calls POST /api/v1/bank/wallet/charge/ with type_charge: "spei" and currency: "MXN".
A55 generates CLABE reference
The API returns a CLABE number and payment reference for the customer to use.
Customer transfers via SPEI
The customer initiates a SPEI transfer from their banking app to the provided CLABE.
Real-time confirmation
Banco de México processes the transfer. A55 receives confirmation and sends a webhook with status: "paid".
Payment flow
SPEI lifecycle
| Status | Description |
|---|---|
| issued | CLABE generated; awaiting transfer |
| pending | Registered; awaiting SPEI transfer |
| paid | SPEI transfer confirmed |
| expired | No transfer received before deadline |
| error | Generation or processing error |
Create a SPEI charge
/api/v1/bank/wallet/charge/Bearer TokenCreate a SPEI payment- cURL
- Python
curl -X POST https://core-manager.a55.tech/api/v1/bank/wallet/charge/ \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"wallet_uuid": "00000000-0000-0000-0000-000000000000",
"merchant_id": "11111111-1111-1111-1111-111111111111",
"payer_name": "Carlos García",
"payer_email": "carlos.garcia@example.com",
"payer_tax_id": "GARC850101HDFRRL09",
"payer_cell_phone": "+5215512345678",
"installment_value": 1500,
"installment_count": 1,
"items": [{"name":"Premium Plan","quantity":1,"total_amount":1500,"unit_amount":1500,"sku":"PLAN-MX-001","code":"PM001"}],
"payer_address": {"street":"Av. Reforma","address_number":"222","complement":"Piso 5","neighborhood":"Juárez","city":"Ciudad de México","state":"CDMX","postal_code":"06600","country":"MX"},
"currency": "MXN",
"due_date": "2026-12-31T23:59:59Z",
"description": "Premium subscription",
"type_charge": "spei",
"webhook_url": "https://yoursite.com/webhook",
"redirect_url": "https://yoursite.com/confirmation"
}'
import requests
charge = requests.post(
"https://core-manager.a55.tech/api/v1/bank/wallet/charge/",
headers={"Authorization": f"Bearer {access_token}", "Content-Type": "application/json"},
json={
"wallet_uuid": "00000000-0000-0000-0000-000000000000",
"merchant_id": "11111111-1111-1111-1111-111111111111",
"payer_name": "Carlos García",
"payer_email": "carlos.garcia@example.com",
"payer_tax_id": "GARC850101HDFRRL09",
"payer_cell_phone": "+5215512345678",
"installment_value": 1500,
"installment_count": 1,
"items": [{"name": "Premium Plan", "quantity": 1, "total_amount": 1500, "unit_amount": 1500, "sku": "PLAN-MX-001", "code": "PM001"}],
"payer_address": {"street": "Av. Reforma", "address_number": "222", "complement": "Piso 5", "neighborhood": "Juárez", "city": "Ciudad de México", "state": "CDMX", "postal_code": "06600", "country": "MX"},
"currency": "MXN",
"due_date": "2026-12-31T23:59:59Z",
"description": "Premium subscription",
"type_charge": "spei",
"webhook_url": "https://yoursite.com/webhook",
"redirect_url": "https://yoursite.com/confirmation",
},
)
data = charge.json()
clabe = data["clabe"]
reference = data["payment_reference"]
Response example
{
"charge_uuid": "b4c2d5e6-7890-abcd-ef12-3456789abcde",
"currency": "MXN",
"type": "spei",
"status": "issued",
"clabe": "646180157042875632",
"payment_reference": "A55-SPE-20261231-001",
"beneficiary_name": "A55 Pagamentos",
"due_date": "2026-12-31T23:59:59Z",
"charge_payment_url": "https://pay.a55.tech/charge/b4c2d5e6-7890-abcd-ef12-3456789abcde"
}
| Field | Description |
|---|---|
clabe | 18-digit CLABE for the SPEI transfer destination |
payment_reference | Reference code the customer must include in the transfer |
beneficiary_name | Name to display as transfer recipient |
due_date | Deadline after which the charge expires |
Expiration
The default SPEI expiration is 24 hours. Configure via due_date. After expiration, the charge is marked expired and a webhook is sent.
Display the CLABE, beneficiary name, amount, and reference prominently. Most Mexican banking apps require all four fields to complete a SPEI transfer.
Settlement timing
SPEI settlement is near real-time. Once Banco de México confirms the transfer, funds are available same day.
| Scenario | Settlement |
|---|---|
| Business hours (6:00–17:30 CST) | Minutes |
| Off-hours / weekends | Next Banxico cycle (usually same day) |
SPEI processing cycles
Banxico processes SPEI transfers in near real-time cycles throughout the day. While the system operates 24/7, off-hours transfers may experience slightly longer confirmation times as they queue for the next processing cycle. A55 monitors settlement notifications continuously and triggers webhooks as soon as confirmation arrives.
Common errors
| Error | Cause | Fix |
|---|---|---|
invalid_currency | Currency is not MXN | SPEI only supports Mexican Pesos |
invalid_tax_id | RFC/CURP format invalid | Verify the payer's Mexican tax ID |
amount_below_minimum | Amount below MXN $1.00 | SPEI requires a minimum of MXN $1.00 per transaction |
spei_generation_failed | CLABE generation failed | Retry; if persistent, contact support |