> ## Documentation Index
> Fetch the complete documentation index at: https://docs.didit.me/llms.txt
> Use this file to discover all available pages before exploring further.

# Referencia de la API de Didit: verificación de identidad

> Referencia de la API REST de Didit: endpoints KYC, KYB, AML, biometría y monitorización de transacciones. OpenAPI, pago por uso y $10 gratis/mes.



Prompt de integración de API independientes
        Copiar el prompt al portapapeles



      
      

\<pre>

\``Integrate Didit standalone verification APIs into my backend for server-to-server identity checks.

\## Available Standalone APIs

\### Identity & Documents
\- POST /v3/id-verification/ — multipart/form-data: front_image (required), back_image (optional). Returns: { request_id, id_verification: { status, first_name, last_name, document_type, document_number, date_of_birth, nationality, expiration_date, issuing_state, address, parsed_address, warnings[] } }
\- POST /v3/poa/ — multipart/form-data: document (PDF/image). Returns: { request_id, poa: { status, document_type, issuer, poa_address, poa_parsed_address, issue_date, warnings[] } }
\- POST /v3/database-validation/ — JSON: { issuing_state, validation_type, first_name, last_name, date_of_birth, personal_number, ... }. Returns: { request_id, database_validation: { status, validations } }

\### Document AI
\- POST /v3/document-ai/ — multipart/form-data: document (PDF/image), fields (one JSON-encoded array string of { key, name, instruction, type: "text"|"number"|"date", required, is_full_name }, 1-30 items), expected_first_name + expected_last_name OR expected_company_name (+ expected_company_country), document_ai_name_match_score_threshold (default 80), per-risk *_action params. Returns: { request_id, document_ai: { status, extracted_data: { <key>: value|null }, detected_codes[], fields[], name_match_score, name_on_document, warnings[] } }. $0.20 per document.

\### Biometrics & Face
\- POST /v3/passive-liveness/ — multipart/form-data: user_image. Returns: { request_id, passive_liveness: { status, score, method } }
\- POST /v3/face-match/ — multipart/form-data: user_image + ref_image. Returns: { request_id, face_match: { status, score } }
\- POST /v3/face-search/ — multipart/form-data: user_image. Returns: { request_id, face_search: { status, total_matches, matches[] } }
\- POST /v3/age-estimation/ — multipart/form-data: user_image. Returns: { request_id, age_estimation: { status, age_estimation, score } }

\### Compliance
\- POST /v3/aml/ — JSON: { full_name, entity_type, date_of_birth, nationality, document_number, include_adverse_media, include_ongoing_monitoring }. Returns: { request_id, aml: { status, total_hits, hits[], score, entity_type } }

