Approval — Examples
Ready-to-use configuration examples covering common approval scenarios.
config block of the Approval node. Copy and adapt the JSON to fit your workflow's variable names and actor IDs. BizFirst expressions in {{ }} resolve against your workflow's variable context at runtime.
01 Single Approver — Purchase Order > $10,000
Routes any purchase order exceeding the $10,000 threshold to the CFO role for approval. A 4-hour timeout automatically escalates the request if the CFO does not respond. The description embeds all PO details dynamically.
{
"actors": ["role:cfo"],
"title": "Purchase Order Approval Required — #{{ $var.po_number }}",
"message": "{{ $var.requester_name }} has submitted a purchase order for ${{ $var.amount }}. Your approval is required within 4 hours.",
"description": "<b>PO Number:</b> {{ $var.po_number }}<br><b>Requester:</b> {{ $var.requester_name }}<br><b>Amount:</b> ${{ $var.amount }}<br><b>Vendor:</b> {{ $var.vendor_name }}<br><b>Justification:</b> {{ $var.justification }}<br><a href='{{ $var.document_url }}'>View Full Purchase Order</a>",
"timeout_minutes": 240,
"allow_multiple_approvals": false
}
02 Multi-Approver — Contract Sign-Off (Legal + Finance)
Requires both the Legal team and the Finance Director to approve a vendor contract before it is dispatched for external signature. allow_multiple_approvals: true ensures unanimous consent. A 48-hour window is provided for a full review cycle.
{
"actors": ["role:legal-team", "user:finance-director-001"],
"title": "Contract Review Required — {{ $var.contract_name }}",
"message": "A new vendor contract with {{ $var.vendor_name }} (value: ${{ $var.contract_value }}) requires your review and sign-off before dispatch.",
"description": "<b>Contract:</b> {{ $var.contract_name }}<br><b>Vendor:</b> {{ $var.vendor_name }}<br><b>Total Value:</b> ${{ $var.contract_value }}<br><b>Term:</b> {{ $var.contract_term }} months<br><a href='{{ $var.contract_url }}'>Review Contract Document</a>",
"timeout_minutes": 2880,
"allow_multiple_approvals": true
}
03 Employee Leave Request — Dynamic Manager Assignment
Dynamically routes the leave request to the employee's direct manager, whose ID is stored in $var.manager_id from the HR system lookup performed in a preceding workflow step.
{
"actors": ["{{ $var.manager_id }}"],
"title": "Leave Request — {{ $var.employee_name }}",
"message": "{{ $var.employee_name }} has requested {{ $var.leave_days }} days of {{ $var.leave_type }} leave from {{ $var.start_date }} to {{ $var.end_date }}. Please approve or reject.",
"description": "<b>Employee:</b> {{ $var.employee_name }}<br><b>Leave Type:</b> {{ $var.leave_type }}<br><b>Duration:</b> {{ $var.leave_days }} days ({{ $var.start_date }} – {{ $var.end_date }})<br><b>Reason:</b> {{ $var.leave_reason }}<br><b>Remaining Balance:</b> {{ $var.leave_balance }} days",
"timeout_minutes": 1440,
"allow_multiple_approvals": false
}
04 IT Change Request — CAB Board Approval
Requires all members of the IT Change Advisory Board (CAB) to approve an infrastructure change before automated deployment begins. A strict 72-hour window allows for proper risk assessment. Rejection by any single CAB member immediately blocks deployment.
{
"actors": ["role:it-change-advisory-board"],
"title": "CAB Approval Required — {{ $var.change_title }}",
"message": "Change Request {{ $var.cr_number }} has been submitted for CAB approval. Risk level: {{ $var.risk_level }}. Please review and submit your vote.",
"description": "<b>Change Request:</b> {{ $var.cr_number }}<br><b>Title:</b> {{ $var.change_title }}<br><b>Risk Level:</b> {{ $var.risk_level }}<br><b>Impact:</b> {{ $var.impact_description }}<br><b>Rollback Plan:</b> {{ $var.rollback_plan }}<br><b>Scheduled Window:</b> {{ $var.maintenance_window }}<br><a href='{{ $var.cr_document_url }}'>Full Change Document</a>",
"timeout_minutes": 4320,
"allow_multiple_approvals": true
}
05 Expense Claim — Fast-Track with Short Timeout
A finance team member reviews expense claims. To meet payment processing SLAs, a tight 2-hour timeout is set. After timeout, the claim is automatically escalated to the Finance Manager. The description includes a direct link to the scanned receipts.
{
"actors": ["role:finance-reviewer"],
"title": "Expense Claim — {{ $var.employee_name }} — ${{ $var.claim_total }}",
"message": "{{ $var.employee_name }} has submitted an expense claim for ${{ $var.claim_total }}. Please review and process within 2 hours to meet today's payment run.",
"description": "<b>Employee:</b> {{ $var.employee_name }}<br><b>Claim Period:</b> {{ $var.claim_period }}<br><b>Total Amount:</b> ${{ $var.claim_total }}<br><b>Categories:</b> {{ $var.expense_categories }}<br><a href='{{ $var.receipts_url }}'>View Receipts</a>",
"timeout_minutes": 120,
"allow_multiple_approvals": false
}