A workflow defines the verification pipeline for a session — which checks to run, in what order, and how to route based on results. Workflows are directed acyclic graphs (DAGs) where each node is a check, a conditional branch, or a terminal outcome.
When a session enters processing, the workflow engine:
approved, rejected, or needs_reviewThe engine supports automatic retries (up to 4 per check), external gates for human-in-the-loop decisions, and percentage-based rollout for canary deployments.
Workflows are versioned — every edit creates an immutable version snapshot for audit and rollback. Sessions always execute against the version that was active when processing began.
Workflows use a graph format with four node types:
The entry point. Every workflow has exactly one.
Executes a verification check. Routes to different nodes based on the outcome.
Routes based on extracted data or check results. Evaluates conditions in order and takes the first matching route, with a default fallback.
Supported operators: >=, <=, >, <, ==, !=, in, not_in,
contains, exists.
The final outcome. Every path through the graph must reach a terminal.
Pauses the workflow and waits for an external decision via API callback. Useful for integrating with your own decision engine.
When the workflow pauses, the session status changes to awaiting_external and
a session.awaiting_external webhook is fired. Your server can then call the
resume endpoint with the decision.
A standard KYC workflow that extracts document data, verifies biometrics, screens against watchlists, and auto-approves or routes to review:
Workflows can declare which data they need from the capture flow:
The capture UI automatically adjusts to collect the required data. If a workflow requires proof of address, the capture flow adds an additional upload step.
Deploy workflow changes gradually with percentage-based rollout:
25% of new sessions will use this workflow version; the remaining 75% continue using the previous version. The routing is deterministic per session ID, so the same session always gets the same version.
Each organization has one default workflow per environment (sandbox and live).
When a session is created without a workflow_id, the default workflow is used.
The workflow engine validates graphs before publishing:
start nodeon_pass and on_fail routesInvalid workflows cannot be published.