GEThttps://api.veriko.mx/v1/validations/{id}

Obtener una validación

Audiencia
public
Autenticación
API key
Permiso
validations:read
Guía de uso →

Devuelve el registro completo de una validación, con su veredicto, los datos normalizados y el estado de los reintentos.

El recorrido desde la solicitud hasta el veredicto está descrito en el flujo de validación.

Parámetros
ParámetroUbicaciónTipoObligatorioDescripción
id*pathstring (uuid)obligatorio

Identificador (UUID) de la validación

If-None-Matchheaderstringopcional

ETag recibido en una respuesta anterior, tal cual (débil W/"…" en una validación, fuerte en los catálogos públicos). Si el recurso no ha cambiado, el server responde 304 Not Modified (sin cuerpo) y evita mandar los datos de nuevo.

p. ej. "9b2d4c7e1f0a3b6d8e5c2a7f4b1d9e0c3a6f8b2d"
Petición
curl -X GET 'https://api.veriko.mx/v1/validations/{id}' \
  -H 'Authorization: Bearer veriko_••••'

Ejemplo en Python — próximamente.

Ejemplo en JavaScript — próximamente.

Ejemplo en PHP — próximamente.

Respuesta 2xxValidation
CampoTipoDescripción
type*string

Tipo de recurso JSON:API. Siempre validation.

p. ej. validation
id*string (uuid)

Identificador único de la validación (UUID v4).

p. ej. 3fa85f64-5717-4562-b3fc-2c963f66afa6
attributes*object

Datos canónicos de la validación.

validation_typestring

Modalidad de validación — direct: Captura manual de los campos; ocr: Lectura de la imagen del comprobante.

p. ej. direct
is_playgroundboolean

true cuando el resultado proviene de una simulación del banco de pruebas (Playground). La simulación se ejecuta sin llamadas a Banxico, sin consumo de cuota, sin persistencia y sin emisión de webhooks o notificaciones.

p. ej. false
statusstring

Estado del ciclo de vida — queued: Pendiente de procesamiento; processing: En proceso; valid: El CEP fue encontrado y cuadra; not_found: Banxico no encuentra la operación; cep_unavailable: Banxico reconoce la transacción pero el CEP no está disponible; invalid: Banxico no devolvió un veredicto reconocible; returned: la operación se liquidó y después se devolvió; failed: La validación se detuvo por un problema en los datos enviados; error: La validación se detuvo por un fallo del servicio.

p. ej. valid
banxico_statusstring | nullanulable

Veredicto reportado por Banxico. Puede ser: valid, not_found, cep_unavailable, invalid, returned o error. Permanece pending mientras no exista un veredicto de Banxico. returned significa que la operación se liquidó y la institución beneficiaria la devolvió después — el CEP, si existe, se sigue entregando. Un valid no es definitivo: es el veredicto del momento de la consulta, y pasa a returned cuando Banxico reporta la devolución en una revisión posterior, que se pide con POST /v1/validations/{id}/recheck o que el servicio hace solo durante las primeras 72 horas (se emite el webhook validation.returned). Solo toma error cuando la petición llegó a Banxico y el servicio falló; error_code identifica la causa.

p. ej. valid
processing_time_msinteger | nullanulable

Tiempo (en milisegundos) empleados en procesar la validación.

p. ej. 1320
request_dataobject

Copia de los campos de la petición original. fecha conserva la fecha de envío tal como se envió, aunque Banxico haya encontrado el pago con otra (banxico_result._fecha).

client_refstring

Referencia propia que se envió en la petición (client_ref), devuelta tal cual. Solo aparece cuando la petición la incluyó. Sirve para relacionar la validación con un pedido propio, y GET /v1/validations la acepta como filtro exacto. No debe contener datos personales.

p. ej. orden-4812
created_atstring (date-time)

Fecha y hora, en ISO 8601 UTC, de creación de la validación.

p. ej. 2025-03-15T14:22:10Z
completed_atstring | nullanulable

Fecha y hora de la finalización, en ISO 8601 UTC. null mientras no haya terminado.

p. ej. 2025-03-15T14:22:11Z
enqueued_atstring | nullanulable

Fecha y hora, en ISO 8601 UTC, de entrada a la cola.

p. ej. 2026-04-30T10:15:00Z
processing_started_atstring | nullanulable

Fecha y hora, en ISO 8601 UTC, de inicio del procesamiento.

p. ej. 2026-04-30T10:15:00Z
expires_atstring | nullanulable

Fecha y hora, en ISO 8601 UTC, de expiración para validaciones en cola. Tras esta marca, la validación pasa a error con error_code ttl_expired.

p. ej. 2026-04-30T10:15:00Z
etag_versioninteger | nullanulable

