Flows
The named composition of checks that a verification runs
A flow is a saved, ordered list of checks with a name and an id. It is the unit you version, reuse
and reason about. A full KYC onboarding is one flow. An age gate is another. A liveness-only
anti-cheat check is a third. Flow ids start with flw_.
Separating the flow from the verification means you can change what a check-out journey asks for without shipping backend code: update the flow in the console, and the next verification created against that id runs the new composition.
Steps
Each step names a check type and says whether it is required.
{
"name": "ID and liveness",
"steps": [
{ "type": "document", "required": true },
{ "type": "liveness", "required": true },
{ "type": "face_match", "required": true }
]
}required is what drives the roll-up. A required check that rejects rejects the whole verification.
An optional check that rejects does not, though it still appears in the result with its own verdict
and reason codes so you can act on it yourself. See Verdicts.
Using a flow
Reference the id when you create a verification:
{ "flow": "flw_id_and_liveness", "applicant": { "reference_id": "your-user-123" } }The flow's steps are snapshotted onto the verification at creation time. Editing the flow afterwards does not retroactively change verifications that are already running, so a user midway through a session never sees the ground shift under them.
Inline checks
For a one-off composition that does not deserve a saved flow, send checks instead of flow:
{
"checks": [
{ "type": "liveness", "required": true },
{ "type": "age_estimation", "required": true }
],
"applicant": { "reference_id": "your-user-123" }
}Send one or the other. If you send neither, the default preset runs: document, liveness and face match.
Prefer saved flows in production
Inline checks are convenient for experiments, but a saved flow gives you one id to audit, one place to change, and a stable label on every verification that ran it.
Managing flows
Flows are created, listed, updated and deleted through /v1/flows with a secret key, or through the
console. Deleting a flow does not affect verifications that already ran it, since their steps were
snapshotted at creation.
Engine tiers
Which engine tier runs your checks is an account-level entitlement, not a per-flow setting. Standard
is the default. Pro and Pro Max raise document coverage and accuracy on the same API surface, so
moving between tiers never changes your integration. The tier that ran a check is reported back on
the check as provider_tier.