Blocks
Approval Block
Pause workflow execution for human approval before continuing
The Approval block implements human-in-the-loop workflows. It pauses execution and waits for a human to approve or reject before the workflow continues. Use it for high-value transactions, sensitive operations, or compliance-required review steps.
Configuration
| Option | Type | Description |
|---|---|---|
title | string | Title displayed in the approval request |
description | string | Details about what is being approved (supports template variables) |
notifyChannel | string | Slack channel to post the approval request |
approvers | array | List of users who can approve |
timeout | string | How long to wait for a decision, for example 48h or 7d (default 7d) |
timeoutAction | string | What happens at the timeout: fail (default), reject, approve, or escalate |
How It Works
- The workflow reaches the Approval block and pauses execution
- A notification is sent to the configured channel with approve/reject buttons
- An authorized approver clicks Approve or Reject
- An approval continues the workflow. A rejection fails the run at this step unless the step's error handling is
continue, in which case later steps branch ondecision.approved(Taking the rejected path)
Outputs
| Output | Type | Description |
|---|---|---|
decision.approved | boolean | Whether the request was approved |
decision.reason | string | The approver's comment, or Auto-rejected due to timeout |
decision.decidedBy | string | Who decided (system for a timeout) |
decision.decidedAt | string | Timestamp of the decision |
timedOut | boolean | Whether the decision came from the timeout |
Example Patterns
High-Value Invoice Approval
Stripe (create invoice) -> Condition (amount > $5,000?)
-> True: Approval (finance manager review)
-> Approved: Stripe (finalize and send)
-> Rejected: Slack (notify requester)
-> False: Stripe (finalize and send)Discount Authorization
HubSpot (deal with discount) -> Condition (discount > 20%?)
-> True: Approval (VP Sales review)
-> Approved: Stripe (create invoice with discount)
-> Rejected: Slack (notify sales rep)Best Practices
- Set timeouts for time-sensitive workflows. A 48-hour timeout prevents workflows from hanging indefinitely when approvers are unavailable.
- Include context in the description. Use template variables to show the approver exactly what they are approving: amounts, customer names, and relevant details.
- Notify via Slack for fast response. Approval requests sent to Slack channels get faster responses than email notifications.
Frequently Asked Questions
It follows timeoutAction. With reject, the request is auto-rejected and handled like any rejection: the run fails at this step unless its error handling is continue, which sends it down the rejected path. With fail (the default), this step fails; if it continues on error, later steps read its fallback output instead of a decision.
The current implementation requires a single approval. The first authorized approver to act (approve or reject) determines the outcome. For multi-level approvals, chain multiple Approval blocks.
Approval requests are sent as interactive Slack messages to the configured channel. Approvers can click Approve or Reject directly in Slack. The approval status is also visible in the workflow execution dashboard.
Yes. Approval requests can be resolved programmatically via the REST API, which enables custom approval interfaces or integration with existing approval systems.
Loopfour