Portal Community
All examples below show the 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
}
Outcome: On approved: downstream nodes update the ERP, notify the procurement team, and release the PO for ordering. On rejected: the requester receives the CFO's comments. On escalated (timeout): the Finance Director is notified for urgent review.

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
}
Outcome: Only fires approved when both Legal team members and the Finance Director have all approved. If any party rejects, the rejected port fires immediately, the contract is returned to the originator with consolidated feedback, and all pending inbox items are automatically closed.

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
}
Outcome: On approved: the HR system is updated, the employee's calendar is blocked, and a confirmation message is sent to the employee. On rejected: the employee receives the manager's decision along with any comments. On escalated (24-hour timeout): the HR team is notified to follow up with the manager.

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
}
Outcome: Unanimous CAB approval triggers the automated Terraform/Ansible deployment pipeline. Any rejection routes to a hold state with consolidated rejection reasons sent to the change manager. Timeout escalates to the CISO for emergency review.

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
}
Outcome: Approval queues the reimbursement in the next payment batch and sends the employee a confirmation. Rejection notifies the employee with the reason. Timeout (2-hour escalation) routes to the Finance Manager and sends an urgent Slack alert to the payroll team.