---
title: Crear proceso
description: Cree un proceso de verificación enviando la imagen capturada directamente. Devuelve un resultado sincrónico.
canonical: https://developer.unico.io/es/dual-api/developers/api-reference/api/post-processes
locale: es
generated_by: markdown-export
---

- [/es/](/es/)
- [Referencia de API](/es/dual-api/developers/api-reference/)
- [API](/es/dual-api/developers/api-reference/api/)
- Create Process

**En esta página# Crear proceso

Este endpoint maneja tres productos que comparten la misma ruta pero difieren en parámetros del cuerpo, capacidades y campos de respuesta:

**Registro** - valida quién es el usuario comparando su rostro con la base de identidad de Unico (`subject.duiType` + `subject.code` requerido).
**Transaccional** - verifica que es la misma persona de un proceso anterior comparando rostro con rostro (`referenceProcessId` O array `references` con selfie / ID de proceso requerido).
**Cardholder Verification** - confirma que una tarjeta pertenece a su titular declarado, sin ninguna captura de selfie (`subject.code` + `card` requerido). Opcionalmente reutiliza un proceso previamente validado mediante `referenceProcessId` para activar la validación de reutilización; sin él, la respuesta usa por defecto el resultado `unsure`. Consulte la capacidad [Cardholder Verification](/es/capabilities/cardholder-verification).

El producto activo se determina por la **APIKEY** enviada en el encabezado de la solicitud.
Para el flujo de integración completo, consulte [Descripción general de la API](/es/dual-api/developers/api-reference/api/).
### Endpoint​

EntornoURL**Producción**`POST https://api.id.unico.app/processes/v1`**Sandbox**`POST https://api.id.uat.unico.app/processes/v1`
### Solicitud​

