Saltar al contenido principal

Crear proceso

MarkdownChatGPTClaude

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.

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.

Endpoint​

EntornoURL
ProducciónPOST https://api.id.unico.app/processes/v1
SandboxPOST https://api.id.uat.unico.app/processes/v1

Solicitud​

Encabezados
EncabezadoValor
AuthorizationBearer <access_token> (consulte Autenticación)
APIKEYClave API provisionada: define el producto activo y las capacidades habilitadas.
Content-Typeapplication/json
Parámetros del cuerpo
CampoTipoRequeridoDescripción
subject.duiTypeintegersíIdentificador del tipo de documento. Consulte valores de duiType a continuación.
subject.codestringsíValor del identificador según lo definido por subject.duiType. Sin puntos ni guiones.
subject.namestringnoNombre completo.
subject.genderstringnoM o F.
subject.birthDatestring (ISO 8601)noFecha de nacimiento (YYYY-MM-DD).
subject.emailstringnoDirección de correo electrónico.
subject.phonestringnoNúmero de teléfono E.164.
subject.clientReferencestringcondicionalIdentificador único del usuario en su sistema. Obligatorio para la capacidad Multi Cuentas. Único en su base, máximo de 256 caracteres, sin espacios.
useCasestringnoContexto de la operación, por ejemplo, Onboarding.
subsidiaryIdstringnoID de sucursal — requerido solo si existen múltiples sucursales.
imageBase64stringsíSelfie capturado por su front-end, en base64.
Valores de duiType
PaísCódigoDescripción
AR6Pasaporte argentino
AR7DNI argentino
AR49Licencia de conducir argentina (Licencia Nacional de Conducir)
AT34Número de impuesto austríaco (STNR)
BE36Número Nacional belga (NN)
BR1CPF brasileño
BR5Pasaporte brasileño
BR14CNPJ brasileño
CA28SIN canadiense
CH33Número AHV/AVS suizo
CL9RUN chileno
CL52Pasaporte chileno
CL57Licencia de conducir chilena (Licencia de Conducir)
CO26NIT colombiano
CO53Pasaporte colombiano
CO55Licencia 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és
EC10NI ecuatoriano
ES50Nú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 guatemalteco
ID16NIK indonesio
IE47Número de Seguro Social Personal irlandés (PPSN)
IT37Código Fiscal italiano (CF)
LU48Número de Identificación Nacional de Luxemburgo (Matricule)
MX2CURP mexicano
MX25RFC mexicano (Persona Física)
MX58Licencia de conducir mexicana (Licencia de Conducir)
NG8NIN nigeriano
NG20Nú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 peruano
PE40DNI peruano
PE54Pasaporte peruano
PL31PESEL polaco
PT45Nú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 Unidos
US11Pasaporte de Estados Unidos
US18Licencia de conducir de Estados Unidos
US21Tarjeta de pasaporte de Estados Unidos
US22Pasaporte de policarbonato de Estados Unidos
US23Tarjeta de identificación de Estados Unidos
UY13CI uruguayo
ZZ15Dirección de correo electrónico
ZZ17Nú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-EncodingEstado
Gzipgzip✅ Recomendado
Deflatedeflate✅ Admitido
Sin compresión(encabezado ausente)✅ Admitido (comportamiento predeterminado)
Recomendación

Use 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
  1. Comprima el cuerpo de la solicitud (por ejemplo, el JSON serializado) utilizando el algoritmo elegido.
  2. Envíe el cuerpo comprimido como bytes binarios en la solicitud.
  3. Incluya el encabezado Content-Encoding con el valor correspondiente (gzip o deflate).
  4. Mantenga Content-Type describiendo el formato de contenido original (por ejemplo, application/json), no la codificación de transporte.
echo '{"subject":{"code":"12345678909"},"useCase":"Onboarding","imageBase64":"/9j/4AAQSkZJR..."}' | gzip > body.json.gz

curl -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
consejo

Para 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.

Idiomadeflate
Bash / cURLzlib-flate -compress < body.json > body.json.deflate (de qpdf), luego -H "Content-Encoding: deflate"
Pythonzlib.compress(data) en lugar de gzip.compress(data)
.NET (C#)System.IO.Compression.DeflateStream en lugar de GZipStream
deflate es ambiguo en la práctica

La 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 error

Si 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​

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": "[email protected]",
"phone": "5519725570707"
},
"useCase": "Onboarding",
"imageBase64": "/9j/4AAQSkZJR..."
}'

Respuestas​

200 OK

El 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
idstring (UUID)Identificador del proceso. Use con Obtener proceso para re-consultas.
statusinteger1 (procesando), 3 (finalizado con éxito), 5 (error).
Valores de resultado posibles
idCloud.resultSignificadoAcción recomendada
approvedPersona 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 para conocer los valores de resultado que puede devolver cada receta.

