Go to Studio

Human in the Loop

Pauses a workflow and routes content to assigned reviewers for approval before it continues

Human in the Loop pause node awaiting reviewer decision on intermediate data

What does the Human in the Loop node do?

The Human in the Loop node pauses workflow execution and routes content to one or more assigned reviewers for a decision before resuming. Each reviewer receives a review request (email + review page) where they read the content and either approve or reject it. The workflow only continues when the configured approval policy is satisfied — and any rejection stops the step.

Use it as a manual checkpoint at any critical step — to review AI-generated content, validate data, or approve actions before they run downstream.

Common use cases:

  • Reviewing AI-generated articles or summaries before publishing them to a CMS.
  • Validating extracted data before writing it to an external system (CRM, database, spreadsheet).
  • Quality-checking email content or customer-facing messages before they are sent.
  • Approving sensitive or irreversible operations before they execute.
Info

A Human in the Loop node always requires at least one reviewer. The approval policy (who must approve, and how many) is controlled by the Approval mode. A rejection is always an early exit: a single reject stops the step regardless of the mode.

Quick setup

Follow these steps to add and configure the Human in the Loop node in your workflow:

Add the node to the canvas

Open the Node Library, go to Tools > Flow Control, then drag and drop the Human in the Loop node onto your workspace.

Connect the input

Connect the Content input port (on the left of the node) to the output of the upstream node carrying the data to review (for example an LLM, a Web Scraper, or a JSON Path Extractor).

Assign reviewers

Open the node settings and select one or more Reviewers from your organization. This field is required — the workflow cannot pause without someone to notify.

Choose an approval mode

Pick the Approval mode that matches your decision policy: Any of, All of, or Quorum (N of M). See Approval modes below.

Write a message for the reviewer (optional)

Fill the Message to reviewer field to tell reviewers exactly what to check. It supports markdown and {{variables}} from upstream nodes.

Connect the output

Connect the Output port (on the right) to the next node. Execution resumes and the approved content flows through once the approval policy is met.

Configuration parameters

Human in the Loop settings: reviewers, approval mode, scoring, batch review, and reminders

Required fields

Step name string required default: Human in the Loop

Node name — Identifies this node in the workflow. Rename it to describe the review step (e.g. “Approve blog post”, “Validate extracted invoice”).

Description string required default: Ask a human to review the content and provide a feedback

Node description — A short sentence describing what this review step is for.

Content string required

Content to review — The data presented to the reviewer. Connected from an upstream node’s output. Accepts any value the reviewer can read (text, JSON, formatted output).

Reviewers user[] required

Who decides — One or more users from your organization who receive the review request. Anyone in the list can act; anyone outside it cannot. To prevent self-approval, leave yourself out of the list. The minimum count depends on the approval mode (Any of ≥ 1, All of ≥ 2, Quorum ≥ 3).

Approval mode enum required default: Any of

Approval policy — How many reviewers must approve for the step to pass. One of Any of, All of, or Quorum (N of M). See Approval modes.

Optional fields

Message to reviewer string default: Empty

Instruction shown to the reviewer — A message displayed alongside the content, giving the context and acceptance criteria. Supports markdown and {{variable}} placeholders resolved from upstream nodes — each variable you reference becomes an additional input port on the node. Example: Please confirm "{{candidate_name}}" matches our brand guidelines. Reject if the CTA is missing.

Required approvals (N) number default: 2

Quorum threshold — Only used when Approval mode is Quorum (N of M). The number of approvals required for the step to pass, with 1 < N < M (M = number of reviewers). Ignored in the other modes.

Scores Score[] default: None

Automatic ratings shown to reviewers — Declare one or more scores (see Scoring). Each score adds an input port to the node and renders a colored good / neutral / bad card on the review page, giving reviewers a quick signal before they decide.

Preview string default: Empty

