How a verification works
Follow one user through a flow, from session creation to business decision
This page follows one user, Anna, as she opens a bank account. It shows how the core concepts connect in practice: flows, sessions, statuses, outcomes, data blocks and webhook events.
The flow
The bank has designed and published a flow with two operational steps:
- Verifying ID document (v3): Anna's identity document is checked.
- AML screening (v1): Anna is screened against sanctions and politically exposed persons lists.
If both steps pass, the flow reaches an End step with the outcome accepted. If either step does not pass, it reaches an End step with the outcome rejected.
Step by step
- Create the session. When Anna applies, the bank's backend creates a session for the flow. The session starts with
sessionStatusCREATED, then moves toRUNNINGwhen the workflow engine starts it. - Send Anna into the flow. The backend sends Anna to the
playerUrlfrom the response, or starts the mobile SDK with the session token. - Anna completes the steps. Each step produces data blocks. The document step produces a
Verificationdata block, and the screening step produces anAmlScreeningResultsdata block. Each step's route decides where the flow goes next. - The webhook arrives. When the flow reaches its End step, the session moves to
COMPLETEDand IDnow sends asession.completedwebhook event. - The backend fetches the result. The backend calls Get session results and reads
outcome:accepted. - The bank acts. The backend opens Anna's account and fetches the data blocks it needs for its records.
When it goes differently
- Rejected. If Anna's document cannot be verified, the flow still reaches an End step and the session is still
COMPLETED, butoutcomeisrejected. The backend readsVerification.terminationReason.codefrom the data blocks to see why, and decides whether to let Anna try again. See Rejection reasons. - Aborted. If Anna closes the flow, the session moves to
ABORTEDand IDnow sendssession.aborted. There is no outcome. If Anna comes back, the backend starts a new session. - Expired. If Anna leaves the flow unfinished until the session lifetime runs out (24 hours by default), the session moves to
EXPIREDand IDnow sendssession.expired. There is no outcome, and the backend starts a new session when needed.
For every combination of status, outcome and webhook, see the decision matrix in Interpret session results.
How the pieces connect
| Artifact | In Anna's story | Reference |
|---|---|---|
| Flow | The bank's account-opening flow with two steps | Core concepts |
| Session | Anna's single run through that flow | Sessions |
sessionStatus | CREATED, then RUNNING, then COMPLETED | Sessions |
outcome | accepted, or rejected if a step does not pass | Interpret session results |
| Data block | Verification and AmlScreeningResults | Data blocks |
| Reason code | Verification.terminationReason.code when Anna is rejected | Rejection reasons |
| Webhook event | session.completed, session.aborted or session.expired | Webhook events |