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

# Jornada de verificação do usuário: fluxo KYC e UX

> A verificação da Didit de ponta a ponta: captura do documento, prova de vida biométrica, novas tentativas inteligentes e feedback em tempo real.



Prompt do ciclo de vida da sessão
        Copy prompt to clipboard



      
      

\<pre>

\````# Goal — drive a user through a full verification session

The session is the unit you build against. One `POST /v3/session/` returns a hosted URL; your user opens it; Didit runs the workflow; you receive a webhook with the decision.

For the complete recipe (SDK pick per platform, HMAC signature pipeline, decision parsing, every status), copy the canonical prompt at:

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

\## Session lifecycle at a glance

\| Phase | Trigger | What happens |
\|---|---|---|
\| Create | `POST https://verification.didit.me/v3/session/` | Returns `session_id`, `url`, `session_token`. Status = `Not Started`. |
\| User opens `url` | SDK / iframe / redirect | Status flips to `In Progress`. The hosted flow handles country, ID capture, liveness, retries. |
\| Processing | Didit backend | OCR, liveness, face match, AML, etc. run; per-feature plural arrays populate on the decision. |
\| Decision | `status.updated` webhook | One of `Approved`, `Declined`, `In Review`, `Awaiting User` (KYB resub), `Resubmitted`, `Abandoned`, `Expired`, `Kyc Expired`. |

\## 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"
}'
\```

Always pass `vendor_data` — it is the linking key that binds the session to the persistent [User entity](/entities/users/overview). Without it the session is orphaned.

\## Receive the decision

Webhook (recommended) — register a destination with `webhook_version: "v3"` subscribed to `status.updated` and `data.updated`. Verify the `X-Signature-V2` header (HMAC-SHA256 of canonical JSON).

Polling fallback —
\```bash
curl https://verification.didit.me/v3/session/$SESSION_ID/decision/ \
-H "x-api-key: $DIDIT_API_KEY"
\```

The V3 decision returns plural arrays for every feature: `id_verifications[]`, `liveness_checks[]`, `face_matches[]`, `aml_screenings[]`, `nfc_verifications[]`, `proof_of_address_checks[]`, etc. Never assume V2 singular fields.

\## Failure modes

\- Missing API key → `401 {"detail": "Invalid or missing API key"}`.
\- Invalid `workflow_id` → `400`.
\- User abandons the flow → status becomes `Abandoned`.
\- Workflow asks for resubmit → status `Resubmitted`, payload includes `resubmit_info`; re-deliver the same `url`.

\## Sources of truth

\- /sessions-api/create-session — request body schema
\- /sessions-api/retrieve-session — V3 decision schema
\- /integration/verification-statuses — literal status strings
\- /integration/webhooks — signature verification, retries
\- /reference/data-models — per-feature decision shape
\- /integration/integration-prompt — canonical end-to-end prompt````

\</pre>



      
      

Paste into

Este guia explica o que um usuário final típico vive durante uma sessão de **verificação de documento de identidade + teste de prova de vida** com a Didit e destaca as otimizações de UX que sustentam altas taxas de conclusão.Esta lição da Didit Academy acompanha o fluxo hospedado exatamente como o usuário o vê: a primeira tela, a captura do documento, a selfie de prova de vida e cada tela de resultado, de aprovado a recusado.[O que seus usuários realmente veem — Didit Academy](https://www.youtube.com/embed/LzGe-dMWjUw?rel=0\&playsinline=1)## Visão geral do fluxo![Jornada de verificação de identidade da Didit, da tela inicial à captura do documento e da selfie até o resultado](https://mintcdn.com/didit-0f962782/z6T2GHM4Zh-iSj-K/images/user-verification-flow.png?fit=max\&auto=format\&n=z6T2GHM4Zh-iSj-K\&q=85\&s=cc77846e25a476c7e91281295f079e80)**1. Tela inicial**O usuário chega a uma tela limpa e com a sua marca, que define expectativas (por exemplo, "Você vai precisar do seu documento e do seu rosto"). Isso reduz o abandono ao eliminar a incerteza.**2. Seleção de país e documento**O usuário seleciona o país e o tipo de documento (passaporte, documento de identidade etc.).> [!NOTE]
>
> Se o seu fluxo estiver configurado para um **único tipo de documento**, esta tela é **ignorada automaticamente**, levando o usuário direto para a captura.**3. Captura do documento com novas tentativas inteligentes**O usuário fotografa a frente do documento.
**Verificação de qualidade no dispositivo** - Antes de enviar, o SDK verifica reflexo, desfoque e bordas cortadas. Se detectar um problema, pede ao usuário que tire a foto novamente.**Validação no backend com nova tentativa guiada** - Depois do envio:- **Aprovado** → segue para a prova de vida
- **Reprovado** → o usuário vê instruções específicas (por exemplo, "Documento vencido", "MRZ ilegível - tire a foto de novo com mais luz") em vez de um erro genéricoEsse ciclo de novas tentativas autônomo aumenta significativamente as taxas de conclusão. Veja a lista completa de resultados de validação em [Avisos da verificação de identidade](https://docs.didit.me/core-technology/id-verification/warnings-id-verification.md).**4. Prova de vida + correspondência facial**Uma selfie de prova de vida garante que o usuário está fisicamente presente e impede ataques de repetição e deepfake. Se o usuário não responder a tempo, o processo **tenta novamente uma vez de forma automática** em vez de falhar de imediato.**5. Resultado final**Depois que todas as verificações terminam, o usuário vê um de três resultados:| Resultado | Descrição |
| - | - |
| **Aprovado** | Todas as verificações passaram. Os dados são extraídos e ficam disponíveis por API/webhook. |
| **Recusado** | O sistema determinou que a verificação não pode ser aprovada. |
| **Em revisão** | As verificações automáticas foram inconclusivas e exigem revisão manual. |Com UX inteligente, validação progressiva, feedback acionável e novas tentativas fluidas, a jornada de verificação da Didit mantém os bons usuários avançando e os agentes mal-intencionados de fora, sem intervenção manual.


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