Skip to main content

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:

  1. Verifying ID document (v3): Anna's identity document is checked.
  2. 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​

  1. Create the session. When Anna applies, the bank's backend creates a session for the flow. The session starts with sessionStatus CREATED, then moves to RUNNING when the workflow engine starts it.
  2. Send Anna into the flow. The backend sends Anna to the playerUrl from the response, or starts the mobile SDK with the session token.
  3. Anna completes the steps. Each step produces data blocks. The document step produces a Verification data block, and the screening step produces an AmlScreeningResults data block. Each step's route decides where the flow goes next.
  4. The webhook arrives. When the flow reaches its End step, the session moves to COMPLETED and IDnow sends a session.completed webhook event.
  5. The backend fetches the result. The backend calls Get session results and reads outcome: accepted.
  6. 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, but outcome is rejected. The backend reads Verification.terminationReason.code from 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 ABORTED and IDnow sends session.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 EXPIRED and IDnow sends session.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​

ArtifactIn Anna's storyReference
FlowThe bank's account-opening flow with two stepsCore concepts
SessionAnna's single run through that flowSessions
sessionStatusCREATED, then RUNNING, then COMPLETEDSessions
outcomeaccepted, or rejected if a step does not passInterpret session results
Data blockVerification and AmlScreeningResultsData blocks
Reason codeVerification.terminationReason.code when Anna is rejectedRejection reasons
Webhook eventsession.completed, session.aborted or session.expiredWebhook events