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

# Inicio rápido: lanza tu verificación de identidad

> Crea tu primer flujo KYC en minutos con Didit: abre una cuenta, configura un flujo sin código, inicia una sesión y recibe webhooks. $10 gratis al mes.

Este inicio rápido te lleva de una cuenta nueva de Didit a una verificación de identidad en vivo: crea tu cuenta, construye un flujo de verificación (workflow) a partir de una plantilla, configura un webhook y copia tu clave de API, inicia una sesión de verificación con una sola llamada a la API y recibe la decisión en tiempo real.Esta página se complementa con la lección de Academy que aparece a continuación: una grabación de pantalla de 19 minutos que construye un flujo de verificación en la consola real, desde la plantilla hasta el flujo publicado, e incluye reglas, ramificaciones, precios y el enlace para compartir.[Crea tu primer flujo de verificación — Didit Academy](https://www.youtube.com/embed/7-nJ3JE20i4?rel=0\&playsinline=1)

Prompt de inicio rápido
        Copy prompt to clipboard



      
      

\<pre>

\````# Goal — ship your first Didit verification end-to-end

You are integrating Didit (https://docs.didit.me) into my project. Take me from zero to a working KYC / KYB flow: account, workflow, session, hosted UI, webhook, decision.

For the full canonical recipe (5K-token version covering SDK pick, webhook HMAC verification, every status, decision parsing), use:

https://docs.didit.me/integration/integration-prompt

That page has a "Copy Prompt" button — copy its prompt and follow it. The summary below is enough to bootstrap if you can't fetch the full prompt.

\## My application context

\<my_stack>
Stack: [framework + language, e.g. Next.js 15 + TypeScript]
Surface: [web | iOS | Android | React Native | Flutter | backend-only]
Use case: [KYC at signup | KYB at business onboarding | age gate | re-auth]
Database: [Postgres | MySQL | Mongo]
\</my_stack>

\## Steps

1\. **Register programmatically (2 calls)** — `POST https://apx.didit.me/auth/v2/programmatic/register/` then `POST https://apx.didit.me/auth/v2/programmatic/verify-email/` with the 6-char code. Save `response.application.api_key` as `DIDIT_API_KEY`.

2\. **Create a workflow** —
\```bash
curl -X POST https://verification.didit.me/v3/workflows/ \
-H "x-api-key: $DIDIT_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"workflow_label": "Standard KYC",
"workflow_type": "kyc",
"features": [
  \{"feature": "OCR"},
  \{"feature": "LIVENESS", "config": {"face_liveness_method": "PASSIVE"}},
  \{"feature": "FACE_MATCH"},
  \{"feature": "AML"}
]
}'
\```
Persist `workflow.id`.

3\. **Create a session** —
\```bash
curl -X POST https://verification.didit.me/v3/session/ \
-H "x-api-key: $DIDIT_API_KEY" \
-H "Content-Type: application/json" \
-d '{"workflow_id": "$WORKFLOW_ID", "vendor_data": "user-42", "callback": "https://myapp.com/kyc/return"}'
\```
Response contains `session_id`, `url`, `session_token`. Redirect the user to `url` (or open in the SDK / an iframe).

4\. **Register a webhook destination** — `POST https://verification.didit.me/v3/webhook/destinations/` with `{"url": "...", "subscribed_events": ["status.updated","data.updated","user.status.updated","user.data.updated"], "webhook_version": "v3"}`. Save the returned `secret`.

5\. **Receive webhooks** — verify the `X-Signature-V2` header (HMAC-SHA256 of canonical JSON; see /integration/webhooks). De-dupe on `event_id`. Respond within 5 seconds. Apply decision to your DB based on `status`.

6\. **Retrieve the decision (fallback)** — `GET https://verification.didit.me/v3/session/{session_id}/decision/`. V3 returns plural arrays (`id_verifications[]`, `liveness_checks[]`, `face_matches[]`, `aml_screenings[]`, ...). Never assume singular V2 fields.

\## Failure modes
\- Missing / wrong API key → `401 {"detail": "Invalid or missing API key"}` on verification.didit.me, `403` on apx.didit.me.
\- Invalid `workflow_id` → `400`.
\- Webhook handler slower than 5s → Didit retries with exponential backoff up to ~24h.

\## Sources of truth (cross-check before shipping)
\- /openapi-25.json — verification API
\- /openapi-auth.json — programmatic auth
\- /reference/data-models — V3 decision shape
\- /integration/integration-prompt — canonical end-to-end prompt````

\</pre>



      
      

Paste into

**1. Crea tu cuenta de Didit**1) Ve a [business.didit.me](https://business.didit.me)
2) Regístrate con SSO o con correo electrónico y contraseña
3) Crea tu **Organización**: es donde tu equipo gestiona los flujos, las claves de API y la actividad de verificación**2. Crea un flujo de verificación**Ve a **Flujos de trabajo** en la barra lateral y haz clic en **Create New**. Elige un tipo de flujo:| Tipo | Descripción |
| - | - |
| **Flujo de trabajo simple** | Los pasos se ejecutan en un orden definido: ideal para flujos de alta estándar |
| **Node-Based Workflow** | Lógica de ramificación flexible: crea rutas condicionales según los resultados de la verificación |Elige una plantilla para empezar:| Plantilla | Caso de uso |
| - | - |
| **KYC** | Alta estándar de usuarios |
| **Verificación adaptativa de edad** | Comprobación de edad con selfie y respaldo con documento de identidad |
| **Autenticación biométrica** | Reautenticación con selfie, sin contraseña |
| **Verificación de dirección** | Flujo de prueba de domicilio |Personalízalo activando o desactivando bloques: prueba de vida, coincidencia facial, AML, NFC, teléfono, correo electrónico y más.El clip siguiente retoma la lección de Academy en el minuto 2:50, donde se crea un flujo nuevo a partir de una plantilla y se configura nodo por nodo.[Crear un flujo nuevo a partir de una plantilla — Didit Academy](https://www.youtube.com/embed/7-nJ3JE20i4?start=170\&rel=0\&playsinline=1)**3. Configura el webhook y copia la clave de API**Ve a **API y Webhooks** en la barra lateral:1. Añade tu **URL del Webhook**: Didit envía aquí las actualizaciones de estado
2. Copia tu **Clave de API**: mantenla solo en el servidor y nunca la expongas en el código del frontend
3. Guarda el **secreto de firma** del destino como `DIDIT_WEBHOOK_SECRET` en tu `.env`: es necesario para verificar el HMAC `X-Signature-V2` de los webhooks entrantes> [!TIP]
>
> Puedes **probar los webhooks directamente** desde esta página con distintos datos y estados, sin necesidad de ejecutar una verificación completa. Así validas que tu integración funciona correctamente antes de salir a producción.**4. Inicia una sesión de verificación****Opción A: sesiones alojadas** (recomendada)Es nuestro método de integración preferido. Didit hace pruebas A/B del flujo alojado de forma continua, de modo que la tasa de finalización, la velocidad y la resistencia al fraude siguen mejorando sin que tengas que publicar ninguna interfaz.En la consola, haz clic en **"+"** → selecciona un flujo → genera un enlace o un código QR. También puedes crear sesiones mediante programación:```bash theme={null}
curl -X POST https://verification.didit.me/v3/session/ \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"workflow_id": "your-workflow-id"}'
```> [!NOTE]
>
> Encuentra tu `workflow_id` en **Flujos de trabajo** en la barra lateral.En la lección de Academy sobre integración, este es el minuto 3:36: la llamada para crear una sesión con su único campo obligatorio, y después los datos del vendor y la URL de callback.[Crear una sesión: el único campo obligatorio — Didit Academy](https://www.youtube.com/embed/fX03-WEu_EI?start=216\&rel=0\&playsinline=1)**Opción B: APIs independientes** (avanzada)Llama a los endpoints directamente desde tu backend, sin necesidad de sesión. Es lo mejor para flujos de servidor a servidor o personalizados:| Endpoint | Finalidad |
| - | - |
| `POST /v3/id-verification/` | Verificación de documento |
| `POST /v3/face-match/` | Selfie frente a documento de identidad |
| `POST /v3/aml/` | Sanciones y PEP |
| `POST /v3/passive-liveness/` | Detección de deepfakes |Consulta la lista completa en la [referencia de la API](https://docs.didit.me/standalone-apis/id-verification.md).**5. Recibe resultados en tiempo real**Didit envía eventos de webhook a tu endpoint, sin necesidad de sondeo.| Evento | Desencadenante |
| - | - |
| `status.updated` | Cambia el estado de una sesión de usuario o de empresa |
| `data.updated` | Cambian los datos de verificación de una sesión de usuario o de empresa |
| `user.status.updated` | Cambia el estado del usuario del vendor |
| `user.data.updated` | Cambian el perfil o los datos agregados del usuario del vendor |
| `business.status.updated` | Cambia el estado de la empresa del vendor |
| `business.data.updated` | Cambian el perfil o los datos agregados de la empresa del vendor |
| `activity.created` | Se registra un evento de actividad |
| `transaction.created` | Se crea una transacción |
| `transaction.status.updated` | Cambia el estado de una transacción |Consulta [Webhooks](https://docs.didit.me/integration/webhooks.md) para ver el formato del payload y la verificación de la firma.**6. Gestiona y monitoriza**Usa la consola para:- Ver el progreso de las sesiones en tiempo real
- Descargar informes en PDF o CSV para cumplimiento
- Añadir a la lista de bloqueo documentos o rostros sospechosos
- Actualizar o rechazar sesiones manualmenteLa lección de Academy sobre cómo leer los resultados recorre una sesión real comprobación por comprobación: advertencias, puntuaciones, el registro de eventos, las entregas de webhooks y la exportación en PDF que te pedirá tu equipo de cumplimiento.[Cómo leer el resultado de una verificación — Didit Academy](https://www.youtube.com/embed/7htTWCWsl60?rel=0\&playsinline=1)## Necesitas ayuda> **[WhatsApp](https://wa.me/+19544659728)**
>
> Respuesta más rápida: contáctanos directamente.> **[Correo electrónico](mailto:hello@didit.me)**
>
> [hello@didit.me](mailto:hello@didit.me)


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