POST

speiTransfer

Envía una transferencia SPEI a cualquier banco en México. Acepta CLABE de 18 dígitos, tarjeta de débito (15–16 dígitos) o número de celular (10 dígitos, transferencia DIMO). La transferencia se procesa en segundos y recibes confirmación vía webhook.

Endpoint

POSThttps://magicpay.b4a.io/functions/speiTransfer

Headers

HeaderValor
Content-Typeapplication/json
x-parse-application-idYOUR_APP_ID
x-parse-rest-api-keyYOUR_REST_KEY

Parámetros

NombreTipoRequeridoDescripción
apiKeystringTu API key de merchant.
amountnumberMonto en MXN. Mínimo $0.01. Máximo 2 decimales.
descriptionstringConcepto de pago (máx 40 caracteres).
transferIdstringTu ID único de la transferencia (7–24 caracteres alfanuméricos). Debe ser único por operación.
accountstringCuenta destino: CLABE (18 dígitos), tarjeta de débito (15-16 dígitos), o teléfono (10 dígitos, DIMO).
ownerstringNombre del beneficiario.
bankbankNoNombre del banco destino. Requerido si `account` NO es CLABE de 18 dígitos. Si es CLABE, el banco se detecta automáticamente por el prefijo.
numReferencestringNoReferencia numérica (máx 7 dígitos). Si no se envía, se genera automáticamente.

Ejemplo de Request

cURL
curl -X POST 'https://magicpay.b4a.io/functions/speiTransfer' \
  -H 'Content-Type: application/json' \
  -H 'x-parse-application-id: YOUR_APP_ID' \
  -H 'x-parse-rest-api-key: YOUR_REST_KEY' \
  -d '{
  "apiKey": "pk_live_xxxxxxxxxxxxx",
  "amount": 150.5,
  "description": "Pago de servicio",
  "transferId": "PAY20240115001",
  "account": "012180015025354012",
  "owner": "JUAN PEREZ LOPEZ"
}'
JavaScript
const response = await fetch('https://magicpay.b4a.io/functions/speiTransfer', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'x-parse-application-id': 'YOUR_APP_ID',
    'x-parse-rest-api-key': 'YOUR_REST_KEY',
  },
  body: JSON.stringify({
      "apiKey": "pk_live_xxxxxxxxxxxxx",
      "amount": 150.5,
      "description": "Pago de servicio",
      "transferId": "PAY20240115001",
      "account": "012180015025354012",
      "owner": "JUAN PEREZ LOPEZ"
  }),
});

const data = await response.json();
console.log(data);

Ejemplo de Respuesta

JSON
{
  "result": {
    "id": "abc123def456",
    "transferId": "PAY20240115001",
    "trackingId": "PAY20240115001",
    "status": "in_process",
    "amount": 150.5,
    "fee": 3.48,
    "account": "012180015025354012",
    "bank": "BBVA MEXICO",
    "owner": "JUAN PEREZ LOPEZ",
    "description": "Pago de servicio",
    "numReference": "1234567",
    "createdAt": 1705286400000,
    "balance": 10000
  }
}

Errores comunes

ErrorCausa
Missing apiKeyNo se envió apiKey
Missing amountNo se envió amount
Invalid amountamount no es numérico válido
Amount must be greater than 0Monto es 0 o negativo
Minimum amount is $0.01 MXNMonto menor a un centavo
Missing transferIdNo se envió transferId
speiId must be maximum 24 characters long.transferId muy largo
speiId must be minimum 7 characters long.transferId muy corto
Missing accountNo se envió account
Missing ownerNo se envió owner
Missing bankCuenta no es CLABE y no se envió bank
Invalid Bank. Please check bank listBanco no existe en el catálogo
Invalid CLABE Interbancaria.CLABE con dígito verificador inválido
Invalid debit card. Please check structure.Tarjeta no pasa validación Luhn
Unrecognized bank prefix. Please verify the CLABE.Prefijo de CLABE no reconocido
No es posible realizar transferencias a cuentas internasCuenta destino es interna (prefijo 6461803766)
Numeric Reference must be maximum 7 digits.numReference excede 7 dígitos
Invalid apiKeyapiKey no encontrado
Insufficient balanceSaldo insuficiente
Duplicate transferIdYa existe una transferencia con ese ID

Validaciones: monto > 0 con mínimo $0.01 MXN; transferId 7–24 chars; CLABEs validan dígito verificador; tarjetas validan con Luhn; teléfonos de 10 dígitos se envían como DIMO. La comisión (fee) se calcula como transferFee × 1.16 (incluye 16% IVA).