POSThttps://api.veriko.mx/v1/validate

Validar manualmente una transferencia SPEI

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

Valida manualmente una transferencia SPEI para obtener el comprobante (CEP) de Banxico.

Se requieren los siguientes datos:

  • Fecha.
  • Monto.
  • Clave de rastreo / Referencia numérica.
  • Banco emisor.
  • Banco receptor.
  • Cuenta beneficiaria, o una lista de cuentas candidatas.

La cuenta beneficiaria (cuenta_beneficiaria) es obligatoria en esta operación, salvo que se envíe cuentas_candidatas. Si faltan las dos, la petición se rechaza con 422 preflight_failed y el error de campo cuenta_required: el servicio no la busca entre los beneficiarios guardados.

Cuando no se sabe a cuál de varias cuentas se hizo el pago, cuentas_candidatas sustituye a cuenta_beneficiaria: de 2 cuentas al máximo que admite el servicio (3 de forma predeterminada) en una sola validación y con una sola unidad de cuota. La consulta recorre las candidatas en el orden enviado y adopta la primera que coincide con la transferencia; esa cuenta vuelve completa en normalized_data.cuenta_beneficiaria y su posición en candidate_match. Si ninguna coincide, la respuesta es un estado HTTP 422 con el motivo en code. Las dos formas no pueden enviarse juntas (422 cuenta_y_candidatas_excluyentes) y una lista que no cumple se rechaza con 422 cuentas_candidatas_invalidas, las dos antes de consumir cuota.

El veredicto final (estado terminal) de una validación puede ser alguno de estos:

  • valid: El CEP de la transacción fue encontrado y validado.
  • not_found: El CEP de la transacción NO fue encontrado.
  • cep_unavailable: Banxico reconoció la transacción pero el CEP no está disponible por el momento.
  • returned: la transacción se liquidó y la institución beneficiaria la devolvió después. El CEP, si existe, se sigue entregando.
  • error: Error interno del servicio.

Un veredicto not_found, cep_unavailable o error no es necesariamente definitivo: el CEP puede tardar en ser publicado. En ese caso se puede hacer uso de los reintentos automáticos, enviando retry_policy en el cuerpo de la petición según la política de reintentos.

Parámetros
ParámetroUbicaciónTipoObligatorioDescripción
asyncquerystringopcional

Cuando es 1/true/yes: Procesa la validación en segundo plano y responde un estado HTTP 202 inmediato con validation_id. Sin el flag o con 0, la respuesta es síncrona y devuelve el resultado final.

Predeterminado: 0

Idempotency-Keyheaderstringopcional

Llave opcional que garantiza que la petición se procese exactamente una vez dentro de un TTL de 24 horas. Los reintentos con la misma llave y el mismo cuerpo devuelven la respuesta cacheada con la cabecera Idempotent-Replayed: true (sin re-disparar webhooks) y sin crear una nueva validación.

p. ej. 11111111-2222-3333-4444-555555555555
Parámetros
ParámetroTipoObligatorioDescripción
fechastring (date) (patrón, 10–10)obligatorio

Fecha de envío de la transferencia en formato ISO 8601 (YYYY-MM-DD). Con ella Banxico localiza el CEP, y puede diferir del día de operación que el CEP imprime (banxico_result.operationDate).

p. ej. 2025-03-15
montonumber (double) (> 0)obligatorio

Importe de la transferencia (en pesos mexicanos — MXN), mayor que cero y con hasta dos decimales. No se acepta en notación científica (por ejemplo 1e-5) cuando se envía como texto.

p. ej. 15000.5
clave_rastreostring (1–30)Obligatorio si no se envía referencia_numerica

