# Approval Workflows

Approval Workflows help you manage structured decision-making on ticket requests such as expense sign-offs, IT access approvals, onboarding processes, or compliance-related reviews. ClearFeed allows you to define multi-level approval chains, notify approvers directly in Slack, and track every approval action inside the ticket.

{% hint style="danger" %}
Approvals is only available on the **Internal HelpDesk** Product Edition.
{% endhint %}

## How to Configure Approval Workflows?

<figure><img src="https://3455705434-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FE2O2wTaNovd6fXpEuLKz%2Fuploads%2Fgit-blob-361edde7d950fdfd423ae05cb7c0b49eb86841cf%2Fezgif-4ded3c7b52444d.gif?alt=media" alt="" width="563"><figcaption><p>Configuring Approval Workflow</p></figcaption></figure>

### **Navigate to Approval Workflows**

* From the left navigation bar in the WebApp, go to **More → Approval Workflows**.
* Click **Create Approval Workflow** and enter a meaningful name.

### Select Intake Form

* Choose the form that will trigger the approval workflow when used for ticket creation.
* Select any fields that should not be changed while the approval process is ongoing.

#### Participants Behavior

* **Automatically Add Approvers as Participants (Optional)-** When enabled, all approvers are added to the ticket as participants so they can view and respond in the conversation. [Learn More](https://docs.clearfeed.ai/clearfeed-help-center/clearfeed-helpdesk/participants)

### Define Routing Rules

Routing rules determine **when** a particular approval chain should be used. Each rule contains two parts:

#### **Conditions (When this rule applies)**

Conditions are evaluated against the ticket’s fields. All conditions must match for the rule to be applied.\
If no rule matches, the **Default Routing** is used.

Examples:

* Department = Finance
* Request Type = Access Request
* Location = APAC

#### **Approval Sequence (Who must approve, and in what order)**

After defining conditions, configure the **ordered list of approvers** for that rule. Approvals proceed level by level in the sequence you specify.

ClearFeed supports **two types of approvers**:

#### **Specific User (Static Approver)**

Select an internal user who will always approve at this level.

#### **From Form Field (Dynamic Approver)**

Choose a **User Select** field from the Intake Form. The approver for this level will be the user selected in that field.

{% hint style="info" %}
**Important:** **User Select** field will appear in the **From Form Field (Dynamic Approver)** dropdown only when

* it is added to the selected Intake Form
* it is configured to be **editable by All** (not only by responders.)
  {% endhint %}

Dynamic Approvers are ideal when approvers depend on the requester's context, such as:

* Manager
* Team lead
* Project owner
* Department owner
* Regional approver

**Backup Approver (Required)** Each dynamic approver must have a backup. The backup will be used if:

* The field was removed from the form
* The field exists but was not filled by the requester

## How the Approval Process Works

Once the workflow is active, here is how ClearFeed evaluates and runs approvals:

* When a user submits a ticket using the selected Intake Form:
  * An Approval Request is created and linked to the ticket
  * Ticket status cannot be closed until approvals finish
* ClearFeed checks routing rules top-down and selects the first rule whose conditions match.

**Approver Resolution**

For each approver level:

* **If Static Approver is used:** Assigned directly as configured.
* **If a Form Field has been used:** ClearFeed evaluates in the following order:
  * **Field exists? -** If not → use backup
  * **Field has a value?-** If empty → use backup (Reason: “Field left empty”)
  * **Resolved approver already used at a lower level? -** If yes → level is skipped

    <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p>The same user will <strong>never</strong> receive approval tasks at multiple levels. If any approver (static, dynamic, or backup) duplicates a lower-level approver:</p><ul><li>Only the lower-level approval runs</li><li>The higher level is skipped</li><li>Skip reason is displayed in the Approval Chain</li><li>No Slack notification is sent for skipped steps</li></ul></div>
  * **Else** → use dynamic approver value
* Dynamic values and fallback results are shown in the Approval Chain.

**Approval Execution**

* Approvers receive a Slack message and can approve or reject directly
* If the **Automatically add approvers as participants** is enabled, approvers receive **two messages from ClearFeed**:
  * A message to **approve or reject** the approval request.
  * A notification that they have been **added as a participant** on the ticket, allowing them to view the conversation and send/receive messages.
* If approved → next approver is notified
* If rejected → the entire approval request is closed as rejected
* All approval actions are logged privately on the ticket

**Visibility in the UI**

The logs for the Approval Workflow can be found in Ticket Activity, Approval Task View and Slack Triage Channel as Private Comments. It includes below information:

* Static and dynamic approvers
* When a backup approver was used
* Skip reasons (duplicate, removed field, empty field)
* Approval or rejection comments
* Approval timestamps

<figure><img src="https://3455705434-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FE2O2wTaNovd6fXpEuLKz%2Fuploads%2Fgit-blob-2ba6617d9e259b9fa1c330325b176e67e6fd9d9a%2FScreenshot%202025-07-16%20141558.png?alt=media" alt="" width="563"><figcaption><p>Notification to First Approver via ClearFeed App for Approval</p></figcaption></figure>

<figure><img src="https://3455705434-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FE2O2wTaNovd6fXpEuLKz%2Fuploads%2Fgit-blob-62cf0b63c0f19e141db2e6d5e5e8a066d27541db%2Fimage%20(276).png?alt=media" alt="" width="563"><figcaption><p>Ticket Details View for Approver</p></figcaption></figure>

<figure><img src="https://3455705434-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FE2O2wTaNovd6fXpEuLKz%2Fuploads%2Fgit-blob-4a694fe0b656f189710c52d39d8273fcc14e9d37%2Fimage%20(277).png?alt=media" alt="" width="563"><figcaption><p>Optional Additional Comments to be added by Approver while approving/rejcting</p></figcaption></figure>