\### Business Verification (KYB)
\- POST /v3/kyb/search/ — JSON: { country_code (required), name, registration_number, tier: "basic" (default) | "shareholders" | "ubo", search_type: "contains", webhook_url, vendor_data, metadata }. `tier` picks the provider chain the search runs on; retrieve the candidate from select (Lite), shareholders or ubo. Up to $0.50 per successful request, separately from profile retrieval; empty results and failures are not charged. Returns: { request_id, kyb_registry: { companies[] ({ kyb_response_id, name, registration_number, status, type, fetch_status }), pagination, search_status, search_resolved } }. `kyb_response_id` is an opaque handle — pass it straight to select/shareholders/ubo, never parse it.
\- POST /v3/kyb/select/ — JSON: { kyb_response_id (from search), save_api_request, vendor_data, metadata }. **Lite** tier, priced per country ([per-country prices](https://docs.didit.me/getting-started/kyb-registry-pricing.md)). Returns: { request_id, kyb_registry: { status, company_name, registration_number, country_code, company_type, incorporation_date, registered_address, officers[], beneficial_owners[], fetch_status, data_resolved, ... } }
\- POST /v3/kyb/shareholders/ and POST /v3/kyb/ubo/ — same JSON shape as select. **Shareholders** and **UBOs** tiers, priced per country; delivered and billed as the highest tier the country's registries can serve. v3 only.

\### Contact Verification
\- POST /v3/email/send/ — JSON: { email }. Sends OTP code.
\- POST /v3/email/check/ — JSON: { email, code }. Verifies OTP.
\- POST /v3/phone/send/ — JSON: { phone, channel }. Sends OTP via SMS/WhatsApp/Telegram.
\- POST /v3/phone/check/ — JSON: { phone, code }. Verifies OTP.

\### Bank Verification
\- POST /v3/bank/account-check/ - JSON: { country (ISO 3166-1 alpha-3), account: { iban } or { account_number, sort_code | routing_number | ifsc | bsb | transit_institution | bank_code } or { clabe } or { cbu_cvu }, holder: { full_name } or { business_name }, vendor_data }. Checks that a bank account belongs to the name, with no session. Returns: { request_id, result: match | close_match | no_match | cannot_verify, holder_name (close_match only), account (masked), vendor_data, created_at }. Billed once per check the bank answers; errors are never billed.

\## Authentication
All requests require: Headers: { "x-api-key": DIDIT_API_KEY }
For file uploads: multipart/form-data. For JSON: Content-Type: application/json.

\## Common Parameters
\- save_api_request (bool, default true): if true, appears in Console > Manual Checks
\- vendor_data (string): your internal ID for tracking

\## Example: ID Verification (Node.js)
const FormData = require('form-data');
const fs = require('fs');
const form = new FormData();
form.append('front_image', fs.createReadStream('./id_front.jpg'));
form.append('back_image', fs.createReadStream('./id_back.jpg'));

const response = await fetch('https://verification.didit.me/v3/id-verification/', {
method: 'POST',
headers: { 'x-api-key': process.env.DIDIT_API_KEY, ...form.getHeaders() },
body: form
});
const result = await response.json();
// result.id_verification.status: "Approved" or "Declined"
// result.id_verification.first_name, .last_name, .document_number, etc.

\## Example: AML Screening
const response = await fetch('https://verification.didit.me/v3/aml/', {
method: 'POST',
headers: { 'x-api-key': process.env.DIDIT_API_KEY, 'Content-Type': 'application/json' },
body: JSON.stringify({
full_name: 'John Doe',
entity_type: 'person',
date_of_birth: '1990-01-15',
nationality: 'US'
})
});
const result = await response.json();
// result.aml.status, result.aml.total_hits, result.aml.hits

\## When to Use Standalone APIs vs Sessions
\- Standalone: you have images/data, server-to-server, batch processing, custom UX
\- Sessions: user-facing flows where Didit handles camera, UX, multi-step, 54 languages

\## Rate Limits
\- Free: 10/min. Paid: 600/min. Exceeded: HTTP 429.

\## Environment Variables
\- DIDIT_API_KEY — from Didit Console > API & Webhooks

\## Docs
\- API Reference: https://docs.didit.me/api-reference/overview
\- Sessions vs APIs: https://docs.didit.me/api-reference/overview
\- Webhooks: https://docs.didit.me/integration/webhooks``

\</pre>



      
      

Pegar en

Didit ofrece **dos enfoques complementarios** para la verificación de identidad. Entender en qué se diferencian es clave para elegir la integración adecuada a tu caso de uso.[/es/sessions-api/create-session](https://docs.didit.me/es/sessions-api/create-session.md)[/es/standalone-apis/id-verification](https://docs.didit.me/es/standalone-apis/id-verification.md)***## Sesiones alojadas (recomendadas para flujos con el usuario presente)Las sesiones alojadas son el **enfoque recomendado** para la mayoría de las integraciones. Cuando creas una sesión, Didit genera una `verification_url` que le presentas al usuario. El usuario completa todo el flujo de verificación en la interfaz optimizada de Didit, y tú recibes los resultados mediante webhook o API.### Cómo funciona**1. Crear la sesión**Tu servidor invoca `POST /v3/session/` con el ID de un flujo de verificación (workflow). Didit devuelve una `verification_url` y un `session_token`.**2. Presentarla al usuario**Redirige al usuario, incrústala mediante un iframe o inicializa un SDK nativo con el token de sesión.**3. El usuario completa la verificación**El usuario sigue el flujo guiado en la interfaz optimizada de Didit: captura del documento de identidad, prueba de vida y cualquier paso adicional.**4. Recibir los resultados**Didit envía un webhook a tu servidor con la decisión de verificación, o bien consultas periódicamente la API de recuperación.### Por qué se recomiendan las sesiones| Ventaja | Detalles |
| - | - |
| **Experiencia de usuario optimizada** | La interfaz de verificación se somete continuamente a pruebas A/B a escala global para lograr las tasas de finalización más altas |
| **Gestión de la cámara** | Selección inteligente de cámara, captura automática, controles de calidad y compatibilidad con dispositivos integrados |
| **Flujo guiado** | Instrucciones paso a paso, retroalimentación en tiempo real y recuperación de errores para el usuario |
| **Flujos con varias funciones** | Encadena varias funciones (documento de identidad + Prueba de vida + AML + Teléfono + Correo electrónico) en un único flujo |
| **Seguridad** | Protección contra la suplantación, prueba de vida activa y huella digital del dispositivo integradas en el flujo |
| **Cumplimiento** | Registros de auditoría a nivel de sesión, registro del consentimiento y políticas de retención de datos gestionados automáticamente |
| **Localización** | 54 idiomas con detección automática del navegador |
| **Nativo para móviles** | SDKs nativos para iOS, Android, React Native y Flutter |
| **Sin mantenimiento** | Didit se encarga de todas las actualizaciones de la interfaz, los errores de navegadores y dispositivos y los casos límite de la cámara |### Cuándo usar sesiones- **Onboarding de usuarios / KYC**: nuevos usuarios se registran y necesitan verificar su identidad
- **Verificación de edad**: confirma que los usuarios cumplen los requisitos de edad mínima
- **Reverificación**: vuelve a verificar periódicamente a los usuarios existentes
- **Autenticación biométrica**: los usuarios se autentican con su rostro para realizar acciones sensibles
- **Cumplimiento en varios pasos**: flujos que requieren documento de identidad + Prueba de vida + AML + Teléfono de una sola vez
- **Cualquier escenario en el que el usuario final esté presente** e interactúe directamente### Endpoints de sesión| Endpoint | Propósito |
| - | - |
| [Crear sesión](https://docs.didit.me/es/sessions-api/create-session.md) | Genera una URL de verificación para un usuario |
| [Recuperar sesión](https://docs.didit.me/es/sessions-api/retrieve-session.md) | Obtiene los resultados completos y la decisión de una sesión |
| [Listar sesiones](https://docs.didit.me/es/sessions-api/list-sessions.md) | Consulta y filtra todas las sesiones |
| [Eliminar sesión](https://docs.didit.me/es/sessions-api/delete-session.md) | Elimina una sesión y todos los datos asociados |
| [Generar PDF](https://docs.didit.me/es/sessions-api/generate-pdf.md) | Exporta un informe de verificación en PDF |
| [Compartir sesión](https://docs.didit.me/es/sessions-api/share-session/share.md) | Genera un token para compartir con un socio mediante KYC reutilizable |
| [Importar sesión compartida](https://docs.didit.me/es/sessions-api/share-session/import.md) | Importa una sesión compartida por un socio (KYC reutilizable) |***## API independientes (para procesamiento de servidor a servidor)Las API independientes te permiten llamar a funciones de verificación concretas **directamente desde tu servidor**, sin ninguna interfaz para el usuario final. Envías los datos (imágenes, documentos, nombres) y recibes resultados estructurados.### Cómo funciona**1. Envía los datos**Tu servidor invoca un endpoint independiente (por ejemplo, `POST /v3/id-verification/`) con los datos necesarios: imágenes, documentos o campos JSON.**2. Recibe los resultados**Didit procesa la solicitud de forma síncrona y devuelve resultados de verificación estructurados en la respuesta.### Cuándo usar las API independientes| Caso de uso | Ejemplo |
| - | - |
| **Procesamiento en backend** | Ya tienes imágenes de documentos de tu propia interfaz de captura y necesitas verificarlas |
| **Verificación por lotes** | Procesar documentos de identidad en bloque subidos por un equipo de operaciones |
| **UX personalizada** | Has creado tu propio flujo de captura y quieres usar Didit solo para el análisis |
| **Comprobaciones de servidor a servidor** | Análisis AML de una lista de clientes, sin interacción del usuario |
| **Pipelines automatizados** | Comprobaciones periódicas de cumplimiento con CI/CD o cron (por ejemplo, monitorización AML diaria) |
| **Integración con sistemas existentes** | Conectar la verificación de Didit con tu sistema de gestión documental actual |
| **Llamadas a una sola función** | Solo necesitas una función (por ejemplo, solo análisis AML o solo coincidencia facial) |### API independientes disponibles**Identidad y documentos**| API | Qué hace |
| - | - |
| [Verificación de identidad](https://docs.didit.me/es/standalone-apis/id-verification.md) | Extrae y valida los datos de documentos de identidad (imágenes del anverso y el reverso) |
| [Prueba de domicilio](https://docs.didit.me/es/standalone-apis/proof-of-address.md) | Verifica documentos de domicilio (facturas de suministros, extractos bancarios, documentos oficiales) |
| [Validación de dirección](https://docs.didit.me/es/standalone-apis/address-validation.md) | Confirma que una dirección existe y la devuelve normalizada, con coordenadas |
| [Validación de base de datos](https://docs.didit.me/es/core-technology/database-validation/overview.md) | Contrasta los datos del usuario con bases de datos gubernamentales |**Document AI**| API | Qué hace |
| - | - |
| [Document AI](https://docs.didit.me/es/standalone-apis/document-ai.md) | Extrae los campos que definas de cualquier documento (PDF o imagen), con coincidencia de nombres y comprobaciones de manipulación |**Biometría y rostro**| API | Qué hace |
| - | - |
| [Prueba de vida pasiva](https://docs.didit.me/es/standalone-apis/passive-liveness.md) | Verifica que hay una persona real presente (antisuplantación) a partir de una sola imagen |
| [Coincidencia facial](https://docs.didit.me/es/standalone-apis/face-match.md) | Compara dos rostros para determinar si son la misma persona |
| [Búsqueda facial](https://docs.didit.me/es/standalone-apis/face-search.md) | Busca un rostro en todas las sesiones verificadas anteriormente (1:N) |
| [Estimación de edad](https://docs.didit.me/es/standalone-apis/age-estimation.md) | Estima la edad de una persona a partir de una imagen facial |**Cumplimiento y riesgo**| API | Qué hace |
| - | - |
| [Análisis AML](https://docs.didit.me/es/standalone-apis/aml-screening.md) | Analiza personas o empresas frente a listas de sanciones, de PEP y de vigilancia |**Verificación bancaria**| API | Qué hace |
| - | - |
| [Comprobación de cuenta](https://docs.didit.me/es/standalone-apis/bank-account-check.md) | Comprueba que una cuenta bancaria pertenece a la persona o empresa que indicas, antes de enviarle dinero |**Verificación de empresas (KYB)**| API | Qué hace |
| - | - |
| [Búsqueda en registros KYB](https://docs.didit.me/es/standalone-apis/kyb-registry-search.md) | Busca en registros de empresas por nombre, número de registro y país; hasta \$0.50 por solicitud exitosa |
| [Selección de registro KYB](https://docs.didit.me/es/standalone-apis/kyb-registry-select.md) | Obtiene el perfil completo del registro (cargos, beneficiarios finales, direcciones) de una empresa seleccionada |***## Comparación lado a lado| | Sesiones alojadas | API independientes |
| - | - | - |
| **Esfuerzo de integración** | Bajo: redirección, iframe o SDK | Medio: tú te encargas de la captura y el envío de los datos |
| **Interacción del usuario** | Sí: el usuario completa el flujo en la interfaz de Didit | No: solo entre servidores |
| **Cámara/captura** | La gestiona Didit (optimizada) | Tú proporcionas las imágenes/datos |
| **Flujos con varias funciones** | Sí: encadena funciones en un flujo | Una función por llamada a la API |
| **Optimización de la UX** | Pruebas A/B continuas | Tú controlas la UX |
| **Localización** | 54 idiomas, detección automática | No aplica (sin interfaz) |
| **Webhooks** | Notificaciones de estado automáticas | No aplica (respuesta síncrona) |
| **Tiempo de respuesta** | Asíncrono (el usuario completa el flujo a su ritmo) | Síncrono (segundos) |
| **Ideal para** | Onboarding y verificación de cara al usuario | Procesamiento en backend y automatización |
| **Visibilidad en la consola** | Ciclo de vida completo de la sesión en el panel | Aparece en la sección Manual Checks |***## Se pueden usar ambos**Sí.** Muchos equipos combinan ambos enfoques:1) **Sesiones para el onboarding**: los nuevos usuarios completan todo el flujo de verificación alojado durante el registro
2) **AML independiente para la monitorización continua**: una tarea cron vuelve a analizar cada noche a todos los usuarios aprobados frente a listas de vigilancia actualizadas
3) **Búsqueda facial independiente para detectar duplicados**: cuando se aprueba una nueva sesión, tu servidor invoca la API de búsqueda facial para comprobar si hay duplicados
4) **Verificación de identidad independiente para operaciones**: tu equipo de cumplimiento sube documentos manualmente para revisar casos límite### Ejemplo: arquitectura combinada| Tu aplicación | API de Didit | Tipo |
| - | - | - |
| **Flujo de registro de usuarios** | Sessions API (interfaz alojada) | De cara al usuario |
| **Nuevo análisis AML cada noche** | API de AML independiente | De servidor a servidor |
| **Revisión de documentos por el equipo de operaciones** | API de verificación de identidad independiente | De servidor a servidor |
| **Detección de rostros duplicados** | API de búsqueda facial independiente | De servidor a servidor |***## Primeros pasos[/es/integration/api-full-flow](https://docs.didit.me/es/integration/api-full-flow.md)[/es/getting-started/api-authentication](https://docs.didit.me/es/getting-started/api-authentication.md)[/es/integration/webhooks](https://docs.didit.me/es/integration/webhooks.md)[/es/console/workflows](https://docs.didit.me/es/console/workflows.md)***


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.