Clave de rastreo de la transferencia (entre 1 a 30 caracteres). Acepta letras, números, espacios y los signos de puntuación que admite Banxico (como guiones, diagonales, puntos, comas, #, @ o _), pero no <, > ni la barra invertida. Se recorta y se le quitan caracteres invisibles de ancho cero antes de validarse, para que la misma clave copiada y pegada compare igual en toda la plataforma. Requerida si referencia_numerica no es enviada. Si vienen las dos, la consulta a Banxico se hace sólo por la clave.

p. ej. MXBA20250315001234
referencia_numericastring (patrón, 1–?)Obligatorio si no se envía clave_rastreo

Referencia numérica de la transferencia (entre 1 y 7 dígitos). Acepta solo números y espacios. Requerida si clave_rastreo no es enviada. Si viene clave_rastreo, la consulta se hace sólo por la clave, y una referencia mal formada no se rechaza: se ignora y se deja un aviso.

p. ej. 1234567
emisorstring (?–255)opcional

Nombre o código SPEI del banco emisor. Cuando falta o es incorrecto, la clave de rastreo puede aportarlo. Si aun así no puede resolverse, la respuesta es un estado HTTP 422.

p. ej. BANCO NACIONAL DE MEXICO
receptorstring (?–255)opcional

Nombre / código SPEI del banco receptor. Es opcional cuando el banco puede identificarse a partir de cuenta_beneficiaria. Si no puede resolverse, la respuesta será un estado HTTP 422.

p. ej. BBVA MEXICO
cuenta_beneficiariastring (patrón)opcional

Cuenta bancaria receptora de la transferencia. Es obligatoria cuando no se envía cuentas_candidatas: si faltan las dos, la respuesta es un estado HTTP 422 (con preflight_failed y el error de campo cuenta_required); si vienen las dos, un 422 con cuenta_y_candidatas_excluyentes. Puede ser CLABE (18 dígitos), tarjeta (16 dígitos) o celular DiMo (10 dígitos), y el tipo se identifica por la longitud de sus dígitos. Los espacios y guiones que separan grupos ("0121 8000 4412 345678") se ignoran automáticamente antes de contar la longitud. Para celular DiMo, si el banco receptor no puede resolverse por el campo receptor, por los beneficiarios registrados ni por el directorio de cuentas, la respuesta es un estado HTTP 422 (con bank_code_unresolvable_for_phone en el cuerpo).

p. ej. 012180004412345678
cuentas_candidatasarray<string> (elementos: 2–10, elementos únicos)opcional

Cuentas entre las que está la receptora de la transferencia, para cuando no se sabe cuál fue. Va en lugar de cuenta_beneficiaria: enviar las dos responde un estado HTTP 422 (con cuenta_y_candidatas_excluyentes en el cuerpo). Admite de 2 al máximo vigente de la plataforma, 3 por defecto y nunca más de 10; el 422 por exceso informa el máximo en meta.max. Cada cuenta es una CLABE (18 dígitos), una tarjeta (16) o un celular DiMo (10), con su dígito verificador válido y sin repetirse. Una lista que no cumple responde un 422 con cuentas_candidatas_invalidas, y señala en field_errors la posición que falló. Los dos errores ocurren antes de consumir cuota. Consume una sola unidad de cuota, lleve las cuentas que lleve. La consulta recorre las candidatas en el orden enviado y adopta la primera que coincide con la transferencia. La ganadora se publica completa en normalized_data.cuenta_beneficiaria, y candidate_match indica su posición. Si ninguna coincide, la respuesta es un estado HTTP 422 con el motivo en code (cuenta_unresolvable_after_probes cuando no hay un diagnóstico más preciso).

p. ej. ["012180004412345678","002010077777777771"]
receptor_participanteinteger (enumeración)opcional

Indica si el beneficiario de la transferencia es directamente la institución receptora del pago («Pago a Banco» en el CEP de Banxico) y no uno de sus cuentahabientes. 0 para una transferencia a un cuentahabiente (valor por defecto); 1 para pagos cuyo beneficiario es el banco —pago de tarjeta de crédito, de crédito o de servicios a la propia institución. Opcional: si se omite se asume 0.

Predeterminado: 0

p. ej. 0
retry_policyobjectopcional

Política de reintentos automáticos para esta validación. Si se omite, se aplica la política general configurada para el usuario. Los reintentos NO consumen cuota de validaciones.

enabledbooleanopcional

true cuando el ciclo de reintentos está activo. Si es false, los demás campos pueden ser ignorados.

p. ej. true
max_retriesinteger (≥ 1)opcional

Número máximo de reintentos automáticos. Una vez alcanzado, el ciclo pasa al estado terminal exhausted.

p. ej. 3
interval_secondsinteger (≥ 300, ≤ 86400)opcional

Segundos de espera entre cada reintento. Valores válidos: 300–86400 (5 min a 24h).

p. ej. 600
outcomesarray<string> (elementos: 1–?, elementos únicos)opcional

Resultados que originan un reintento. De forma predeterminada son not_found, cep_unavailable y error; la combinación ["not_found", "cep_unavailable"] excluye error.

p. ej. ["not_found","cep_unavailable","error"]
client_refstring (patrón, 1–64)opcional

Referencia propia que se devuelve tal cual en la validación, en los webhooks de validación y como filtro exacto de GET /v1/validations. Texto de 1 a 64 caracteres, sin saltos de línea ni emoji; se recorta antes de guardarse. Un valor que no cumple se rechaza con un estado HTTP 422 (con invalid_client_ref en el cuerpo). No debe contener datos personales.

p. ej. orden-4812
Petición
curl -X POST 'https://api.veriko.mx/v1/validate' \
  -H 'Authorization: Bearer veriko_••••' \
  -H 'Content-Type: application/json' \
  -d '{
    "fecha": "2025-03-15",
    "monto": 15000.5,
    "clave_rastreo": "MXBA20250315001234",
    "referencia_numerica": "1234567",
    "emisor": "BANCO NACIONAL DE MEXICO",
    "receptor": "BBVA MEXICO",
    "cuenta_beneficiaria": "012180004412345678"
  }'

