No-ID

Documentación

Referencia de la API de No-ID

Todo lo que necesitas para registrar a un usuario con su eID nacional y autenticarlo después. Los ejemplos siguientes son ilustrativos — tus endpoints y campos reales se proporcionan con tu clave de API.

Primeros pasos

La API de No-ID verifica que una persona real es quien dice ser usando un documento de identidad electrónico emitido por el Estado. El flujo es: inicia un registro para obtener un reto, haz que el eID lo firme, completa el registro (validamos el certificado contra la PKI de la autoridad emisora y comprobamos la revocación) y luego autentica al usuario con una passkey en visitas futuras. Todas las solicitudes usan HTTPS e intercambian JSON.

La URL base para todos los ejemplos es https://api.no-id.example/v1.

Autenticación

Autentica cada solicitud con tu clave de API secreta en la cabecera Authorization. Mantén esta clave en tu servidor — nunca la expongas en código de cliente.

Authorization: Bearer <your_api_key>

Iniciar registro

Inicia el registro de un ciudadano, indicando su país y número de documento nacional. La respuesta devuelve un reto de un solo uso para que el eID lo firme, probando la posesión de la tarjeta física.

POST /v1/enroll
Authorization: Bearer <your_api_key>
Content-Type: application/json

{ "country": "PE", "national_id": "12345678" }

→ 201 Created
{
  "enrollment_id": "enr_8a1c...",
  "challenge": "b64u_x9..."
}

Completar registro

Envía el certificado X.509 del eID y el reto firmado. No-ID valida la cadena de certificados hasta la autoridad emisora, comprueba la revocación OCSP/CRL y — si tiene éxito — emite una credencial de dispositivo y un resultado certificado.

POST /v1/enroll/enr_8a1c.../complete
Authorization: Bearer <your_api_key>

{
  "eid_certificate": "<base64 X.509>",
  "challenge_signature": "<base64 signature>"
}

→ 200 OK
{
  "id": "ver_5d7a...",
  "status": "completed",
  "verified": true,
  "is_real_person": true,
  "assurance_level": 2,
  "credential_id": "cred_3f2c...",
  "certificate_id": "noid_cert_7Hk2..."
}

Autenticar (Nivel 1)

En visitas futuras, autentica al usuario con una passkey WebAuthn o clave vinculada a la app — sin necesidad del eID. Para un refuerzo de Nivel 2, ejecuta el registro de nuevo para forzar una nueva comprobación del eID.

POST /v1/auth
Authorization: Bearer <your_api_key>

{
  "credential_id": "cred_3f2c...",
  "assertion": "<webauthn assertion>"
}

→ 200 OK
{
  "verified": true,
  "assurance_level": 1
}

Campos de respuesta

CampoTipoDescripción
idstringIdentificador único de la verificación o el registro.
statusstringpending, completed o expired.
verifiedbooleanSi el eID fue validado y se probó la posesión.
is_real_personbooleanSi un titular genuino de la tarjeta completó la comprobación.
assurance_levelnumber1 para una sesión con passkey, 2 para una verificación nueva del eID.
credential_idstringLa credencial passkey / vinculada a la app asociada al dispositivo.
certificate_idstringReferencia al certificado de verificación almacenado.

Errores

No-ID usa códigos de estado HTTP estándar. Las respuestas de error incluyen un cuerpo JSON con un código legible por máquina y un mensaje legible por humanos.

EstadoSignificado
401No autorizado — clave de API ausente o inválida.
404No encontrado — el id de registro o credencial no existe.
409Conflicto — el registro aún está pendiente.
422No procesable — el certificado del eID es inválido, ha expirado o ha sido revocado (según la autoridad emisora/OCSP).
429Demasiadas solicitudes — has alcanzado un límite de tasa.