Versión incremental (usada con If-None-Match en consultas condicionales).

p. ej. 1
image_pathstring | nullanulable

Referencia relativa del comprobante, imagen o PDF (solo si validation_type es del tipo ocr). No se publica cuando el archivo no se conserva: ver image_retained.

p. ej. comprobantes/3fa85f64-5717-4562-b3fc-2c963f66afa6.jpg
image_retainedboolean

true cuando la plataforma conserva el archivo del comprobante; false cuando no, porque la petición envió retain_image=false o porque la validación se purgó. Solo aparece en las validaciones de tipo ocr. Con false, GET /v1/validations/{id}/image responde un estado HTTP 410 (con image_not_retained o validation_purged en el cuerpo).

p. ej. true
purged_atstring (date-time)

Fecha y hora, en ISO 8601 UTC, en que la validación se purgó con POST /v1/validations/{id}/purge/execute. Solo aparece en una validación purgada, que queda como una lápida. Una lápida conserva id, validation_type, status, banxico_status, las fechas, processing_time_ms, error_code y el monto en normalized_data.monto. No conserva el archivo, el CEP, request_data, ocr_result ni banxico_result, y sus recursos derivados responden un estado HTTP 410 (con validation_purged en el cuerpo).

p. ej. 2026-10-02T09:30:00Z
ocr_resultobject | nullanulable

Campos extraídos del comprobante (solo si validation_type es del tipo ocr). extraction_source vale cep_pdf cuando el comprobante era el CEP de Banxico en PDF y sus datos se leyeron de su texto, sin OCR. comprobantes_detectados es el número de comprobantes que se encontraron en un PDF.

ocr_confidencenumber | nullanulable

Puntaje de la extracción OCR 0–1 (solo si validation_type es del tipo ocr).

p. ej. 0.94
normalized_dataobject | nullanulable

Campos normalizados después de la extracción OCR (si validation_type es del tipo ocr), o la cuenta ganadora en cuenta_beneficiaria cuando una validación directa envió cuentas_candidatas. Una lápida conserva aquí solo el monto.

normalization_warningsarray | nullanulable

Advertencias de normalización presentes. Permiten explicar un resultado not_found inesperado.

duplicate_ofobject

Validación previa que ya había confirmado esta misma transferencia en la misma cuenta. Solo aparece cuando existe una validación valid, no retirada, con la misma clave de rastreo; nunca apunta a una validación de otra cuenta. Es la forma estructurada del aviso que también se añade a normalization_warnings. No cambia el veredicto: la validación se consulta y se cobra igual.

id*string (uuid)

Identificador de la validación previa.

p. ej. 3fa85f64-5717-4562-b3fc-2c963f66afa6
created_at*string (date-time)

Fecha y hora, en ISO 8601 UTC, de creación de la validación previa.

p. ej. 2026-10-01T15:04:05Z
account_conflictobject

Conflicto entre la cuenta enviada y la que muestra la imagen. Solo aparece en validaciones de tipo ocr, cuando se envió cuenta_beneficiaria y la imagen muestra otra cuenta completa de la misma longitud, válida y con confianza suficiente, o una cuenta enmascarada cuyos dígitos finales visibles (3 o más) no son el final de la cuenta enviada. Prevalece la cuenta enviada, que es la que se consulta en Banxico: el campo no cambia el veredicto. Si el pago fue a la cuenta de la imagen, lo esperable es un not_found. Solo trae los últimos 4 dígitos de cada cuenta, y el conflicto también se añade a normalization_warnings. Con una cuenta enmascarada, read_last4 trae los dígitos finales que el propio comprobante muestra (3 o 4), nunca más.

sent_last4*string

Últimos 4 dígitos de la cuenta enviada en cuenta_beneficiaria.

p. ej. 5678
read_last4*string

Últimos 4 dígitos de la cuenta que muestra la imagen (los visibles, 3 o 4, si está enmascarada).

p. ej. 9012
candidate_matchobject

Cuál de las cuentas_candidatas enviadas ganó. Solo aparece cuando la petición llevó esa lista y una de las cuentas coincidió con la transferencia. La cuenta completa va en normalized_data.cuenta_beneficiaria; este objeto indica qué posición de la lista es, para correlacionarla con la entidad propia del integrador sin comparar cuentas. No cambia el veredicto.

index*integer

Posición (desde 0) de la cuenta ganadora en el arreglo cuentas_candidatas, tal como se envió.

p. ej. 1
account_last4*string

Últimos 4 dígitos de la cuenta ganadora.

p. ej. 7771
is_maskedboolean | nullanulable

Indica si la cuenta beneficiaria viene enmascarada en el comprobante cargado, sea una CLABE, una tarjeta o un celular. Solo se incluye cuando vale true y solo si validation_type es del tipo ocr.

