CascadeNode
One node of a cascade. `id` and `type` are always required; the remaining required keys depend on `type` (see `x-required-keys-by-type`): | type | required keys | purpose | |---|---|---| | `ApplicantSource` | — | Entry point; exposes the trigger payload as `context.applicant`. Exactly one per cascade. | | `BillingProduct` (alias `Product`) | `billing_product_code` | Pulls a report (credit, criminal, eviction, identity, income). | | `IfElse` (alias `Condition`) | `branches` | Evaluates conditions and routes to `pass_steps`, `human_review_steps` or `fail_steps`. | | `Wait` | `wait` | Pauses for `wait.duration` × `wait.unit`. | | `GoTo` | `target_step` | Runtime jump to another node (not a graph edge). | | `ShowResults` | — | Terminal node that surfaces collected outputs. | | `Action` | `action_type` | `Approve`, `SendEmail` (reads `email`), `AdverseAction` (reads `adverse_action`), `InternalNotification` (reads `internal_notification`). | `Product` and `Condition` are legacy aliases the engine still resolves; new definitions should use `BillingProduct` and `IfElse`. Unknown keys are tolerated and ignored by the engine.
CascadeNode has 16 top-level fields;
id, type are always present.
Fields typed as another schema link to that schema's page, and nested objects expand in place below.
The machine-readable definition is #/components/schemas/CascadeNode in
openapi.json;
the example in the right-hand rail is synthesized from the field examples in that spec.
Fields
-
idstring required Unique within the definition, e.g. `step_credit`. Edge keys reference nodes by this value. -
typestring required One ofApplicantSourceBillingProductProductIfElseConditionWaitGoToShowResultsAction -
namestring Human-readable label shown in the builder and in `step_outputs`. -
next_steparray of string Default forward edge — ids of the node(s) to run next. -
billing_product_codestring `BillingProduct` / `Product` only. The product to pull, e.g. `EQF1003` (Equifax credit), `TUC1001` (TransUnion credit), `CIC4002` (criminal), `CIC4003` (eviction). May also be nested as `config.billing_product_code`. -
configobject Optional per-node configuration. `store_result_as` names the key under which a product's output is stored.-
store_result_asstring -
billing_product_codestring Alternative location for `billing_product_code`.
-
-
branchesobject `IfElse` / `Condition` only. Conditions for the `pass` branch and (optionally) the `human_review` branch; anything that matches neither takes `fail_steps`.-
passCascadeBranch A branch of an `IfElse` node — one or more condition groups combined with `group_logic`.Schema: CascadeBranch
-
group_logicstring How the condition groups combine. Defaults to `and`. One ofandor -
condition_groupsarray of object-
logicstring How the conditions inside this group combine. Defaults to `and`. One ofandor -
conditionsarray of CascadeCondition required-
source_node_idstring required The `id` of the product node whose output is compared. -
fieldstring required Exact output field path from that product's schema, e.g. `creditScore.fico9`. -
operatorstring required One ofequalsnot_equalsgreater_thangreater_than_or_equalless_thanless_than_or_equalcontainsnot_containsstarts_withends_withis_emptyis_not_emptyis_trueis_false -
valueone of The comparison value. Required for every operator except the unary ones (`is_empty`, `is_not_empty`, `is_true`, `is_false`), which accept `null` or no `value` at all.-
option 1string, nullable -
option 2number -
option 3boolean
-
-
-
-
-
human_reviewCascadeBranch A branch of an `IfElse` node — one or more condition groups combined with `group_logic`.Schema: CascadeBranch
-
group_logicstring How the condition groups combine. Defaults to `and`. One ofandor -
condition_groupsarray of object-
logicstring How the conditions inside this group combine. Defaults to `and`. One ofandor -
conditionsarray of CascadeCondition required-
source_node_idstring required The `id` of the product node whose output is compared. -
fieldstring required Exact output field path from that product's schema, e.g. `creditScore.fico9`. -
operatorstring required One ofequalsnot_equalsgreater_thangreater_than_or_equalless_thanless_than_or_equalcontainsnot_containsstarts_withends_withis_emptyis_not_emptyis_trueis_false -
valueone of The comparison value. Required for every operator except the unary ones (`is_empty`, `is_not_empty`, `is_true`, `is_false`), which accept `null` or no `value` at all.-
option 1string, nullable -
option 2number -
option 3boolean
-
-
-
-
-
-
pass_stepsarray of string `IfElse` only. Node ids to run when the `pass` branch matches. -
human_review_stepsarray of string `IfElse` only. Node ids to run when the `human_review` branch matches; the execution pauses with `needs_human_review: true` until a review decision resumes it. -
fail_stepsarray of string `IfElse` only. Node ids to run when no branch matches. -
action_typestring `Action` only. One ofApproveSendEmailAdverseActionInternalNotification -
emailobject `Action` with `action_type: SendEmail`. Fields support `{{variable}}` interpolation from the execution context.-
tostring -
subjectstring -
bodystring
-
-
adverse_actionobject `Action` with `action_type: AdverseAction`. `send_strategy: draft_first` parks the notice for human review before sending.-
recipientstring -
action_takenstring The action box ticked on the notice: `denied` (application denied), `revoked` (credit revoked or terms changed unfavorably), `adverse_employment` (adverse employment action) or `other_action`. Cascades the AI designer generates always use `denied`. One ofdeniedrevokedadverse_employmentother_action -
send_strategystring One ofdraft_firstauto_send -
reasonstring
-
-
internal_notificationobject `Action` with `action_type: InternalNotification`. Operator-facing notification settings. -
waitobject `Wait` only. The delay before the next node runs.-
durationnumber -
unitstring One ofsecondsminuteshoursdaysweeks
-
-
target_stepstring `GoTo` only. The node id to jump to.