Approval
Pause the run until someone approves or rejects.
Do things in Approval
Add an Approval step and choose what it does. Choose a row to see its fields.
- Request Approval (wait)Generate approve/reject links and suspend the run until one is clicked.
- Create Approval Links (no wait)Generate approve/reject links without suspending.
- Wait for DecisionSuspend the run until a decision arrives for the given resume token (from a preceding Create Approval Links step).
Later steps read a step’s output by its name: see Use data from earlier steps.
For a step-by-step guide, see Ask for approval.
Not in your list? See When an app isn’t here.
For developers
In the API, which calls apps pieces, Approval is pieceId: "approval" with the actions request, create_links, wait. Get an app returns every field.
What each action does outside the run: request pure, create_links pure, wait pure. See How versions and side effects work.
Approval › Request Approval (wait)
Generate approve/reject links and suspend the run until one is clicked. Nothing is sent: this is the in-product approval. The run pauses and is decided from the run page, where the links appear as Approve/Reject buttons. To ask by email in one step, use the Email app's "Send for Approval". To ask through any other channel (Slack, Teams, an internal tool), use Create Approval Links → your own sending step → Wait for Decision. This step cannot send them itself, because it suspends immediately and no later step would run. The decision is exposed as {{steps.<this>.resumeData.decision}} (and on {{steps.<this>.status}} once resumed). Only works on the main chain: inside a branch arm or loop body the step fails, because a suspended run can only re-enter the top level.
- Title · Optional
What is being approved.
- Details · Optional
Context shown to the approver.
- Approvers · Optional
Who should decide (such as emails). Recorded on this step's output and shown on the run page. This step does not notify them. To actually reach them, use the Email app's "Send for Approval" instead of this step, or Create Approval Links → your own sending step → Wait for Decision.
- Auto-continue after (timeout) · Optional
Resume automatically after this long if no decision arrives (0 = wait indefinitely). On timeout nobody answered, so branch on status == "approved" (or resumeData.decision), never on the step merely having finished.
Default: 0.
- Timeout Unit · Optional
The unit for the auto-continue time above: seconds, minutes, hours, or days. In expression mode an unrecognized unit fails the step rather than silently auto-continuing after seconds.
Options: Seconds, Minutes, Hours, Days.
Default: Hours.
- Public Base URL · Optional
Public URL of this installation, used to build approve/reject links. Defaults to the PUBLIC_API_URL env var.
Approval › Create Approval Links (no wait)
Generate approve/reject links without suspending. Send them (such as by email), then suspend later with a Wait-for-Decision step using the same token.
- Title · Optional
A short label for what is being approved, shown on the approval page (such as Approve expense #1042).
- Public Base URL · Optional
Public URL of this installation, used to build approve/reject links. Defaults to the PUBLIC_API_URL env var.
Approval › Wait for Decision
Suspend the run until a decision arrives for the given resume token (from a preceding Create Approval Links step). This is the half of a delivered approval that waits: put the step that actually notifies the approver (Slack, Gmail, Email, an HTTP call to anything) between Create Approval Links and this one, and the run holds here until the link is answered however it was delivered. Only works on the main chain: inside a branch arm or loop body the step fails, because a suspended run can only re-enter the top level.
- Resume Token · Required
Token from a Create Approval Links step (such as {{steps.links.resumeToken}}).
- Title · Optional
What is being approved. Shown on the run page while the run waits, so whoever finds it knows what they are deciding.
- Details · Optional
Context shown beside the decision on the run page.
- Approvers · Optional
Who was asked. Recorded for the run page and for later reading. The notifying step you put before this one is what actually reaches them.
- Auto-continue after (timeout) · Optional
Resume automatically after this long if no decision arrives (0 = wait indefinitely). On timeout nobody answered, so branch on status == "approved" (or resumeData.decision), never on the step merely having finished.
Default: 0.
- Timeout Unit · Optional
The unit for the auto-continue time above: seconds, minutes, hours, or days. In expression mode an unrecognized unit fails the step rather than silently auto-continuing after seconds.
Options: Seconds, Minutes, Hours, Days.
Default: Hours.
- Public Base URL · Optional
Public URL of this installation, used to build approve/reject links. Defaults to the PUBLIC_API_URL env var.