Core concept
Flows, steps, routes and data blocks
This page explains the core building blocks of the IDnow Trust Platform and how they work together to form end-to-end flows:
- Flow: A sequence of steps that produces a final outcome of a flow
- Start & End Steps: Every flow has a Start step and one or more End steps. End steps define the final outcome
- Operational Steps: Execute logic such as reading inputs, writing data blocks, and producing verdicts
- Verdicts: Step results that determine output data blocks and the next route
- Data blocks: Typed inputs or outputs of a step, based on the verdict
- Routes: Named paths that lead to another step or an End step
Flows
A flow defines how input data moves through a series of steps until a final outcome is produced.
Start and end step
Every flow must contain exactly one Start step as its entry point and at least one End step representing a final outcome. Each session of a flow always ends in an End step, and therefore always results in a outcome that can be either accepted or rejected.
Between the Start step and the End step, you can add any combination of operational steps to perform actions, transform data and control the routing of the flow.
Operational steps
Operational Steps are modular building blocks within a flow, each representing a single operational step. Typical examples include Document-based IDV, Biometric authentication or Trust Services.
Each step session results in exactly one verdict, which in turn determines:
- which data blocks are produced or updated, and
- how the flow continues via Routes to either another Step or an End step.
Routes
Each step can produce routes, which describe the result of a step operation. For example, the routes of a Document-based IDV step are:
verifiednot_verifiedfraud_detected
In the flow, the route taken determines the next step: it either leads to a follow-up step or to an End step, which sets the final outcome shown in the API response (for example, accepted or rejected).
Example of an IDV Step with multiple routes, each mapped to a dedicated End Step.
Data blocks
Each step consumes and produces typed data blocks.
Examples of such data blocks could be ExtendedIdentity, DocumentVerification and DocumentData.
Data blocks keep data consistent as it moves through the flow. The platform determines which data blocks are available at each step, verifies that all required inputs are present, and ensures data dependencies are satisfied before executing a step.
The data block structure is preserved in the API response after a flow session, making it easy to trace data from the initial input to the final outcome.
As step output
The verdict of a step determines which data blocks it produces.
As an example, in an identity verification flow, a capture failure produces no DocumentData or ExtendedIdentity, while a capture failure or a fraud verdict always includes DocumentVerification results.
Many data blocks also carry the step’s verdict to indicate the outcome of the check that generated them.
An Identity verification step generates different data blocks depending on whether the verdict is verified, not_verified, or fraud_detected.
As step input
Some steps, such as AML screening
- produces a
PepAndSanctionsResultsdata block as output. - but require a
BasicIdentitydata block as input.
Each step defines which data blocks it requires and which it produces for each verdict.
Data blocks flow from each step’s outputs to the inputs of the next steps. These definitions allow the system to validate the flow, ensuring all required inputs are available before a step executes. The data block can be included in the initial API request when a flow is executed as shown in the example below.
Missing data blocks
If a required data block is missing, the step cannot execute. As an example, an AML screening step requires a BasicIdentity data block, which can be provided either
- in the initial API request or
- produced by an upstream step
All outputs from a step are added to the flow context, making them accessible to all of its descendant steps. As a result, any Step that generates a BasicIdentity, such as an Identity verification step, can satisfy the AML screening step's input requirement.
Input source selection
When multiple upstream steps produce data blocks of the same type, the platform uses the last produced instance by default. You can override this by configuring a step to read from a specific upstream source, ensuring the correct instance is consumed.
For example, if both the Start step and an Identity verification step produce a BasicIdentity, an AML screening step downstream can be configured to always use the verified identity from the IDV step, regardless of what else may be available in the flow context.
This configuration is optional. Steps that do not specify a source continue to use the default behavior (last produced instance).
Controlling the API response
End steps use the same mechanism to define which data blocks are included in the final API response. Without explicit configuration, the response contains all data blocks accumulated during the flow. With it, only the selected data blocks are returned alongside the OutcomeStatus.
Each End step can be configured independently. For example, an "accepted" End step may return verified identity data and document results, while a "rejected" End step may return only the outcome status.
Multiple instances of the same type
Some steps require multiple instances of the same data block type as input (for example, two BasicIdentity data blocks for comparison). These steps reference two distinct upstream sources explicitly. See Identity comparison for details.
Routes
Routes define how flows choose their next step. Routes are named exits on a step and determine which path the flow follows. Routes effectively turn step verdicts into transitions:
- If a step ends in the
verifiedscenario, the transition with port"verified"is taken.
A simplified transition object looks like this:
{
"id": "next_Step_id", // Identifier of the target step
"port": "verified" // Named port for conditional transitions (e.g., "verified", "not_verified")
}
When a step is configured with multiple output scenarios, the scenario keys act as route names (for example, verified, fraud_detected, not_verified).
Putting it together
A flow is composed of steps, verdicts, data blocks, and routes. When designing a flow:
-
Define the initial process steps For example, start with an ID verification step that outputs multiple verdicts (
verified,not_verified,fraud_detected) through corresponding routes, each connected to the appropriate next step or end step. -
Reuse outputs between Steps Data blocks produced by one step can be used as inputs to downstream steps. For instance, a
BasicIdentitydata block created during ID verification can be passed to an AML screening step, which then produces its own verdict andPepAndSanctionsResultsdata blocks. -
Extend the flow as needed Add additional steps for risk checks, digital signals, signatures, or evidence collection. Each step follows the same pattern of verdicts, data blocks, and routes.
By combining steps, verdicts, data blocks, and routes, you can build complex trust flows.
By understanding these building blocks, you can compose complex trust flows simply by wiring steps together. The platform handles session, data propagation, and audit trails automatically.