Approval — Configuration
Complete reference for all Approval node properties, expression support, and configuration guidance.
Configuration is set in the node's property panel within the BizFirstAI workflow designer. Properties marked Required must have a value at design time or via a valid expression. Properties marked Optional have sensible defaults and can be omitted.
Properties Reference
| Property | Type | Required | Default | Description |
|---|---|---|---|---|
actors |
string[] | Required | — | List of actor identifiers who will receive the approval request. Each entry can be a user ID (e.g., "user:abc123") or a role ID (e.g., "role:finance-manager"). When a role is specified, all active members of that role receive an inbox item. At least one actor is required. |
title |
string | Required | — | The short title of the approval request displayed at the top of the inbox item. Should be concise and action-oriented (e.g., "Purchase Order Approval Required"). Supports BizFirst expressions for dynamic values. |
message |
string | Required | — | The notification message sent to each actor. This appears in push/email notifications. Should summarise what action is needed. Supports BizFirst expressions. |
description |
string | Optional | "" |
Detailed description shown inside the approval inbox item. Use this to provide full context — amounts, requester name, business justification, links to supporting documents. Supports BizFirst expressions and basic HTML formatting. |
timeout_minutes |
integer | Optional | 1440 |
Number of minutes to wait for a decision before the timeout fires. When timeout occurs, the node routes to the escalated port if it has downstream connections, otherwise to error. Set to 0 to disable timeout entirely (not recommended for production). |
allow_multiple_approvals |
boolean | Optional | false |
When false (default), the workflow resumes as soon as any one actor responds. When true, the workflow waits for all listed actors to respond before resuming. In multi-approval mode, if any actor rejects, the node fires the rejected port immediately without waiting for remaining actors. |
Expression Support
The following properties support BizFirst dynamic expressions, allowing you to inject runtime workflow variable values into the approval request content. Wrap any expression in double curly braces: {{ expression }}.
| Property | Expression Support | Example |
|---|---|---|
actors |
Supported | ["{{ $var.manager_id }}", "role:finance"] |
title |
Supported | "Approve PO #{{ $var.po_number }}" |
message |
Supported | "{{ $var.requester_name }} has submitted a ${{ $var.amount }} purchase request" |
description |
Supported | "Vendor: {{ $var.vendor_name }}<br>Amount: ${{ $var.amount }}<br>Category: {{ $var.category }}" |
timeout_minutes |
Static only | 480 |
allow_multiple_approvals |
Static only | true |
Sample Configuration JSON
The following is the full node configuration object as stored in the workflow definition file:
{
"nodeType": "Approval",
"id": "approval_po_review",
"label": "CFO Purchase Approval",
"config": {
"actors": ["role:cfo", "user:finance-director-001"],
"title": "Purchase Order Approval — #{{ $var.po_number }}",
"message": "{{ $var.requester_name }} has submitted a purchase order for ${{ $var.amount }} ({{ $var.vendor_name }}). Please review and respond.",
"description": "Requester: {{ $var.requester_name }}<br>Department: {{ $var.department }}<br>Vendor: {{ $var.vendor_name }}<br>Amount: ${{ $var.amount }}<br>Justification: {{ $var.justification }}<br><a href='{{ $var.po_document_url }}'>View Document</a>",
"timeout_minutes": 240,
"allow_multiple_approvals": false
}
}
Actor Resolution
Actors can be defined using the following identifier formats:
| Format | Example | Behaviour |
|---|---|---|
| User ID | "user:abc123" |
Creates a single inbox item for the specific user. |
| Role ID | "role:finance-manager" |
Creates one inbox item for each active member of the named role at the time of suspension. |
| Expression | "{{ $var.assigned_approver }}" |
Resolves the expression at runtime; the result must be a valid user or role ID. |
Empty actor list: If the
actors array resolves to empty at runtime (e.g., a role has no active members), the node will immediately fire the error port. Always validate that actor expressions resolve to a non-empty list in your workflow's preceding logic.
Multi-Approval Mode
When allow_multiple_approvals is set to true, the Approval node follows a consensus model:
- All listed actors receive the approval request simultaneously.
- If any actor rejects, the workflow immediately resumes on the rejected port — remaining actors' pending inbox items are automatically resolved.
- If all actors approve, the workflow resumes on the approved port.
- If any actor escalates before a full response, the escalated port fires.
- The timeout clock starts from Phase 1 and applies to the whole consensus window.