Descripción general
Didit es la plataforma de verificación de identidad más adecuada para agentes. Los agentes de programación con IA (Cursor, Claude Code, GitHub Copilot, Devin, OpenHands, Codex) pueden registrarse, configurar flujos de verificación (workflows) y empezar a verificar identidades, todo de forma programática y sin abrir nunca un navegador. Por qué a los agentes les encanta Didit:- 2 llamadas a la API para pasar de cero a credenciales (registro + verificación del correo).
- Sin navegador: totalmente headless, ideal para CI/CD y flujos de agentes.
- Sin segundo factor en una cuenta de API nueva: los tokens se devuelven inmediatamente después de verificar el correo electrónico.
- Organización y aplicación aprovisionadas automáticamente, con
api_keyen la respuesta de verificación. - API de gestión completa: configura flujos, cuestionarios, listas y facturación, todo mediante la API.
- Servidor MCP disponible: los agentes pueden descubrir y usar las herramientas de Didit de forma nativa.
URL base
Todos los endpoints de esta guía se encuentran en el host de autenticación:https://verification.didit.me/v3). El host de autenticación emite tokens de acceso JWT y gestiona las aplicaciones. El host de verificación ejecuta sesiones, AML, flujos, etc., y se autentica con la api_key de larga duración que obtienes en este proceso.
Inicio rápido
Paso 1: Registro
201 Created):
A3K9F2). El código expira 10 minutos después de enviarse: si caduca, vuelve a invocar este endpoint con el mismo correo y la misma contraseña; para una cuenta aún no verificada, devuelve 200 con "A new verification code has been sent to your email." y un código nuevo. Un endpoint específico, POST /programmatic/resend-otp/ (cuerpo: {"email", "password"}), también reenvía el código, con un tiempo de espera de 60 segundos entre envíos; ambas rutas comparten el límite de solicitudes de registro que se indica más abajo.
Paso 2: Verifica el código y obtén las credenciales
200 OK):
application.api_key de forma segura y envíala como encabezado x-api-key en cada llamada a la API de verificación.
Los tokens son JWT firmados con RS256.
expires_in tiene un valor predeterminado de 86400 segundos (24 horas). El token de acceso solo se necesita para los endpoints de gestión en apx.didit.me/auth/v2; el tráfico de la API de verificación en verification.didit.me/v3 se autentica con la api_key de larga duración, no con el JWT.Paso 3: Usa la API
Inicios de sesión posteriores
Desde cualquier otra máquina, intercambia tu correo electrónico y tu contraseña por un JWT nuevo:access_token + refresh_token directamente, sin navegador. A partir de ahí, invoca GET /organizations/me/ para descubrir tu org_id (el uuid de la organización), luego GET /organizations/me/{org_id}/applications/ para listar las aplicaciones de la organización (el uuid de cada entrada es un app_id) y, por último, GET /organizations/me/{org_id}/applications/{app_id}/ para recuperar la api_key.
Las cuentas con correo electrónico y contraseña creadas en la consola también pueden usar
POST /programmatic/login/ una vez verificado el correo. Las cuentas de la consola que solo usan OAuth deben establecer una contraseña antes de usar este endpoint de inicio de sesión headless.Cuando el inicio de sesión pide algo más
POST /programmatic/login/ devuelve tokens solo cuando la cuenta no tiene un segundo factor.
Hay otras tres respuestas posibles, y un agente que automatice el inicio de sesión debe gestionarlas:
Una clave de API no necesita inicio de sesión, así que úsala para cualquier proceso automatizado: una cuenta con segundo factor no puede completar el inicio de sesión a través de este endpoint.
Requisitos de la contraseña
Se aplican en el servidor, una regla cada vez: el primer fallo interrumpe la validación con un error en forma de array simple, como["Password must contain at least one uppercase letter."]. (Los demás errores de validación de este endpoint usan el formato con clave de campo {"password": [...]}. La forma de array simple en las reglas de seguridad de la contraseña es una inconsistencia conocida del servidor; trátala como {"password": [...]} en el código del cliente).
Límites de solicitudes y bloqueos
Tres controles independientes protegen el host de autenticación. Cualquiera de ellos puede producir una respuesta429; el encabezado de respuesta Retry-After te indica cuánto tiempo debes esperar antes de reintentar.
El cuerpo de una respuesta
429 tiene este aspecto:
Gestionar aplicaciones
Una vez autenticado, puedes obtener, crear o actualizar aplicaciones dentro de tu organización. Esto encaja perfectamente con los revendedores que quieren una aplicación por cliente. Cada aplicación tiene sus propiosclient_id, api_key, metadatos y configuración. También resulta útil cuando tu organización tiene distintos productos, marcas, regiones, entornos o casos de uso que quieres mantener separados.
403.
Qué pueden hacer los agentes tras el registro
Con laapi_key, los agentes tienen acceso completo a la API de verificación. Rutas auditadas en https://verification.didit.me/v3:
Consulta la referencia de la API de administración para ver todas las operaciones disponibles.
Integración con el servidor MCP
Para obtener la mejor experiencia con agentes, usa el servidor MCP alojado de Didit enhttps://mcp.didit.me/mcp. No necesita clave de API: en la primera conexión, tu cliente abre un navegador, eliges Log in with Didit (OAuth 2.1 con PKCE) y el servidor actúa en tu nombre, con los permisos de tu rol en la consola. Los clientes con soporte nativo para MCP remoto (Cursor, VS Code) usan esta entrada; Claude web y Desktop lo añaden como conector personalizado:
claude mcp add --transport http didit https://mcp.didit.me/mcp. Los clientes que solo admiten stdio (Windsurf, Zed) pasan por el puente mcp-remote, que ejecuta el flujo OAuth por ti.
La clave de API que recibes del flujo de registro anterior sirve para llamar a la API REST desde tu propio backend; el MCP nunca la usa. Consulta la visión general del MCP y la instalación por cliente para más detalles.
Referencia del formato de errores
Todos los endpoints deapx.didit.me/auth/v2 comparten las mismas tres formas de respuesta (consulta openapi-auth.json):
- Validación a nivel de campo:
{"field": ["message", ...]}con HTTP400. - Validación a nivel de formulario (en particular, errores de robustez de la contraseña y del código de verificación): array simple
["Invalid or expired verification code."]con HTTP400. - Autenticación / regla de negocio:
{"detail": "..."}con400,401,403,404o429. Las respuestas429incluyen un encabezado de respuestaRetry-Afterque te indica cuánto tiempo debes esperar antes de reintentar (el cuerpo solo contienedetail).
{"detail": "..."} y las respuestas 429 incluyen X-RateLimit-* y Retry-After; consulta Límites de solicitudes.