Workflow Manifest Reference
A workflow is defined by a declarative manifest (JSON). It lists the steps to run and maps named outcomes to actions. This page describes its shape.
Top-level structure
| Field | Description |
|---|---|
workflowName | Unique name within the tenant. |
forked_from | Name of the predefined workflow this was forked from (custom workflows only). |
meta | Display label and default locale. |
steps[] | Ordered list of steps to execute. |
outcomes | Map of named outcome → list of actions to run. |
Step object
Every step — capture or evaluation — has a uniform shape:
| Field | Description |
|---|---|
order | Numeric position; drives execution sequence. |
name | Human-readable label. |
action | The building block to run (e.g. a capture component or an evaluation step). |
params | Action-specific settings (retry counts, timeouts, allowed documents, Trust Factor profile, decision rules). |
A decision step carries a rule table in its params: each rule has a when condition (CEL), an outcome name, and optionally terminate (end with an Accept/Review/Reject state) and a reason. An optional default handles the no-match case; without it, the workflow falls through to the next step.
Illustrative example
A trimmed onboarding manifest — capture a document and a selfie, evaluate trust and uniqueness, then decide:
{
"workflowName": "onboarding_standard",
"meta": { "label": "Standard Onboarding", "localeDefault": "en" },
"steps": [
{ "order": 1, "name": "Document", "action": "document_capture",
"params": { "allowed_documents": [{ "SVK": "_ALL" }], "bad_capture_retries": 5 } },
{ "order": 2, "name": "Face capture", "action": "face_capture" },
{ "order": 3, "name": "Trust factor eval", "action": "tf_eval",
"params": { "profile": "onboarding_strict" } },
{ "order": 4, "name": "Face duplicity check", "action": "face_duplicity_check" },
{ "order": 5, "name": "Decide", "action": "decision",
"params": {
"rules": [
{ "when": "tf_eval.result == 'reject'", "outcome": "failed", "terminate": "reject" },
{ "when": "tf_eval.result == 'review'", "outcome": "needs_review", "terminate": "review" },
{ "when": "face_duplicity_check.result == 'blocklist'", "outcome": "blocked", "terminate": "reject" },
{ "when": "face_duplicity_check.result == 'customer'", "outcome": "returning", "terminate": "accept" }
],
"default": { "outcome": "new_unique", "terminate": "accept" }
} }
],
"outcomes": {
"new_unique": { "actions": ["create_new_customer", "repoint_primary_DI"] },
"returning": { "actions": ["add_new_DI_to_customer"] },
"blocked": { "actions": ["1N_add_current_to_blocklist"] },
"needs_review": { "actions": ["1N_move_to_review"] },
"failed": { "actions": [] }
}
}
Building blocks (illustrative)
Capture steps (run on the device): mobile_redirect, document_capture, face_capture, smile_capture, multirange_capture, NFC_capture, external_capture.
Evaluation steps (run server-side): tf_eval (trust factor evaluation), face_duplicity_check, document_duplicity_check, matching (1:1 face comparison), decision.
Actions (run on an outcome): create_new_customer (also adds the person to the Customer watchlist), add_new_DI_to_customer (merge), repoint_primary_DI, 1N_add_current_to_blocklist, 1N_move_to_review, emit_event.
The exact identifiers, parameters, and full catalog are provided with the product and validated when a workflow is saved.
Validation
On save/publish, a manifest is checked for: schema correctness; that every action, Trust Factor profile, and document set resolves; that conditions parse and type-check; and that every outcome name used by a rule is defined in outcomes and every path reaches a valid terminal state. The dashboard exposes a Validate action that runs these checks on demand.