banxico_resultobject | nullanulable

Datos devueltos por Banxico. Las propiedades tipadas abajo son las 20 que declara el esquema oficial del complemento SPEI. _ocr_correction conserva los campos corregidos, su lectura original (requested), el valor consultado (used) y la confirmación (confirmed_by). status_query indica una hipótesis confirmada por la consulta de estado; cep indica que también se obtuvo el comprobante. La consulta de estado por sí sola no verifica una transferencia. _cep_upload aparece cuando el comprobante subido era el CEP en PDF y Banxico confirmó el pago. authenticated es true cuando su sello y su cadena original coinciden con los del CEP oficial; con false, differing_fields lista los campos que difieren y normalization_warnings lo avisa. El veredicto sigue siendo el de Banxico. _payment_status es el estado oficial del pago, tal como lo dio Banxico la última vez que se le preguntó: code (liquidado, en_proceso, cancelado, rechazado, en_proceso_devolucion, devuelto o desconocido), label, settled, reversed y checked_at (ISO 8601 UTC). Su ausencia significa que no se pudo saber, nunca que el pago esté liquidado. Se actualiza en cada revisión posterior, y con devuelto o en_proceso_devolucion la validación pasa a returned. _fecha aparece cuando Banxico no encontró el pago con la fecha enviada y sí con otra. used es la fecha con la que se encontró, requested es la fecha con la que se consultó primero y reason es el motivo por el que se probó used. Valores de reason: clave_embedded_date: La clave de rastreo incrusta otra fecha, a un día hábil SPEI o menos de la enviada; cutoff_18h: La clave no incrusta fecha y el comprobante indica una hora cercana al corte de las 18:00, así que se probó el día siguiente; dia_operacion: La clave incrusta la fecha enviada, porque el comprobante trae la de operación, y se probó un día anterior hasta el día hábil previo. El veredicto sigue siendo el de Banxico, y request_data.fecha conserva la fecha enviada.

operationDatestring

Día hábil SPEI que Banxico asignó a la operación, tal como lo reporta el CEP (YYYY-MM-DD), en hora del centro de México. Puede diferir de la fecha de envío: lo enviado a partir de las 18:00, en sábado, en domingo o en un día inhábil opera el siguiente día hábil.

p. ej. 2025-03-15
processingTimestring

Hora de la operación tal como la reporta el CEP (HH:MM:SS), en hora del centro de México y no en UTC.

p. ej. 14:22:10
speiKeystring

Clave de la operación dentro del sistema SPEI (ClaveSPEI del CEP). Distinta de la clave de rastreo.

trackingKeystring

Clave de rastreo de la operación SPEI — la misma que se envía en la petición de validación.

p. ej. MBAN01002503151422ABCDEF
digitalSignaturestring

Sello digital del CEP (sello) — la firma que Banxico calcula sobre la operación.

certificateNumberstring

Número del certificado digital que Banxico usó para sellar el CEP.

cadenaCdastring

Cadena original de la operación (cadenaCDA): los 47 campos que la institución envió a Banxico, separados por |, incluidas ambas fechas (operación y captura) y el tipo de pago. Permite auditar el CEP sin volver a pedirlo.

senderBankstring

Banco emisor de la operación, tal como lo identifica el CEP.

p. ej. BBVA
senderNamestring

Nombre del ordenante de la operación, tal como lo reporta el CEP.

senderAccountTypestring

Tipo de cuenta del ordenante (por ejemplo, CLABE o tarjeta), tal como lo reporta el CEP.

senderAccountstring

Cuenta del ordenante, tal como la reporta el CEP, sin enmascarar en este recurso (consulta privada, propia del dueño de la validación).

senderRfcstring

RFC del ordenante, tal como lo reporta el CEP.

receiverBankstring

Banco receptor de la operación, tal como lo identifica el CEP.

p. ej. STP
beneficiaryNamestring

Nombre del beneficiario de la operación, tal como lo reporta el CEP.

beneficiaryAccountTypestring

Tipo de cuenta del beneficiario (por ejemplo, CLABE o tarjeta), tal como lo reporta el CEP.

beneficiaryAccountstring

Cuenta del beneficiario, tal como la reporta el CEP, sin enmascarar en este recurso (consulta privada, propia del dueño de la validación). Los webhooks salientes sí la enmascaran a los últimos 4 dígitos en banxico_confirmed.beneficiaryAccount (ver la guía de webhooks).

beneficiaryRfcstring

RFC del beneficiario, tal como lo reporta el CEP.

amountnumber (float)

Monto de la operación que Banxico confirmó por el CEP, en pesos.

p. ej. 1500
ivanumber (float)

IVA de la operación reportado por el CEP, en pesos.

paymentConceptstring

