Skip to main content

Cómo usarlo

Agrega el header X-Sandbox-Scenario: <escenario> a cualquier llamada de cash-in o cash-out. Sin el header, el sandbox usa el escenario success por defecto.
La mayoría de los escenarios controla el webhook asíncrono: la respuesta HTTP es 201 Created con status: PENDING, y el resultado final llega en el webhook. Las excepciones son timeout y service_unavailable, que fallan en la respuesta HTTP síncrona.

Escenarios disponibles

Los valores canónicos de escenario son: success, pending_long, rejected, returned, insufficient_funds, bad_clabe, timeout, service_unavailable.

Escenarios de resultado asíncrono

Devuelven 201 PENDING de forma síncrona; el estado final llega vía webhook en segundos.
Los eventos *.returned se entregan en el webhook del tipo refund_in/refund_out (o all), no en el cash_in/cash_out. Para probar los escenarios returned y bad_clabe, registra también esos webhooks — consulta los tipos de webhook.

Escenarios de error síncrono

Fallan en la propia respuesta HTTP — no se envía ningún webhook.
Restricciones de cash-in: insufficient_funds y bad_clabe no aplican a cash-in (no hay saldo que debitar, y la CLABE de depósito la genera el sistema). Enviar cualquiera de ellos en un cash-in devuelve 400 con código SCENARIO_NOT_APPLICABLE.

Ejemplo: webhook de éxito

Escenario success en un cash-out — el webhook cash_out recibe:

Ejemplo: webhook de rechazo

Escenario insufficient_funds — el webhook cash_out recibe:
En status: REJECTED, los campos de comprobante (reference, voucher) vienen null — la red SPEI nunca confirmó la transacción. El formato completo del payload está en Visión General de Webhooks.

Restricciones

  • El header X-Sandbox-Scenario funciona exclusivamente en cuentas sandbox.
  • Las cuentas de producción que envíen el header reciben:

Buenas prácticas

  1. Prueba todos los escenarios antes de salir a producción — implementa el manejo de los cuatro status (LIQUIDATED, PENDING, REJECTED, RETURNED).
  2. Enruta por el campo event*.settled, *.rejected y *.returned exigen acciones diferentes en tu sistema.
  3. Prueba con retraso — usa pending_long para verificar que tu sistema maneja bien la liquidación lenta.
  4. Idempotencia — deduplica por el header x-event-id; el mismo evento puede reentregarse.