Ejemplo en Python — próximamente.

Ejemplo en JavaScript — próximamente.

Ejemplo en PHP — próximamente.

Política de reintentos

POST /v1/validate

Política de reintentos de una validación: activación, límite, intervalo y resultados elegibles.

Intentos
—
Intervalo
5 min – 1 h × 24
Resultados elegibles
not_found, cep_unavailable, error

Esta operación admite una política de reintentos opcional.

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 respuestaPOST /v1/validate
CódigoClaseDescripciónCuerpo
2002xxVeredicto final de la validación. El campo status puede ser: valid, not_found, cep_unavailable, returned o error. Cuando la respuesta trae links.cep_pdf y links.cep_xml, el certificado CEP está disponible en GET /v1/validations/{id}/cep.Validation
2022xxValidación asíncrona aceptada. Se debe sondear GET /v1/validations/{id} hasta uno de los estados terminales (valid, not_found, cep_unavailable, invalid, returned, failed, error). meta.next_poll_after_seconds indica el intervalo recomendado para el primer sondeo.ValidationQueued
4004xxEl valor de la cabecera Idempotency-Key no cumple el formato permitido (alfanumérico + _ + -, 1–255 caracteres). ErrorResponse
4014xxSe requiere autenticación o las credenciales son inválidasErrorResponse
4094xxUna petición con la misma Idempotency-Key aún se está procesando. Se debe reintentar después de los segundos que indica la cabecera Retry-After.ErrorResponse
4134xxEl cuerpo de la petición supera el tamaño máximo admitido (body_too_large).ErrorResponse
4224xxFalló la validación de la petición. Códigos típicos: clave_or_ref_required, required (fecha/monto), invalid_date, invalid_amount, invalid_account_format, invalid_account_length, invalid_clabe_checksum, invalid_card_luhn, invalid_bank_code (emisor/receptor no reconocidos), intra_bank_no_cep (emisor y receptor son el mismo banco), invalid_field_type (un campo que debe ser texto llegó como arreglo u objeto — p. ej. emisor, receptor o referencia_numerica), invalid_receptor_participante, retry_policy_invalid, retry_pending_cap_exceeded, cuenta_y_candidatas_excluyentes (cuenta_beneficiaria y cuentas_candidatas juntas), cuentas_candidatas_invalidas (la lista no tiene de 2 al máximo vigente de cuentas válidas y distintas) y cuenta_unresolvable_after_probes (ninguna candidata coincidió con la transferencia). También se emite cuando se reutiliza Idempotency-Key con un cuerpo distinto (idempotency_key_reused). Cuando los datos se contradicen entre sí, la petición se rechaza antes de consultar a Banxico con preflight_failed y el detalle por campo en errors (clabe_receptor_mismatch y tarjeta_receptor_mismatch: la cuenta pertenece a otro banco que el receptor; cuenta_invalid_luhn; clave_fecha_incoherente; clave_longitud_invalida). También se rechaza con preflight_failed cuando falta cuenta_beneficiaria (cuenta_required). Ningún rechazo preflight_failed de esta ruta consume cuota, sea por datos que se contradicen, por un campo mal formado o por una cuenta ausente.ErrorResponse
4294xxLímite de tasa excedidoErrorResponse
5035xxBanxico no estuvo disponible (banxico_rate_limit_exhausted) o no fue posible iniciar la validación asíncrona (dispatch_failed). La petición puede repetirse después de unos minutos.ErrorResponse
Cabeceras de respuesta200
CabeceraTipoDescripción
Idempotent-ReplayedstringPresente solo cuando la petición incluyó la cabecera Idempotency-Key. false para respuestas frescas; true cuando la respuesta es reutilizada desde el caché de idempotencia, con una vigencia de 24 horas por combinación de cuenta, endpoint y clave.
Errores de POST /v1/validate
CódigoClaveEjemplo
400invalid_idempotency_key