BrazilLos clientes en Brasil pueden recibir la respuesta por capacidad

La 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 APIKey

El 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.resultstringyes, no, inconclusive - consulte Verificación de Identidad.
riskLevel.resultstringapproved, reproved, risk-critical, risk-high, inconclusive — consulte los valores posibles a continuación o Clasificación de Riesgo de Fraude.
idFace.resultstringFOUND — consulte Identificador Facial.
idFace.personIdstringIdentificador 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 en lugar de devolver un bloque idFace.
identityFraudsters.resultstringObsoleto. 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.serprointegerPuntuación de similitud Serpro (0-100, -1, -2). Disponible solo en Brasil. Consulte Retorno de Similitud Serpro.
livenessinteger1 (aprobado), 2 (fallido) - consulte Detección de Vida.
riskLevel.result — valores posibles
ValorSignificado
approvedEs el rostro del titular del ID y no se encontró ninguna evidencia relacionada con fraude.
reprovedSe recomienda el rechazo, ya que se detectaron múltiples indicadores de fraude.
risk-criticalSe 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-highTambié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.
inconclusiveNo se encontraron evidencias sólidas de fraude. Por lo tanto, no es posible concluir si existe un riesgo relevante o no.
información

Cuando unicoId.result = inconclusive y la orquestación de Score de Riesgo está activa, el proceso puede devolver status: 1 (procesando). Consulte Obtener proceso o use webhooks para recuperar el resultado final.

MexicoLos clientes en México pueden recibir el bloque de Verificación RENAPO

La 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
idGovobjectRegistro de RENAPO para la CURP. Ausente cuando la capacidad no está habilitada. {} cuando RENAPO no respondió. Solo México. Consulte Verificación RENAPO.

Códigos de error​

CódigoMensajeDescripción
40221This 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.
20900O 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.
20807A 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.
20532No face detected in image.No se pudo detectar ningún rostro en la imagen enviada.
20513The referenced process was not found.El referenceProcessId apunta a un proceso que no existe o ya no es accesible.
20512The referenced process is not available for reuse.El proceso referenciado existe pero no está disponible para reutilización.
20509The subject.name field is invalid.subject.name contiene caracteres inválidos.
20508The subject.gender field is invalid.subject.gender debe ser M o F.
20507O parâmetro subject.code é inválido.CPF no estándar o inexistente.
20506O base64 informado é muito grande. O tamanho máximo suportado é até 800kb.El tamaño de la imagen excede 800 KB; comprima a JPEG92.
20505O base64 informado não é suportado. Os formatos aceitos são png, jpeg e webp.El formato base64 es inválido o no compatible.
20065The referenceProcessId field is invalid.El referenceProcessId no es un UUID válido.
20062The useCase field is invalid.Valor no reconocido en el campo useCase.
20024The 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.
20533The card field is missing.Cardholder Verification: no se proporcionó el objeto card.
20534The card.bin field is missing.Cardholder Verification: no se proporcionó card.bin.
20535The card.last4 field is missing.Cardholder Verification: no se proporcionó card.last4.
20536The card data is invalid.Cardholder Verification: los datos de la tarjeta fueron rechazados como inválidos.
20021The subject.phone field is invalid.Formato de subject.phone inválido (IDD + código de área + número, 13 caracteres).
20019The subject.birthDate field is invalid.subject.birthDate está fuera del formato ISO 8601 (YYYY-MM-DD).
20009O parâmetro imagebase64 não foi informado.Falta el parámetro de imagen selfie.
20008The subject.email field is invalid.Formato de correo electrónico inválido en subject.email.
20006O parâmetro subject.name não foi informado.Falta el parámetro subject.name.
20005O parâmetro subject.code não foi informado.Falta el parámetro subject.code.
20004O parâmetro subject não foi informado.Falta el parámetro subject.
20003The request body is missing or invalid.Payload nulo o inválido.
20002O parâmetro APIKey não foi informado.Falta el parámetro APIKEY en el encabezado de la solicitud.
20001O parâmetro authtoken não foi informado.Falta el parámetro del token de integración en el encabezado de la solicitud.
10508The JWT with the captured face has already been used.El JWT solo puede usarse una vez.
10507The JWT with the captured face is expired.JWT expirado; debe enviarse dentro de 10 minutos.
10506The imageBase64 field is not a valid JWT from SDK.El imageBase64 no es un JWT válido generado por el SDK.

Qué sigue​

  • Para consultar el resultado de un proceso de Registro, consulte Obtener proceso.
  • Para ver todas las combinaciones de recetas y sus valores de resultado posibles, consulte Flujos.
  • Para operaciones de Documento y Verificación de Edad, consulte las páginas respectivas en esta sección.