Skip to main content
La decisión ya la tomó con status, message, id y frontBackTemplateValidation. Esta página explica el resto: qué trae cada bloque, cómo leer las validaciones cruzadas y qué particularidades del contrato rompen deserializadores estrictos.

Campos de primer nivel

Dentro de front y back

Las validaciones del dorso

Los dos 200 que no aprueban

Foto sin documento legible

Trátelo como documento ilegible y pida otra captura. Note tres particularidades de esta variante: message cambia, mrz.expected es null (template desconocido), y el arreglo events llega aunque no se haya pedido.

Dorso de otro documento

Esta es la trampa más cara de esta API. Un documento armado con el frente de una persona y el dorso de otra pasa cualquier control que decida sobre el código HTTP o el message —acá los dos dicen «éxito»—. La detección está solo en back.frontBackTemplateValidation (y su eco legado backIsTheSameIdTypeThatFront: 1). Prográmelo como condición obligatoria y pruébelo antes de salir. Los campos leídos del dorso ajeno son basura coherente: el OCR leyó algo del documento equivocado, por eso el análisis «funcionó».

crossMatchConfidence: la consistencia entre fuentes

Hasta tres bloques —mrzVersusViz, barcodeVersusViz, barcodeVersusMrz—, cada uno con porcentajes de similitud 0–100 por campo; las fechas se desglosan en día/mes/año.
En el ejemplo, el MRZ coincide al 100 % con la VIZ salvo un dígito del número de trámite (88.9 — un carácter dudoso del OCR).
El servicio no impone umbral: la política de aceptación es suya. Decida por campo según qué datos alimentan su proceso. Y en un /front sin nada que cruzar, crossMatchConfidence llega como {} — es normal, no un error.

El antispoofing es informativo

Con antiSpoofingDocument: true la respuesta agrega security; con antiSpoofingFaceInDocument: true, face.notSpoofingConfidence y face.isSpoofing:
Un isSpoofing: true no cambia el código de la respuesta — llega igualmente con 200 / "Operation end successfully.". El servicio no rechaza por usted: su código debe leer estos campos y aplicar su política. Y si el análisis falló, security llega vacío ({}): la ausencia de isSpoofing significa «no evaluado», nunca «no es fraude».

Particularidades que rompen deserializadores

  1. mrz.expected es tri-estado (true | false | null). Tipe como opcional/nullable.
  2. mrz.extras trae números y booleanos como cadenas ("100", "True"). No los parsee como number/bool sin conversión.
  3. barcode.result es un arreglo de un elemento, igual que front/back en GET /{templateId}/images.
  4. isNativePersonDocument es tri-estado. null = indeterminado.
  5. Las claves de viz varían por template y pueden faltar o llegar vacías. No asuma un esquema fijo: use /{templateId}/details como contrato por documento.
  6. No dependa del orden de las claves JSON — varía entre las dos variantes de 200.

Errores

Códigos de error, el 422 que devuelve su solicitud completa y cuáles se reintentan.
Última modificación el 9 de septiembre de 2026