Batch review one-liner — A short, templatable summary ({{variable}}, markdown supported) shown under the scores on each card of the batch review page. Used when this node runs many times in a Loop. Each variable becomes an input port.

Filters for batch review Filter[] default: None

Batch review dropdowns — Each filter has a label and a templatable value ({{variable}}). On the batch review page it renders a dropdown whose options are the distinct resolved values across the batch. Each variable becomes an input port.

Reminder cadence (hours) number default: 24

Reminder interval — How often to re-notify reviewers who haven’t decided. Between 1 and 168 hours.

Maximum reminders number default: 3

Reminder cap — Maximum number of reminder emails per reviewer. Between 1 and 10.

Warning

Reminders are marked “Coming soon”. The cadence and cap are persisted with the run so the contract is ready, but the reminder worker is not yet active — do not rely on automatic reminders being sent today.

Tip

The more specific your message to the reviewer, the faster and more reliable the review. Mention the exact fields, tone, or facts to check rather than asking for a generic “review”.

Approval modes

The Approval mode decides how many of the assigned reviewers must approve. A rejection is always an early exit — one reject stops the step immediately, in every mode.

ModeReviewersPasses whenFails when
Any of≥ 1The first reviewer approvesThe first reviewer rejects
All of≥ 2Every reviewer approvesAny reviewer rejects
Quorum (N of M)≥ 3N reviewers approveN approvals become mathematically unreachable, or any reviewer rejects
  • Any of — the first decision wins. Best for “anyone qualified can sign off”.
  • All of — unanimous approval required. Best for legal review or peer sign-off.
  • Quorum (N of M) — a configurable number must approve. Resolves as soon as N approvals are reached, or fails as soon as N can no longer be reached. Set N with the Required approvals (N) field (1 < N < M).

When one reviewer’s decision resolves the step, the other pending review requests are automatically closed as “not needed”.

Scoring

Scores let you attach automatic, rule-based ratings to the content so reviewers get an at-a-glance signal before deciding. Each score you declare:

  • adds a dedicated input port on the node (wire it to the upstream value to rate), and
  • renders a colored card (good / neutral / bad) on the review page.

Each score has a type and up to three rule bands, evaluated in order good → neutral → bad (first match wins):

TypeOperatorsBands
number / percentagegt, gte, lt, lte, eq, betweengood · neutral · bad
stringequals, contains, starts_with, matches (regex), with optional case sensitivitygood · neutral · bad
booleanisgood · bad
enumin, not_in (over an allowed-values list)good · bad
  • The good band is required; neutral and bad are optional.
  • If a value is provided but no declared band matches, the card falls back to bad — a builder who set a “good” threshold expects anything outside it to read as a failure.
  • A missing value, or a score with no declared rules, shows as Unrated.

Scores are informational — they guide the reviewer but never approve or reject on their own.

Batch review

When a Human in the Loop node runs inside a Loop, each iteration creates a separate review request. These are grouped into a batch review page where a reviewer can work through many items efficiently:

  • Preview — a one-line, templatable summary shown under the scores on each card, so a reviewer can identify an item without opening it.
  • Filters for batch review — templatable dropdowns (e.g. by category, author, status) whose options come from the distinct resolved values across the batch.

Both use {{variable}} placeholders, and every referenced variable becomes an extra input port on the node.

What does the node output?

The node outputs the content as approved by the reviewers. The workflow stays paused until the approval policy is met, then execution continues with that content as the next node’s input. If the step is rejected, the output does not flow and the branch stops there — pair with a Fail Node or a Conditional to handle rejection explicitly.

How to use the output

In Draft & Goal, you don’t need to look up a complex system-generated variable name. To use the result:

  1. Draw a connection from the Human in the Loop node’s Output port.
  2. Connect it to the next node’s input.
  3. In that next node, create and name your own variable (for example, approved_content). The reviewed value will be injected into it automatically.
Output string

The content as approved by the reviewers. Returned only once the approval policy is satisfied; until then the workflow stays paused on this node. Not emitted on rejection.