Concepto de pago de la operación, tal como lo reporta el CEP.

error_messagestring | nullanulable

Mensaje legible del error terminal (si aplica).

p. ej. Banxico no respondió tras tres intentos.
error_codeValidationErrorCode | null

Código estable del error terminal (si aplica). Tras not_found, el diagnóstico puede indicar not_found_identity (fecha, criterio o bancos), not_found_account (cuenta), not_found_amount (importe), not_found_account_and_amount (ambos) o not_found_account_or_amount (operación encontrada, sin aislar el campo). Un diagnóstico no cambia el veredicto ni acredita el pago. Sin respuesta concluyente, el campo queda en null.

batch_idinteger | nullanulable

Identificador del trabajo de importación masiva (si aplica).

p. ej. 318
batch_positioninteger | nullanulable

Posición dentro del trabajo (comenzando en 1).

p. ej. 12
retry_stateobject

Estado completo del ciclo de reintentos (siempre presente). Si la validación no tiene reintentos activos, enabled es false y los campos de política son null. Las validaciones de importación masiva siempre tienen enabled igual a false.

enabledboolean

true cuando la validación tiene reintentos configurados, aunque su ciclo ya haya terminado (terminal_state).

p. ej. true
max_retriesinteger | nullanulable

Número máximo de reintentos configurado; null cuando enabled es false.

p. ej. 3
interval_secondsinteger | nullanulable

Intervalo en segundos entre reintentos, de 300 a 86400; null cuando enabled es false.

p. ej. 600
outcomesarray | nullanulable

Resultados que originan un reintento: not_found, cep_unavailable y error; null cuando enabled es false.

p. ej. ["not_found","cep_unavailable","error"]
attempts_completedinteger

Cantidad de reintentos completados hasta el momento.

p. ej. 1
next_attempt_atTimestampUTC | null

Fecha del próximo reintento; null cuando no hay uno programado.

resolved_atTimestampUTC | null

Fecha en que un reintento obtuvo valid; null mientras no ocurra.

exhausted_atTimestampUTC | null

Fecha en que se agotaron los intentos; null mientras no ocurra.

cancelled_atTimestampUTC | null

Fecha de cancelación del ciclo; null mientras no ocurra.

terminal_statestring | nullanulable

Situación del ciclo: pending, resolved, exhausted o cancelled. Es null cuando la validación no tiene un ciclo de reintentos.

p. ej. pending
linksobject

Enlaces relacionados (JSON:API links).

selfstring

Enlace canónico al detalle de la validación.

p. ej. /v1/validations/3fa85f64-5717-4562-b3fc-2c963f66afa6
cep_xmlstring | nullanulable

URL del CEP en formato XML. Solo aparece cuando banxico_status es valid, o es returned con comprobante, y la validación no se purgó; si no, se omite el objeto links.

p. ej. /v1/validations/a1b2c3d4-e5f6-4890-abcd-ef0123456789/cep?format=xml
cep_pdfstring | nullanulable

URL del CEP en formato PDF. Solo aparece cuando banxico_status es valid, o es returned con comprobante, y la validación no se purgó; si no, se omite el objeto links.

p. ej. /v1/validations/a1b2c3d4-e5f6-4890-abcd-ef0123456789/cep?format=pdf
Códigos de respuestaGET /v1/validations/{id}
CódigoClaseDescripciónCuerpo
2002xxDetalle de la validación. En estados pre-terminales (queued, processing) incluye la cabecera Retry-After y el campo meta.next_poll_after_seconds del cuerpo.Validation
3043xxEl etag_version y status no cambiaron desde el If-None-Match enviado. La respuesta no tiene cuerpo. Sin cuerpo
4014xxSe requiere autenticación o las credenciales son inválidasErrorResponse
4034xxPermisos insuficientesErrorResponse
4044xxValidación no encontrada o ajena a la cuenta de usuario (not_found).ErrorResponse
4224xxUUID inválido en la ruta (invalid_uuid).ErrorResponse
Cabeceras de respuesta200
CabeceraTipoDescripción
ETagstringETag débil que cambia en cada transición de estado. Sigue el formato W/"{etag_version}-{status}" y puede incluirse en If-None-Match para recibir un estado HTTP 304 si nada ha cambiado.
Retry-AfterintegerSegundos de espera antes de la siguiente petición. Solo está presente en queued y processing.
Errores de GET /v1/validations/{id}
CódigoClaveEjemplo
401unauthorized

Credenciales de autenticación ausentes o inválidas.

Envelope
meta.request_id
c4d5e6f7a8b99b8a7f6e5d4c
403permission_denied

No tienes permiso para acceder a este recurso.

Envelope
meta.request_id
d5e6f7a8b9c00c9b8a7f6e5d