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
| Campo | Tipo | Descripción |
|---|---|---|
| id | string | Identificador único de la verificación o el registro. |
| status | string | pending, completed o expired. |
| verified | boolean | Si el eID fue validado y se probó la posesión. |
| is_real_person | boolean | Si un titular genuino de la tarjeta completó la comprobación. |
| assurance_level | number | 1 para una sesión con passkey, 2 para una verificación nueva del eID. |
| credential_id | string | La credencial passkey / vinculada a la app asociada al dispositivo. |
| certificate_id | string | Referencia 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.
| Estado | Significado |
|---|---|
| 401 | No autorizado — clave de API ausente o inválida. |
| 404 | No encontrado — el id de registro o credencial no existe. |
| 409 | Conflicto — el registro aún está pendiente. |
| 422 | No procesable — el certificado del eID es inválido, ha expirado o ha sido revocado (según la autoridad emisora/OCSP). |
| 429 | Demasiadas solicitudes — has alcanzado un límite de tasa. |