Flujo de validación
Flujos de validación — ¿Qué son?
En Veriko, definimos "flujo de validación" al proceso que toma los datos de una transferencia SPEI (en texto o imagen) y busca si Banxico emitió un CEP o un registro de transacción con esos datos.
Una validación siempre finaliza con un "Estado terminal" (ver más abajo).
Validación manual vs desde imagen (OCR)
- Manual (
POST /v1/validate): Debes enviar los siguientes datos en texto plano:clave_rastreo— Opcional si se envíareferencia_numerica.cuenta_beneficiariamontofechaemisorreceptor— Opcional sicuenta_beneficiariaes Clabe/Tarjeta.receptor_participante— Opcional.0para cuentahabiente (por defecto) o1cuando el beneficiario es la propia institución receptora («Pago a Banco»).
Guía completa en: Validar una transferencia SPEI (manual)
- Desde imagen (OCR) (
POST /v1/validate-ocr): Debes enviar una imagen (Base64) o una URL (https):image— Opcional si se envíaimage_url.image_url— Opcional si se envíaimage.cuenta_beneficiaria,banco_emisor,banco_receptor— Opcionales. Solo si no vienen en la imagen.
Guía completa en: Validar una transferencia SPEI desde una imagen (OCR)
Sync vs async
Por default ambos endpoints son síncronos: Es decir, el sistema responde la petición hasta que Banxico responde (la mediana es 3-5s; el timeout recomendado es de 30s).
Si necesitas cerrar la conexión antes o configurar un timeout menor, simplemente agrega a la URL ?async=1 como parámetro GET. Entonces:
- El endpoint al instante devuelve
202con unvalidation_id, además de unETagymeta.next_poll_after_seconds. - El sistema encola y comienza a procesar la validación.
- Puedes sondear
GET /v1/validations/{id}cada cierto tiempo para recuperar el estado de la validación (enviando preferentementeIf-None-Matchcon el último ETag visto). Mientras la fila no transicione, el servidor responde304 Not Modified; cuando cambia destatusel ETag cambia y el cuerpo del sondeo trae el resultado final.
Detalle completo en: Validaciones async.
Estados terminales
Cada fila puede resolverse en uno de estos 7 valores:
valid— CEP encontrado. Es el único veredicto que obtiene el CEP cuenta como "verificado" para tus finanzas (ver CEP y Finanzas).not_found— No hay CEP ni transacción encontrados con esos datos.cep_unavailable— Se encontró la transacción no el CEP (típicamente todavía no se liquidó o hay tardanzas en el sistema bancario).returned— El pago se liquidó y la institución beneficiaria lo devolvió después. El CEP, si existe, se sigue entregando.invalid— Banxico respondió de una forma que el servicio no reconoce; no es un problema de los datos enviados.failed— La validación se detuvo por un rechazo de los datos enviados; el motivo viaja enerror_code.error— Fallo del servicio o de Banxico durante el procesamiento; el motivo viaja enerror_code.
Revisión posterior de un valid
Un valid es el veredicto del momento de la consulta. Banxico puede reportar la devolución del pago horas o días después; entonces la validación pasa de valid a returned, conserva su CEP y emite el webhook validation.returned. Hay dos formas de detectarlo:
- Bajo demanda:
POST /v1/validations/{id}/recheckconsulta sólo el estado del pago. No consume cuota, admite una consulta cada 10 minutos por validación y sólo responde durante las primeras 72 horas. - Automática: el servicio vuelve a revisar las validaciones
validde las últimas 72 horas, a la hora, a las 6 horas, al día y a los 3 días de edad.
Detalle completo en: CEP.
Conservar o borrar el comprobante
El archivo del comprobante se conserva de forma predeterminada. retain_image=false en POST /v1/validate-ocr lo borra cuando la validación llega a un estado terminal y deja el veredicto y los datos extraídos. Para borrar de forma definitiva una validación y todo lo que dejó, POST /v1/validations/{id}/purge/prepare y POST /v1/validations/{id}/purge/execute la dejan como una lápida: sin archivo, sin CEP y sin los datos extraídos, con su veredicto, sus fechas y su monto.
Detalle completo en: Retención de comprobantes y datos.
Reintentos
Una fila terminal puede entrar a un ciclo de reintentos cuando su outcome (estado terminal) es uno de estos:
not_foundcep_unavailableerror
La política por omisión de la cuenta se establece con PUT /v1/users/me/retry-policy, y una validación concreta se ajusta con PUT /v1/validations/{id}/retry-policy. Define enabled, max_retries, interval_seconds y los outcomes específicos de la lista.
Detalle completo en: Política de reintentos.
Idempotency-Key
El header Idempotency-Key es opcional. Se maneja de esta forma:
- Nueva key → Se procesa la petición normalmente, se persiste la respuesta para replays.
- Mismo body con key repetida → Endpoint repite la respuesta guardada, con su mismo código de estado y la cabecera
Idempotent-Replayed: true. - Body distinto con key repetida → Endpoint responde
422 idempotency_key_reused. - Misma key todavía procesando → Endpoint responde
409 idempotency_key_in_progress.
Detalle completo en: Idempotencia.