Formato de Idempotency-Key inválido. Se admiten A-Z a-z 0-9 _ - (de 1 a 255 caracteres).

Envelope
meta.request_id
3c4d5e6f7a8bb8a7f6e5d4c3
401unauthorized

Credenciales de autenticación ausentes o inválidas.

Envelope
meta.request_id
c4d5e6f7a8b99b8a7f6e5d4c
409idempotency_key_in_progress

Una petición con esta Idempotency-Key sigue en proceso.

Envelope
meta.request_id
2b3c4d5e6f7aa7f6e5d4c3b2
Cabeceras de respuesta
  • Retry-After: integer — Segundos a esperar antes de reintentar
413body_too_large

El cuerpo de la petición es demasiado grande.

Envelope
meta.request_id
1a2b3c4d5e6ff6e5d4c3b2a1
429rate_limit_exceeded

Límite de peticiones excedido. Inténtalo de nuevo en 45 segundos.

Envelope
meta.request_id
f7a8b9c0d1e22e1d0c9b8a7f
Cabeceras de respuesta
  • Retry-After: integer — Segundos a esperar antes de reintentar. Coincide con la ventana de rate-limit del endpoint (típicamente 60s para listas, 1-5s para operaciones idempotentes en vuelo).
  • X-RateLimit-Limit: integer — Límite de solicitudes configurado para este bucket. Se emite en cada 429 y, en la API autenticada, también en las respuestas correctas, donde es el tope por clave del plan de la cuenta.
  • X-RateLimit-Remaining: integer — Solicitudes restantes en la ventana actual. Siempre 0 en el momento del 429; en una respuesta correcta de la API autenticada es lo que queda del tope por clave.
  • X-RateLimit-Reset: integer — Unix epoch absoluto (segundos) en que se reinicia la ventana. Se emite en cada 429, junto con Retry-After, y en las respuestas correctas de la API autenticada. Puede existir sobreescritura por endpoint (p. ej. `rate_limited_login`).