# Approvals

Canonical: https://useformwork.com/docs/process/approvals

Updated: 2026-10-09

Ask people inside or outside your team to approve or reject an entry, by emailed link or in FormWork, and send reminders with automations.

An approval stage asks one or more people to approve or reject each entry that reaches it, then moves the entry on by itself. Approvers get an email with a link, so they don't need a FormWork account. People in your account can also decide from the entry page or [My work](/docs/process/my-work).

## Set up an approval stage

1. On the form's **Process** tab, set a stage's **Kind** to **Waiting**.
2. Turn on **Needs approval**.
3. Fill in the approval settings below.
4. Under **Choose what approvers can see**, tick the answers approvers need to decide.
5. Publish the form.

| Setting | What it does |
| --- | --- |
| **Approvals needed** | **Any one**, **Everyone** or **At least** a number. See [How the decision is made](#how-the-decision-is-made). |
| **Approvers** | Who is asked. Choose a kind of approver, then select **Add approver**. Up to 50. |
| **When approved, move to** | The stage the entry goes to once it is approved. Required. |
| **When rejected, move to** | The stage the entry goes to once it is rejected. Required. |
| **Links expire after** | How many days approval links work for: 1 to 90, 14 by default. |
| **When links expire, move to** | Where the entry goes once nobody can decide any more. **Stay in this stage** by default. |
| **Ask for a comment when approving** | Approvers must add a comment to approve. Rejecting always needs a comment. |

Approval stages can still have actions, so your team can move an entry on without waiting.

### Approvers

| Kind | Who is asked |
| --- | --- |
| **A person** | Someone in your account. |
| **A group** | Everyone in the group. |
| **The person in a team member field** | The person in a **Team member** team field on the entry. |
| **An email address** | A fixed address, for approvers without an account. |
| **An email answer on the form** | The address the respondent gave in an email question. People filling in the form choose this address, so only use it when that's what you want, for example a manager's address they enter. |

Groups, team member fields and email answers are worked out when the requests go out. An address that belongs to someone in your account counts as that person, so they can decide in FormWork as well as by link.

### Choose what approvers can see

Approvers see the entry's title, the form's name and only the answers you tick under **Choose what approvers can see**, on the approval page and in their email. Nothing is shown by default. Files show by name only; people with an account can open them from the entry.

## What happens when an entry needs approval

When an entry enters an approval stage:

1. Each approver gets their own request. Groups become one request per member.
2. Each approver gets an email, "Approval needed:" followed by the entry's title, with **Approve** and **Reject** buttons and the date their link works until.
3. The entry's **Approval** panel lists everyone asked and where they stand.

Some people are left out:

- **The person who made the request.** If the form's **Email the person who filled it in** notification is on, an approver with the same address as the respondent is skipped and listed as "Skipped: they made the request". See [Notifications](/docs/forms/notifications).
- **People who already have a request** for this stage aren't asked again.

## Decide by link

The buttons in the email open an approval page with that choice selected. Opening the page never decides anything; the approver confirms on the page.

1. The page shows the entry, "Waiting for your approval since" a date, and the answers you chose to show. With **Everyone**, it also lists earlier decisions.
2. The approver selects **Approve**, or writes why and selects **Reject**.
3. The page says "Thanks. You approved this." With **Everyone** or **At least**, it says how many more approvals are needed.

Each link:

- is for one person and one entry, and works once
- stops working when the entry leaves the stage, saying "This request has already been decided"
- expires after the stage's **Links expire after** days, saying "This link has expired" and who to ask for a new one

## Decide in FormWork

If a request was sent to you, the entry's **Approval** panel shows **Your approval is needed** with a comment box, **Approve** and **Reject**. Entries waiting for your approval are also first in [My work](/docs/process/my-work) and under the **Waiting for my approval** filter on the entries table.

## How the decision is made

| Approvals needed | Approved when | Rejected when |
| --- | --- | --- |
| **Any one** | The first person approves | The first person rejects |
| **Everyone** | Everyone asked has approved | Anyone rejects |
| **At least** N | N people have approved | Too many have rejected for N to be reached |

If fewer people are asked than **At least** asks for, for example because a group is smaller, the number needed drops to the number asked and the Approval panel says so.

Once the decision is made, the entry moves to the stage you chose, and the remaining links say the request has been decided.

## The Approval panel

On the entry page, the **Approval** panel shows the rule ("Any one approval is needed", "Everyone must approve · 1 of 3 so far") and each approver with their status: **Waiting**, **Approved**, **Rejected**, **Expired**, **Withdrawn** or **Skipped**, with the time and any comment.

- **Remind now** sends that approver a fresh link by email. Their old link stops working. It works for expired requests too, which opens them again. Anyone in the account can send a reminder.
- **Withdraw request**, in the approver's menu, stops their link working and works out the decision again without them. Only account admins can withdraw requests.

The entry's history keeps every request and decision, including stages the entry has left.

## When links expire

Once an approver's link expires, their request shows as **Expired**. When no one left can decide:

- with **When links expire, move to** set, the entry moves to that stage
- otherwise it stays where it is, and you can use **Remind now** to send fresh links

Expiry is counted in days in your account's timezone.

## When requests are withdrawn

Open requests are withdrawn, and their links stop working, when:

- the entry leaves the stage for any reason, such as an action, an automation or an admin move
- an admin selects **Withdraw request**
- the approver is removed from the account

## Reminders and escalation with automations

- The **Request approval** step asks more people, for example an escalation group. It can use its own approvers, rule, message and link expiry. Its requests are decided under its own rule, and the stage is decided as soon as any set of requests is.
- The **Remind approvers** step sends everyone who hasn't decided a fresh link.
- The **Approval is decided** trigger starts an automation once the stage is approved or rejected, for example to email the requester.
- The **Remind and escalate approvals** recipe reminds approvers after 2 days and asks an escalation group after 4.

See [Triggers](/docs/automations/triggers) and [Steps](/docs/automations/steps).

## How links are kept safe

- Links are long and random, and FormWork stores only a hash of each one.
- The approval page loads no scripts, isn't indexed by search engines and doesn't pass the link on to other sites.
- Opening a link never records a decision, so email scanners that follow links can't approve anything.
- The text of approval emails, which holds the links, is removed from FormWork once the email is sent.
- Repeated tries from one address or on one link are slowed down.

A forwarded email forwards the link, so whoever has it can decide. The short life, single use and fresh links on reminders limit this.