Encabezados
EncabezadoValor`Authorization``Bearer <access_token>` (consulte [Autenticación](/es/dual-api/developers/api-reference/authentication))`APIKEY`Clave API provisionada: define el producto activo y las capacidades habilitadas.`Content-Type``application/json`
Parámetros del cuerpo
RegistroTransaccionalCardholder VerificationCampoTipoRequeridoDescripción`subject.duiType`integersíIdentificador del tipo de documento. Consulte [valores de `duiType`](#duitype-values) a continuación.`subject.code`stringsíValor del identificador según lo definido por `subject.duiType`. Sin puntos ni guiones.`subject.name`stringnoNombre completo.`subject.gender`stringno`M` o `F`.`subject.birthDate`string (ISO 8601)noFecha de nacimiento (`YYYY-MM-DD`).`subject.email`stringnoDirección de correo electrónico.`subject.phone`stringnoNúmero de teléfono E.164.`subject.clientReference`stringcondicionalIdentificador único del usuario en su sistema. **Obligatorio para la capacidad [Multi Cuentas](/es/capabilities/multi-accounts).** Único en su base, máximo de 256 caracteres, sin espacios.`useCase`stringnoContexto de la operación, por ejemplo, `Onboarding`.`subsidiaryId`stringnoID de sucursal — requerido solo si existen múltiples sucursales.`imageBase64`stringsíSelfie capturado por su front-end, en base64.CampoTipoRequeridoDescripción`references`arraycondicionalEntradas de referencia para flujos de Validación 1:1. Cada elemento contiene `referenceType` (`REFERENCE_TYPE_IMAGE_BASE64` o `REFERENCE_TYPE_PROCESS_ID`) y `referenceContent` (imagen codificada en base64 o UUID del proceso).`referenceProcessId`stringcondicional**Obsoleto.** Use `references` en su lugar. ID del proceso de Registro de referencia para comparar. Si la referencia es un proceso by-Unico, use `authenticationInfo.authenticationId`.`imageBase64`stringsíSelfie capturado por su front-end, en base64.`subject`objectnoContenedor de información del usuario.`subject.duiType`stringnoTipo de identificador. Valores posibles: `DUI_TYPE_AR_DNI`, `DUI_TYPE_BR_CPF`, `DUI_TYPE_ID_NIK`, `DUI_TYPE_MX_CURP`, `DUI_TYPE_NG_NIN`, `DUI_TYPE_US_SSN`.`subject.code`stringnoValor del identificador según lo definido por `subject.duiType`. Sin puntos ni guiones.`subject.name`stringnoNombre completo del usuario.`subject.gender`stringno`M` o `F`.`subject.birthDate`string (ISO 8601)noFecha de nacimiento (`YYYY-MM-DD`).`subject.email`stringnoDirección de correo electrónico.`subject.phone`stringnoNúmero de teléfono E.164.`useCase`stringnoContexto de la operación, por ejemplo, `Transactional`.`subsidiaryId`stringnoID de sucursal: requerido solo si existen múltiples sucursales.informaciónPara este producto, no es posible orquestar con Score de Riesgo. El resultado siempre se devuelve sincrónicamente en la respuesta POST.CampoTipoRequeridoDescripción`subject.duiType`integersíIdentificador del tipo de documento. Consulte [valores de `duiType`](#duitype-values) a continuación. Actualmente solo `DUI_TYPE_BR_CPF`.`subject.code`stringsíCPF del titular de la tarjeta que se está verificando. Sin puntos ni guiones.`card.bin`stringcondicionalPrimeros 6 u 8 dígitos de la tarjeta (BIN). Requerido junto con `card.last4`.`card.last4`stringcondicionalÚltimos 4 dígitos de la tarjeta. Requerido junto con `card.bin`.`card.name`stringnoNombre del titular de la tarjeta tal como aparece impreso en ella.`referenceProcessId`string (UUID)noID de un proceso previamente validado para reutilizar — uno con un resultado aprobado de Verificación de Identidad o Detección de Vida para el mismo CPF. La versión actual de esta capacidad se basa en la reutilización: sin este campo, la validación nunca se activa y la respuesta usa por defecto el resultado estándar `unsure` — la solicitud en sí nunca falla.`useCase`stringnoContexto de la operación, por ejemplo, `CardholderVerification`.`subsidiaryId`stringnoID de sucursal — requerido solo si existen múltiples sucursales.informaciónNo se envía `imageBase64` para este producto — Cardholder Verification se ejecuta completamente en el back-end, sin ningún paso de captura de selfie.
**Valores de `duiType`**PaísCódigoDescripciónAR6Pasaporte argentinoAR7DNI argentinoAR49Licencia de conducir argentina (Licencia Nacional de Conducir)AT34Número de impuesto austríaco (STNR)BE36Número Nacional belga (NN)BR1CPF brasileñoBR5Pasaporte brasileñoBR14CNPJ brasileñoCA28SIN canadienseCH33Número AHV/AVS suizoCL9RUN chilenoCL52Pasaporte chilenoCL57Licencia de conducir chilena (Licencia de Conducir)CO26NIT colombianoCO53Pasaporte colombianoCO55Licencia de conducir colombiana (Licencia de Conducción)CO56Cédula de Ciudadanía colombiana (Cédula de Ciudadanía)DE41Número de Identificación Fiscal alemán (IdNr)DK29CPR danésEC10NI ecuatorianoES50Número de Identidad de Extranjero español (NIE)ES51Documento Nacional de Identidad español (DNI)FI35Código de identidad personal finlandés (HETU)FR46Número de Referencia Fiscal francés (SPI)GB30Número de Seguro Nacional británico (NINO)GT12CUI guatemaltecoID16NIK indonesioIE47Número de Seguro Social Personal irlandés (PPSN)IT37Código Fiscal italiano (CF)LU48Número de Identificación Nacional de Luxemburgo (Matricule)MX2CURP mexicanoMX25RFC mexicano (Persona Física)MX58Licencia de conducir mexicana (Licencia de Conducir)NG8NIN nigerianoNG20Número de Verificación Bancaria nigeriano (BVN)NG43Token BVN nigeriano (hash)NG44Token NIN nigeriano (hash)NL42Número de Servicio al Ciudadano holandés (BSN)NO39Número de Identidad Nacional noruego (Fødselsnummer)PE27RUC peruanoPE40DNI peruanoPE54Pasaporte peruanoPL31PESEL polacoPT45Número de Identificación Fiscal portugués (NIF)SE32Número personal sueco (PNR)SE38Número de Coordinación sueco (Samordningsnummer)TR24Número de Identificación turco (TCKN)US4SSN de Estados UnidosUS11Pasaporte de Estados UnidosUS18Licencia de conducir de Estados UnidosUS21Tarjeta de pasaporte de Estados UnidosUS22Pasaporte de policarbonato de Estados UnidosUS23Tarjeta de identificación de Estados UnidosUY13CI uruguayoZZ15Dirección de correo electrónicoZZ17Número de teléfono—0No especificado—3Identificador interno de Unico
Requisitos de imagen
Resolución mínima: 640 x 480 (estándar HD)
Tamaño máximo de archivo: 800 KB (se recomienda compresión JPEG92)
Formatos aceptados: PNG, JPEG, WebP
Los tokens JWT del SDK expiran después de **10 minutos** y solo pueden usarse **una vez**

Solicitudes comprimidas
La API admite el envío del cuerpo de la solicitud comprimido, utilizando el encabezado HTTP estándar `Content-Encoding`. Esto es opcional y totalmente retrocompatible: los clientes que no envíen este encabezado siguen funcionando exactamente igual que antes.
Formatos admitidos
CodificaciónEncabezado `Content-Encoding`EstadoGzip`gzip`✅ RecomendadoDeflate`deflate`✅ AdmitidoSin compresión(encabezado ausente)✅ Admitido (comportamiento predeterminado)
RecomendaciónUse `gzip`. Tiene el soporte más universal entre lenguajes y bibliotecas HTTP, evitando las ambigüedades de implementación presentes en otros formatos.
Se recomienda la compresión para solicitudes con un cuerpo grande (por ejemplo, payloads JSON extensos, cargas de imágenes codificadas en base64, envíos por lotes). Para solicitudes pequeñas, el overhead de comprimir puede no aportar un beneficio relevante.
Cómo enviar una solicitud comprimida

Comprima el cuerpo de la solicitud (por ejemplo, el JSON serializado) utilizando el algoritmo elegido.
Envíe el cuerpo comprimido como bytes binarios en la solicitud.
Incluya el encabezado `Content-Encoding` con el valor correspondiente (`gzip` o `deflate`).
Mantenga `Content-Type` describiendo el formato de contenido original (por ejemplo, `application/json`), no la codificación de transporte.

cURLPython (requests).NET (C#, HttpClient)```
echo '{"subject":{"code":"12345678909"},"useCase":"Onboarding","imageBase64":"/9j/4AAQSkZJR..."}' | gzip > body.json.gzcurl -X POST https://api.id.unico.app/processes/v1 \  -H "Authorization: Bearer $TOKEN" \  -H "APIKEY: $API_KEY" \  -H "Content-Type: application/json" \  -H "Content-Encoding: gzip" \  --data-binary @body.json.gz
```

```
import gzipimport jsonimport requestspayload = {    "subject": {"code": "12345678909"},    "useCase": "Onboarding",    "imageBase64": capturedImage,}compressed_body = gzip.compress(json.dumps(payload).encode("utf-8"))response = requests.post(    "https://api.id.unico.app/processes/v1",    data=compressed_body,    headers={        "Authorization": f"Bearer {token}",        "APIKEY": api_key,        "Content-Type": "application/json",        "Content-Encoding": "gzip",    },)
```

```
using System.IO.Compression;using System.Text;using System.Text.Json;var json = JsonSerializer.Serialize(payload);var jsonBytes = Encoding.UTF8.GetBytes(json);using var outputStream = new MemoryStream();using (var gzipStream = new GZipStream(outputStream, CompressionMode.Compress, leaveOpen: true)){    await gzipStream.WriteAsync(jsonBytes, 0, jsonBytes.Length);}outputStream.Position = 0;var content = new ByteArrayContent(outputStream.ToArray());content.Headers.ContentType = new MediaTypeHeaderValue("application/json");content.Headers.ContentEncoding.Add("gzip");using var client = new HttpClient();client.DefaultRequestHeaders.Add("Authorization", $"Bearer {token}");client.DefaultRequestHeaders.Add("APIKEY", apiKey);var response = await client.PostAsync("https://api.id.unico.app/processes/v1", content);
```

consejoPara el ejemplo en Python, use el parámetro `data=`, no `json=`. El parámetro `json=` serializa el payload automáticamente, pero no lo comprime.
**Usando `deflate` en su lugar:** el flujo anterior es idéntico — solo cambian la llamada de compresión y el valor de `Content-Encoding`.
Idioma`deflate`Bash / cURL`zlib-flate -compress < body.json > body.json.deflate` (de `qpdf`), luego `-H "Content-Encoding: deflate"`Python`zlib.compress(data)` en lugar de `gzip.compress(data)`.NET (C#)`System.IO.Compression.DeflateStream` en lugar de `GZipStream`
`deflate` es ambiguo en la prácticaLa codificación de contenido `deflate` de HTTP se especifica como un stream zlib (RFC 1950), pero algunos clientes y servidores históricamente emiten o esperan DEFLATE sin procesar (RFC 1951) en su lugar. Esta API espera el stream estándar envuelto en zlib — la misma salida que producen por defecto `zlib.compress()` (Python) o `DeflateStream` (.NET). Ante la duda, prefiere `gzip`, que no tiene esa ambigüedad.
Comportamiento en caso de errorSi se envía `Content-Encoding` con un valor no admitido, o el cuerpo está corrupto o no es válido para la codificación declarada, la API devuelve `400 Bad Request` con un mensaje que indica que no se pudo descomprimir el cuerpo de la solicitud.
Preguntas frecuentes
**¿Necesito cambiar algo si no quiero usar compresión?**
No. El soporte para `Content-Encoding` es aditivo — las solicitudes sin este encabezado continúan procesándose normalmente.
**¿Esto afecta la respuesta de la API?**
No. Esta funcionalidad solo concierne al cuerpo enviado por el cliente (solicitud). La compresión de la respuesta (lo que la API devuelve) se controla por separado mediante el encabezado `Accept-Encoding`.
**¿Qué formato debería elegir?**
Use `gzip`, a menos que alguna restricción específica de su entorno requiera otro formato.
### Ejemplo​

Registro - cURLRegistro - Node.jsTransaccional - cURLTransaccional - Node.jsCardholder Verification - cURLCardholder Verification - Node.js```
curl -X POST https://api.id.unico.app/processes/v1 \  -H "Authorization: Bearer $TOKEN" \  -H "APIKEY: $API_KEY" \  -H "Content-Type: application/json" \  -d '{    "subject": {      "duiType": 1,      "code": "12345678909",      "name": "Luke Skywalker",      "gender": "M",      "birthDate": "2000-05-20",      "email": "luke@example.com",      "phone": "5519725570707"    },    "useCase": "Onboarding",    "imageBase64": "/9j/4AAQSkZJR..."  }'
```

```
import fetch from 'node-fetch';const res = await fetch('https://api.id.unico.app/processes/v1', {  method: 'POST',  headers: {    'Authorization': `Bearer ${process.env.UNICO_ACCESS_TOKEN}`,    'APIKEY': process.env.UNICO_API_KEY,    'Content-Type': 'application/json'  },  body: JSON.stringify({    subject: {      duiType: 1,      code: '12345678909',      name: 'Luke Skywalker',      gender: 'M',      birthDate: '2000-05-20',      email: 'luke@example.com',      phone: '5519725570707'    },    useCase: 'Onboarding',    imageBase64: capturedImage  })});const result = await res.json();
```

```
curl -X POST https://api.id.unico.app/processes/v1 \  -H "Authorization: Bearer $TOKEN" \  -H "APIKEY: $API_KEY" \  -H "Content-Type: application/json" \  -d '{    "references": [      {        "referenceType": "REFERENCE_TYPE_PROCESS_ID",        "referenceContent": "4f00b35f-69d4-415a-a843-d975cefcb169"      }    ],    "useCase": "Transactional",    "imageBase64": "/9j/4AAQSkZJR..."  }'
```

```
import fetch from 'node-fetch';const res = await fetch('https://api.id.unico.app/processes/v1', {  method: 'POST',  headers: {    'Authorization': `Bearer ${process.env.UNICO_ACCESS_TOKEN}`,    'APIKEY': process.env.UNICO_API_KEY,    'Content-Type': 'application/json'  },  body: JSON.stringify({    references: [      {        referenceType: 'REFERENCE_TYPE_PROCESS_ID',        referenceContent: '4f00b35f-69d4-415a-a843-d975cefcb169'      }    ],    useCase: 'Transactional',    imageBase64: capturedImage  })});const result = await res.json();
```

```
curl -X POST https://api.id.unico.app/processes/v1 \  -H "Authorization: Bearer $TOKEN" \  -H "APIKEY: $API_KEY" \  -H "Content-Type: application/json" \  -d '{    "subject": {      "duiType": 1,      "code": "12345678909"    },    "card": {      "bin": "12345678",      "last4": "4321",      "name": "Luke Skywalker"    },    "referenceProcessId": "4f00b35f-69d4-415a-a843-d975cefcb169",    "useCase": "CardholderVerification"  }'
```

```
import fetch from 'node-fetch';const res = await fetch('https://api.id.unico.app/processes/v1', {  method: 'POST',  headers: {    'Authorization': `Bearer ${process.env.UNICO_ACCESS_TOKEN}`,    'APIKEY': process.env.UNICO_API_KEY,    'Content-Type': 'application/json'  },  body: JSON.stringify({    subject: {      duiType: 1,      code: '12345678909'    },    card: {      bin: '12345678',      last4: '4321',      name: 'Luke Skywalker'    },    referenceProcessId: '4f00b35f-69d4-415a-a843-d975cefcb169',    useCase: 'CardholderVerification'  })});const result = await res.json();
```

### Respuestas​

RegistroTransaccionalCardholder Verification200 OKEl contrato es único — el campo `idCloud.result` contiene el veredicto consolidado de las capacidades utilizadas.Unico consolida los resultados de las capacidades ejecutadas en un único `idCloud.result`, listo para decidir el siguiente paso de su flujo — sin necesidad de orquestar resultados individuales.```
{  "id": "80371b2a-3ac7-432e-866d-57fe37896ac6",  "status": 3,  "idCloud": {    "result": "approved"  }}
```

CampoTipoDescripción`id`string (UUID)Identificador del proceso. Use con [Obtener proceso](/es/dual-api/developers/api-reference/api/get-process) para re-consultas.`status`integer`1` (procesando), `3` (finalizado con éxito), `5` (error).Valores de resultado posiblesidCloud.resultSignificadoAcción recomendadaapprovedPersona real e identidad validada.Continuar con el flujo.deniedIdentidad no validada, falló la verificación de vida o se identificó un riesgo extremo.Finalizar el flujo o redirigir a un flujo alternativo.critical-riskSe identificó un nivel de riesgo crítico.Finalizar el flujo o enviar a revisión manual.high-riskSe identificó un nivel de riesgo alto.Enviar a revisión manual o a un flujo alternativo.retryCaptura o score insuficiente para evaluar.Solicitar al usuario una nueva captura.inconclusiveEvidencia insuficiente para un veredicto.Enviar a revisión manual o a un flujo alternativo.Los valores devueltos dependen de la receta configurada en su APIKey. Consulte [Flujos](/es/dual-api/developers/api-reference/api/flows) para conocer los valores de resultado que puede devolver cada receta.Los clientes en Brasil pueden recibir la respuesta por capacidadLa estructura general de la respuesta se mantiene igual — el resultado único es el valor predeterminado.Las integraciones en Brasil pueden recibir los resultados abiertos por capacidad. Cada capacidad habilitada en la APIKey agrega su propio bloque a la respuesta — los campos de las capacidades deshabilitadas se omiten.```
{  "id": "80371b2a-3ac7-432e-866d-57fe37896ac6",  "status": 3,  "unicoId": {    "result": "yes"  },  "riskLevel": {    "result": "inconclusive"  },  "idFace": {    "personId": "a1b2c3d4e5f67890a1b2c3d4e5f67890a1b2c3d4e5f67890a1b2c3d4e5f67890",    "result": "FOUND"  },  "government": {    "serpro": 87  },  "liveness": 1}
```

Los campos de respuesta dependen de tu APIKeyEl ejemplo anterior muestra todos los campos de capacidad posibles. Tu respuesta real solo incluirá los campos correspondientes a las capacidades habilitadas en la configuración de tu APIKey — los campos de capacidades deshabilitadas se omiten por completo. Contacta a tu gestor de proyecto de Unico para habilitar o ajustar las capacidades.CampoTipoDescripción`unicoId.result`string`yes`, `no`, `inconclusive` - consulte [Verificación de Identidad](/es/capabilities/identity-verification).`riskLevel.result`string`approved`, `reproved`, `risk-critical`, `risk-high`, `inconclusive` — consulte los [valores posibles](#risklevel-values) a continuación o [Clasificación de Riesgo de Fraude](/es/capabilities/fraud-risk-classification).`idFace.result`string`FOUND` — consulte Identificador Facial.`idFace.personId`stringIdentificador opaco estable para el rostro, devuelto junto con `idFace.result = FOUND`. Cuando no se puede identificar ningún rostro en la imagen, la solicitud falla con el error [`20532`](#error-codes) en lugar de devolver un bloque `idFace`.`identityFraudsters.result`string**Obsoleto.** Use `riskLevel` en su lugar. Los clientes con integraciones en curso pueden seguir usándolo mientras coordinan la migración con el equipo responsable del proyecto.`government.serpro`integerPuntuación de similitud Serpro (0-100, -1, -2). Disponible solo en Brasil. Consulte [Retorno de Similitud Serpro](/es/capabilities/serpro-similarity-return).`liveness`integer`1` (aprobado), `2` (fallido) - consulte [Detección de Vida](/es/capabilities/liveness).riskLevel.result — valores posiblesValorSignificado`approved`Es el rostro del titular del ID y no se encontró ninguna evidencia relacionada con fraude.`reproved`Se recomienda el rechazo, ya que se detectaron múltiples indicadores de fraude.`risk-critical`Se recomienda el rechazo, pero la decisión final queda a su criterio. El riesgo crítico indica que se encontraron al menos 2 evidencias sólidas de fraude.`risk-high`También se recomienda el rechazo, pero la decisión es suya. El riesgo alto indica que se encontró al menos una evidencia sólida de fraude.`inconclusive`No se encontraron evidencias sólidas de fraude. Por lo tanto, no es posible concluir si existe un riesgo relevante o no.informaciónCuando `unicoId.result = inconclusive` y la orquestación de Score de Riesgo está activa, el proceso puede devolver `status: 1` (procesando). Consulte [Obtener proceso](/es/dual-api/developers/api-reference/api/get-process) o use webhooks para recuperar el resultado final.Los clientes en México pueden recibir el bloque de Verificación RENAPOLa respuesta mantiene la misma estructura y agrega el bloque idGov.Las integraciones en México con Verificación RENAPO habilitada reciben un bloque adicional idGov con el registro que RENAPO tiene para la CURP del usuario. Es una respuesta independiente del resultado de identidad.```
{  "id": "11111111-2222-3333-4444-555555555555",  "status": 3,  "idCloud": { "result": "approved" },  "idGov": {    "government_valid": true,    "curp": "PUEA880304MDFRJN04",    "government_name": "ANA PRUEBA EJEMPLO",    "date_of_birth": "1988-03-04",    "age": 38,    "gender": "F",    "deceased": false,    "is_mexican": true,    "citizenship": "MEXICO",    "state_of_birth": "Ciudad de México",    "state_iso": "MX-CMX",    "issuing_entity_code": "DF",    "municipality_registration": ""  }}
```

CampoTipoDescripción`idGov`objectRegistro de RENAPO para la CURP. Ausente cuando la capacidad no está habilitada. `{}` cuando RENAPO no respondió. Solo México. Consulte [Verificación RENAPO](/es/capabilities/renapo-verification).200 OKEl contrato es único — el campo `idCloud.result` contiene el veredicto consolidado de las capacidades utilizadas.Unico consolida los resultados de las capacidades ejecutadas en un único `idCloud.result`, listo para decidir el siguiente paso de su flujo — sin necesidad de orquestar resultados individuales.```
{  "id": "80371b2a-3ac7-432e-866d-57fe37896ac6",  "status": 3,  "idCloud": {    "result": "approved"  }}
```

CampoTipoDescripción`id`string (UUID)Identificador del proceso.`status`integer`3` (finalizado con éxito), `5` (error). Para todos los valores posibles, consulte [Obtener proceso](/es/dual-api/developers/api-reference/api/get-process).Valores de resultado posiblesidCloud.resultSignificadoAcción recomendadaapprovedPersona real e identidad validada.Continuar con el flujo.deniedIdentidad no validada, falló la verificación de vida o se identificó un riesgo extremo.Finalizar el flujo o redirigir a un flujo alternativo.critical-riskSe identificó un nivel de riesgo crítico.Finalizar el flujo o enviar a revisión manual.high-riskSe identificó un nivel de riesgo alto.Enviar a revisión manual o a un flujo alternativo.retryCaptura o score insuficiente para evaluar.Solicitar al usuario una nueva captura.inconclusiveEvidencia insuficiente para un veredicto.Enviar a revisión manual o a un flujo alternativo.Los valores devueltos dependen de la receta configurada en su APIKey. Consulte [Flujos](/es/dual-api/developers/api-reference/api/flows) para conocer los valores de resultado que puede devolver cada receta.Los clientes en Brasil pueden recibir la respuesta por capacidadLa estructura general de la respuesta se mantiene igual — el resultado único es el valor predeterminado.Las integraciones en Brasil pueden recibir los resultados abiertos por capacidad. Cada capacidad habilitada en la APIKey agrega su propio bloque a la respuesta — los campos de las capacidades deshabilitadas se omiten.```
{  "id": "80371b2a-3ac7-432e-866d-57fe37896ac6",  "status": 3,  "biometryToken": {    "result": true  },  "liveness": 1}
```

CampoTipoDescripción`biometryToken.result`boolean`true` si el rostro enviado coincide con el proceso de referencia; `false` en caso contrario.`liveness`integer`1` (aprobado), `2` (fallido) - consulte [Detección de Vida](/es/capabilities/liveness).200 OK```
{  "id": "80371b2a-3ac7-432e-866d-57fe37896ac6",  "status": 3,  "cardholderVerification": {    "result": "approved"  }}
```

CampoTipoDescripción`id`string (UUID)Identificador del proceso.`status`integer`1` (procesando), `3` (finalizado con éxito), `5` (error). Para todos los valores, consulte [Obtener proceso](/es/dual-api/developers/api-reference/api/get-process).`cardholderVerification.result`string`approved` — el CPF y la tarjeta pertenecen a la misma persona. `unsure` — ya sea que la condición de reutilización no se haya cumplido, o que la propia verificación haya sido inconclusa. Ausente mientras `status` aún no sea `3`. Consulte [Cardholder Verification](/es/capabilities/cardholder-verification).
### Códigos de error​

400 Bad Request403 Forbidden409 Conflict429 Too Many Requests500 Internal Server ErrorCódigoMensajeDescripción`40221`This flow does not support reusing a prior process (referenceProcessId or bioTokenId) without an image; send an image (imageBase64, or references[0] with type IMAGE_BASE64) instead.El flujo de reutilización (`referenceProcessId`/`bioTokenId`, sin imagen) fue rechazado porque la reutilización de procesos no está habilitada para esta API key.`20900`O base64 informado não é válido.El parámetro base64 es inválido. Posibles causas: no es una imagen o es un intento de inyección.`20807`A imagem precisa estar no padrão HD ou possuir uma resolução superior a 640 x 480.La resolución de la imagen cargada es demasiado baja.`20532`No face detected in image.No se pudo detectar ningún rostro en la imagen enviada.`20513`The referenced process was not found.El `referenceProcessId` apunta a un proceso que no existe o ya no es accesible.`20512`The referenced process is not available for reuse.El proceso referenciado existe pero no está disponible para reutilización.`20509`The subject.name field is invalid.`subject.name` contiene caracteres inválidos.`20508`The subject.gender field is invalid.`subject.gender` debe ser `M` o `F`.`20507`O parâmetro subject.code é inválido.CPF no estándar o inexistente.`20506`O base64 informado é muito grande. O tamanho máximo suportado é até 800kb.El tamaño de la imagen excede 800 KB; comprima a JPEG92.`20505`O base64 informado não é suportado. Os formatos aceitos são png, jpeg e webp.El formato base64 es inválido o no compatible.`20065`The referenceProcessId field is invalid.El `referenceProcessId` no es un UUID válido.`20062`The useCase field is invalid.Valor no reconocido en el campo `useCase`.`20024`The referenceProcessId field is missing.No se proporcionó el parámetro `referenceProcessId` y no se envió `references` como alternativa. No aplica a Cardholder Verification — su `referenceProcessId` nunca se valida como obligatorio; una condición de reutilización no satisfecha responde `unsure` en su lugar.`20533`The card field is missing.[Cardholder Verification](/es/capabilities/cardholder-verification): no se proporcionó el objeto `card`.`20534`The card.bin field is missing.[Cardholder Verification](/es/capabilities/cardholder-verification): no se proporcionó `card.bin`.`20535`The card.last4 field is missing.[Cardholder Verification](/es/capabilities/cardholder-verification): no se proporcionó `card.last4`.`20536`The card data is invalid.[Cardholder Verification](/es/capabilities/cardholder-verification): los datos de la tarjeta fueron rechazados como inválidos.`20021`The subject.phone field is invalid.Formato de `subject.phone` inválido (IDD + código de área + número, 13 caracteres).`20019`The subject.birthDate field is invalid.`subject.birthDate` está fuera del formato ISO 8601 (`YYYY-MM-DD`).`20009`O parâmetro imagebase64 não foi informado.Falta el parámetro de imagen selfie.`20008`The subject.email field is invalid.Formato de correo electrónico inválido en `subject.email`.`20006`O parâmetro subject.name não foi informado.Falta el parámetro subject.name.`20005`O parâmetro subject.code não foi informado.Falta el parámetro subject.code.`20004`O parâmetro subject não foi informado.Falta el parámetro subject.`20003`The request body is missing or invalid.Payload nulo o inválido.`20002`O parâmetro APIKey não foi informado.Falta el parámetro APIKEY en el encabezado de la solicitud.`20001`O parâmetro authtoken não foi informado.Falta el parámetro del token de integración en el encabezado de la solicitud.`10508`The JWT with the captured face has already been used.El JWT solo puede usarse una vez.`10507`The JWT with the captured face is expired.JWT expirado; debe enviarse dentro de 10 minutos.`10506`The imageBase64 field is not a valid JWT from SDK.El `imageBase64` no es un JWT válido generado por el SDK.Token Bearer o `APIKEY` ausente, expirado o inválido. Consulte [Autenticación](/es/dual-api/developers/api-reference/authentication).CódigoMensajeDescripción`30017`User does not have permission to perform this action.JWT malformado o usuario sin permiso para realizar esta operación.`10502`O token informado está expirado.El token de acceso ha expirado.`10501`O token informado é inválido.El token de autenticación es inválido.`10201`O AppKey informado é inválido.La APIKEY es inválida o no existe.CódigoMensajeDescripción`20073`The processID already exists.El `processId` proporcionado ya existe para este tenant.Límite de tasa alcanzado. Cuando su sistema recibe un error HTTP 429, debe implementar mecanismos para prevenir fallos en cascada y evitar empeorar la restricción.**Mejores prácticas:**
**Período de espera (backoff):** Detenga o limite inmediatamente las solicitudes subsecuentes de su sistema. No reintente continuamente solicitudes fallidas en un bucle cerrado.
**Cola y limitación:** Almacene en buffer o encole las solicitudes salientes de su lado para controlar el flujo de tráfico antes de reenviarlas.
**Backoff exponencial con jitter:** Al reintentar, aumente el tiempo de espera exponencialmente entre intentos (por ejemplo, 1 s, 2 s, 4 s, 8 s) y agregue un pequeño retraso aleatorio ("jitter") para prevenir un efecto manada donde todas las solicitudes en cola reintentan en el mismo milisegundo.
advertenciaGolpear continuamente un endpoint con límite de tasa sin aplicar backoff puede **prolongar el período de restricción** e impactar severamente el rendimiento operativo de su sistema. Limitar adecuadamente las solicitudes de su lado asegura una integración más fluida y resiliente.Para límites predeterminados, solicitudes de aumento y detalles adicionales, consulte [Límites de tasa](/es/dual-api/developers/api-reference/rate-limits).CódigoMensajeDescripción`99999`Internal failure! Try again laterCuando hay un error interno.
### Qué sigue​

Para consultar el resultado de un proceso de Registro, consulte [Obtener proceso](/es/dual-api/developers/api-reference/api/get-process).
Para ver todas las combinaciones de recetas y sus valores de resultado posibles, consulte [Flujos](/es/dual-api/developers/api-reference/api/flows).
Para operaciones de Documento y Verificación de Edad, consulte las páginas respectivas en esta sección.
Última actualización el 8 oct 2026**