# Editorial approvals

Source: https://docs.externa.qiick.io/docs/approvals

Optional **editorial approvals** for versioned collections: editor submits a draft → reviewer approves or rejects → publish (promote) only when approved.

> **Related**
> [Content versioning](/docs/content-versioning) · [Roles & permissions](/docs/roles-and-permissions) · [Outbound webhooks](/docs/webhooks)

## Enable

1. Turn on **Content versioning** on the collection.
2. Turn on **Approvals required** (same collection drawer). Approvals without versioning are rejected.

## States

```text
draft ──submit──► in_review ──approve──► approved ──Publish──► published (+ approval resets)
                    │
                    └──reject(+note)──► rejected ──(edit / resubmit)──► in_review
```

- Saving a draft while `in_review`, `approved`, or `rejected` **invalidates** approval and returns to `draft`.
- Discarding a draft resets approval state.
- Scheduled publish also requires `approved` when approvals are on.

## Permissions

| Permission                | Who                                         |
| ------------------------- | ------------------------------------------- |
| `can-submit-collections`  | Submit draft for review                     |
| `can-approve-collections` | Approve or reject (note required on reject) |
| `can-edit-collections`    | Publish / discard / edit (unchanged)        |

Assign via **Roles & permissions**. Super Admin / Admin get both submit and approve after `permissions:sync` + role seed / upgrade.

## Review queue

On collections with approvals, the items list has an **In review** filter for the awaiting queue. Item form shows status badge + Submit / Approve / Reject actions.

## Webhooks

Reserved outbound events (same catalog as [Outbound webhooks](/docs/webhooks)):

| Type             | When                                                  |
| ---------------- | ----------------------------------------------------- |
| `item.submitted` | Draft submitted for review                            |
| `item.approved`  | In-review item approved                               |
| `item.rejected`  | In-review item rejected (`rejection_note` in payload) |

In-app notifications go to users with `can-approve-collections` on submit, and to the submitter on approve/reject.

## Out of scope

Multi-step BPM graphs, e-sign, and Slack/Telegram fan-out (see outbound notifiers) are separate.
