---
title: Approval and review steps
display: '*Approval* and review steps'
thumb: workflows/approval-and-review-steps/thumb.webp
nav_title: Approval and review
summary:
  - "Pause a workflow for a person so only checked results reach the expensive steps."
  - "Use Approval to ask whether a result is good enough, and Slice Items in Choose mode to pick which ones continue."
  - "A rejection cancels the run, so nothing after the review step is billed."
description: Pause a workflow for a person with the Approval node or Slice Items in Choose mode, so only checked results reach the expensive steps.
section: workflows
order: 70
type: guide
level: Scale
roles: [team-lead, art-director, artist]
time: { read: 7, do: 15 }
needs: ["A workflow that produces several results or feeds an expensive step"]
last_verified: 2026-10-12
related: [batches-loops-and-logic, publish-a-workflow-as-an-app, run-workflows-from-code-and-agents]
updated: 2026-10-12
canonical: https://learn.scenario.com/workflows/approval-and-review-steps
---

Last updated: 2026-10-12

# Approval and review steps

> Pause a workflow for a person with the Approval node or Slice Items in Choose mode, so only checked results reach the expensive steps.

In short:

- Pause a workflow for a person so only checked results reach the expensive steps.
- Use Approval to ask whether a result is good enough, and Slice Items in Choose mode to pick which ones continue.
- A rejection cancels the run, so nothing after the review step is billed.


Add a review step wherever a wrong result would waste money or reach a client: before a still becomes a video, a concept becomes a 3D model, or a batch is delivered. A workflow has two ways to wait for a person:

:::note As of October 2026
The models, settings and screens in this article are the ones Scenario offered in October 2026. New models and updates arrive often, so check the app for newer options before you choose.
:::

| Node | Question it asks | What continues |
|---|---|---|
| **Approval** | "Is this good enough?" | Everything that arrived, if approved. Nothing, if rejected |
| **Slice Items** in Choose mode | "Which of these should continue?" | Only the items the person picks |

![Two ways to pause a workflow for a person before an expensive step. Top: an Image Generator makes four takes for a few credits each and feeds an Approval node, which asks whether the result is good enough. Approve, and everything continues to the Video Generator. Reject, and the run is canceled, so nothing downstream is billed. Bottom: the same four takes feed Slice Items in Choose mode, which asks which of them should continue. The reviewer selects Number of Items and clicks Confirm, so only the picked take reaches the Video Generator; Stop Workflow ends the run. Put the review before the most expensive node, and write the message as a check.](https://ufgc0c9mhl4ueq76.public.blob.vercel-storage.com/academy/6f4ded26c64fddaebe3459927ff2e0a61e6fc352a38cef4523ad7f1f31294621.svg "Approval asks whether a result is good enough; Choose mode asks which results continue.")

## Approve or reject: the Approval node

**Approval** (palette: **Utilities**, "Wait for user approval") holds the run, shows the results with a review message you write, and waits.

:::steps
1. Add **Approval** after the step you want checked, for example after an Image Generator and before a Video Generator.
2. Wire the generator's output into it, and its output into the next step.
3. Write the review message as a check, not a question. For example: `Approve only if the product label is readable and the bottle has no warped edges.`
4. Run. When the run reaches the node, review the items and click **Approve** to continue or **Reject** to stop.
:::

- **Reject cancels the run,** so nothing after the node is billed.
- **Inside a Loop,** the API reference says a rejected iteration cascades to the surrounding loop.

* **Generators and the LLM Node also show an Approval output port** on the live nodes. Use the **Approval** node above for review steps.

## Pick the best: Slice Items in Choose mode

When a generator returns four takes and only one should become a video, use Choose mode.

:::steps
1. Set the generator to return several outputs, for example four images.
2. Add **Slice Items** and wire the generator output into it.
3. At the top of the node, choose the **Choose** mode.
4. Set **Number of Items** to how many should continue, for example 1.
5. Optionally write a **Message**, such as `Pick the shot with the clearest silhouette.` The default is "Select the items to continue".
6. Wire Slice Items into the next step.
:::

When the run reaches the node, a picker opens with your message and the candidates.

- **Confirm** after selecting exactly the set number: only the nodes after Slice Items run.
- **Stop Workflow** ends the run.
- **Select to Continue** on the node reopens a picker you closed.
- **Run From Here** and **Run This Node** pause in the same way.

Choose mode works on lists of text too: let an LLM write five prompt options, pick one, and pay for one image instead of five.

## Review loops

- **Inside a Loop**, each iteration asks for its own review. If several finish at once, the pickers queue and appear one after another.
- **To keep several results and process each**, set **Number of Items** to that count and wire Slice Items into a Loop.

* **After a reject**, the run stops. Fix the input, the prompt or the settings, then start a new run and review it again.
* **Automatic retry on reject**: Scenario's help center describes pairing Approval with **If-Else** and **Loop** to send rejected items back for another generation. Keep it bounded (a fixed list of attempts) so cost stays predictable.

## In Apps and from code

- **In a published App**, the same picker opens during the run with **Confirm** or **Stop Workflow**. There is no list of paused runs yet, so make the selection in the run you started.
- **From the API**, a paused run waits until you answer it. See [Run workflows from code and agents](https://learn.scenario.com/workflows/run-workflows-from-code-and-agents.md).

| Pause | Answer it with |
|---|---|
| Approval node | `PUT /v1/workflows/{workflowId}/user-approval` (approve or reject) |
| Choose node | `PUT /v1/workflows/{workflowId}/user-selection` (the indices to keep) |
| Approval node, through the Scenario MCP | The catalog tools `workflow_approve` and `workflow_reject` |

## Where to put review steps

- **Before the most expensive node.** A video or a 3D model costs many times a still. Review the still.
- **After any LLM step that writes for a client.** Copy and on-image text are where silent errors hide.
- **At the end of a batch that leaves the team.** One person approves the set, not each item, unless items are high stakes.
- **Not after every node.** Each pause is a person's time. Two well-placed checks beat six.

Write review messages with the same accept and reject criteria you would use by eye. [Inspect before you accept](https://learn.scenario.com/browse) lists what to look for per modality.

:::check
**Accept when:** the run pauses at the right node; the message tells the reviewer exactly what to check; after **Approve** or **Confirm**, only the intended items reach the next step; after **Reject** or **Stop Workflow**, nothing downstream is billed.
**Reject when:** the review sits after the expensive step instead of before it; the message is a vague "Looks good?"; a Choose node lets through more items than the next step should pay for.
:::

## If it breaks

| Symptom | Fix |
|---|---|
| **The run never pauses** | The node is not on the path the run takes. Check the wires into it, and that an upstream If-Else did not route around it |
| **The picker closed and the run seems stuck** | Click **Select to Continue** on the Slice Items node |
| **You cannot confirm** | Choose mode needs exactly **Number of Items** selected |
| **A teammate's run is waiting on you** | Paused runs are answered from the run itself; ask the person who started it, or answer it through the API with the job and node IDs |

Source: https://learn.scenario.com/workflows/approval-and-review-steps