Input ports

The node always has a static Content port. It grows additional ports dynamically:

  • one port per declared score, and
  • one port per {{variable}} used in the Message to reviewer, Preview, or Filters.

Usage examples

Example 1: Approve an AI-generated article before publishing to Notion

Make sure an LLM-generated article is accurate and on-brand before it lands on your CMS.

Workflow:

  1. Web Scraper — Fetch a source page used as raw material.
  2. LLM — Generate a structured article from that source.
  3. Human in the LoopContent connected to the LLM output. Reviewers = your content lead. Approval mode = Any of. Message to reviewer = “Review this article for factual accuracy, tone, and completeness before publishing to Notion”.
  4. Notion Database Writer — Receives the approved article and publishes it.

Require every reviewer to approve before an automated email leaves the system.

Workflow:

  1. LLM — Draft a contract clause from a template.
  2. Human in the LoopContent connected to the draft. Reviewers = legal + account manager. Approval mode = All of. A score of type boolean wired to a compliance flag surfaces a red/green card to speed the review.
  3. Email Sender — Sends the approved contract only after both reviewers approve.

Best practices

  • Place a Human in the Loop node just before any irreversible action — sending emails, writing to databases, publishing to a CMS, updating a CRM. A short human check is much cheaper than rolling back a bad write to production.
  • Write a specific message: name the exact fields, tone, and facts to verify instead of asking for a generic “review”.
  • Add scores for anything a rule can pre-check (length, presence of a CTA, a compliance boolean) so reviewers spend attention on judgment calls, not mechanical checks.
  • Match the approval mode to the risk: Any of for routine sign-off, All of for unanimous decisions, Quorum for balanced committee review.
  • Leave yourself out of the reviewer list on steps you shouldn’t be able to self-approve.
Warning

A workflow paused on this node stays paused until the policy is met. If you fan out many parallel reviews (e.g. inside a Loop), use the batch review page and give reviewers Preview + Filters so they can work through the queue quickly instead of stalling the pipeline.

Common issues

The workflow is stuck on the Human in the Loop node

Cause: The node is doing its job — it pauses the workflow until the approval policy is met. There is no automatic timeout (reminders are “coming soon” and not yet active).

Solution: Open the workflow execution panel and look for a pending review request on this node. A reviewer must open it and approve for the workflow to resume. In All of mode, every reviewer must act; in Quorum mode, N reviewers must approve.

No reviewers can be selected / the field is empty

Cause: Reviewers are drawn from the users in your organization. If the picker is empty, no eligible users exist in the org yet.

Solution: Invite or assign at least one user with a reviewer-capable role in User Management, then reopen the node settings.

The reviewer doesn't know what to check

Cause: The message to the reviewer is empty or too vague, so they only see raw content with no acceptance criteria.

Solution: Fill the message with a precise instruction listing what to verify (specific fields, tone, facts, formatting). Reference upstream values with {{variable}} to make it concrete.

No content reaches the reviewer

Cause: The Content input is not connected, or the upstream node produced an empty output.

Solution: Verify the Content port is connected to the correct upstream node. Run the upstream node alone to confirm it produces non-empty output before reconnecting.

Quorum mode won't accept my N value

Cause: Quorum requires 1 < N < M. N = 1 is identical to Any of, and N = M is identical to All of, so both are rejected. Quorum also needs at least 3 reviewers.

Solution: Add reviewers until you have at least 3, then set N strictly between 1 and the reviewer count.

How does it fit into a workflow?

Human in the Loop typically acts as an approval gate between content generation and any irreversible downstream action. Here’s a typical integration pattern for AI-generated content that ends up in an external system:

graph LR
    Source[Web Scraper / Data source] --> LLM[LLM generates content]
    LLM --> HITL[Human in the Loop
<br/>reviewers approve]
    HITL --> Publish[Notion / Email / CRM writer]