Skip to main content

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​

FieldDescription
workflowNameUnique name within the tenant.
forked_fromName of the predefined workflow this was forked from (custom workflows only).
metaDisplay label and default locale.
steps[]Ordered list of steps to execute.
outcomesMap of named outcome → list of actions to run.

Step object​

Every step — capture or evaluation — has a uniform shape:

FieldDescription
orderNumeric position; drives execution sequence.
nameHuman-readable label.
actionThe building block to run (e.g. a capture component or an evaluation step).
paramsAction-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.

See also​