Sign inStart your trial

Product

n8n Human Approval: Three Native Ways to Pause for a Yes

n8n ships human approval on every plan, even free self-hosted. How send-and-wait, the Wait node, and AI tool review work, and where they get fiddly.

Two people shaking hands across a desk, representing a human approval step confirming an automated decision in n8n
9 min read

We recently wrote about adding a human approval step in Make.com, where the native feature is locked behind the Enterprise plan and every user builds a two-scenario webhook workaround. n8n is the opposite story. If you want an n8n human approval step, the machinery is built in. It works on every plan including the free self-hosted Community Edition, and as of January 2026 you can even gate individual decisions an AI agent makes. This tutorial walks through all three native options, what a paused workflow costs (pleasantly little), and the handful of places where the experience gets fiddly.

Where n8n’s human approval features live

n8n gives you three layers, and picking the right one upfront saves rebuilding later:

Send and wait operations. Messaging and email nodes (Gmail, Slack, Outlook, Teams, Google Chat, Telegram, Discord, WhatsApp, plain SMTP email, and n8n’s own Chat) have an operation that sends a message and pauses the workflow until someone responds. Depending on the app it’s labeled “Send and Wait for Approval” or “Send and Wait for Response”, and it covers three response types: approval buttons, a free-text reply form, or a custom form you design. For most approval use cases, this is the one you want.

The Wait node. A core node with four resume modes: after a time interval, at a specified time, on webhook call, or on form submission. The webhook mode is the power option; it exposes a unique resume URL per execution and supports real authentication (Basic, Header, or JWT) when a clickable email link isn’t secure enough. The Wait node docs are the reference when you outgrow send-and-wait.

If you’d rather not host the approval page yourself, the free Approval Gateway creates the link and calls your Wait node’s resume URL with a signed decision.

Human review for AI tool calls. Shipped in n8n 2.6.0 (January 2026): you can require approval for individual tools an AI agent wants to use, which we’ll come back to below.

None of this is plan-gated. n8n’s list of features missing from the Community Edition covers things like SSO and environments; approvals aren’t on it. Self-host for free and you get the full set.

The send-and-wait approval, step by step

Same running example as the Make tutorial, so you can compare the builds directly: a customer emails asking for a refund, your workflow looks up the order and drafts the refund reply, and nothing executes until you’ve seen it.

Build the front half as usual: the email trigger, the order lookup, the AI node drafting the response. Then add a Gmail node (or Slack, or whichever channel you actually check) and set the operation to Send and Wait for Approval.

Three settings matter:

  1. Type of Approval. Choose “Approve and Disapprove” so you get two buttons, labeled Approve and Decline by default. The single-button “Approve Only” mode is fine for confirmations, but a refund decision needs a no.
  2. The message body. Put the actual draft in the message: the order ID, the refund amount, the reply the AI wrote, so the email alone gives you enough to decide on.
  3. Limit Wait Time. Decide what happens if nobody clicks. More on this in a moment.

That’s the whole pause, with no second workflow, webhook plumbing, or data store holding state between scenarios. When the workflow hits this node, the execution stops and shows up with a Waiting status in your executions list, and n8n offloads the execution data to its database, so a waiting approval survives restarts on a properly configured instance.

The buttons in your email are signed resume URLs pointing back at your n8n instance. Clicking one wakes the execution exactly where it paused, with the answer attached.

Branching on the answer

The node resumes with a boolean: $json.data.approved is true for Approve, false for Decline. Add an IF node right after the approval and split on it. The approve path processes the refund and sends the drafted reply; the decline path updates your records and notes who declined and when.

Handle the timeout branch too. With Limit Wait Time enabled, the workflow resumes automatically after your chosen interval or wall-clock time, without an approval. It doesn’t error, it just continues. So your branching logic needs to treat “no answer” as its own case, and for anything touching money the right default is to treat silence as a no.

Gating individual AI agent tools

The 2026 addition is worth knowing about even if you’re not running agents yet. Suppose your agent can search orders, draft replies, and issue refunds. The first two are harmless, and the third is the one that needs eyes.

On the connection between the agent and a tool, click the + and choose Add human review step. From then on, whenever the agent decides to call that tool, the workflow pauses and sends an approval request through your chosen channel (the human-in-the-loop tools docs list nine, from Slack to WhatsApp). The reviewer sees the tool name and the exact parameters the AI chose, refund amount included. Approve executes the call. Deny cancels it and tells the agent no, and the agent carries on with that knowledge.

That per-action granularity matches how we think about it too: the decision to approve belongs at the action, not at the start of the run.

What waiting costs in n8n

This is where n8n’s billing model quietly shines. n8n bills per execution, and its pricing page defines an execution as a single run of your entire workflow, regardless of how many steps it contains or how much data it processes. A run that pauses for two days of deliberation and then resumes is still one execution.

Compare that to the Make pattern, where the approval machinery itself consumes operations on every run, or Zapier, where every step is a task. In n8n, the pause is free, the buttons are free, and an approval-heavy workflow costs exactly what the same workflow would cost without approvals: one execution per run. Cloud plans start at 2,500 executions a month on Starter and 10,000 on Pro, and the self-hosted Community Edition has no execution cap at all.

For solopreneurs putting approval gates on everything that touches money or customers, that pricing shape matters more than it first appears. You can be generous with approvals without watching a meter.

Where n8n approvals get fiddly

Five things will bite, roughly in order of likelihood:

Self-hosted instances generate broken approval links. The resume URLs are built from your instance’s configured base URL. If WEBHOOK_URL isn’t set correctly, your approval emails contain links pointing at localhost:5678, which work from nowhere except the server itself. It’s a recurring issue and a classic trap for the non-technical self-hoster: everything looks right, the email arrives, and the button does nothing.

The links are still bearer tokens. They’re cryptographically signed, so nobody can guess one, but anyone who has one can click it. A forwarded email is a forwarded approval. If that’s not acceptable for your use case, graduate to the Wait node’s webhook mode with real authentication in front of it.

Your decisions expire with the execution log. The approval itself is just a boolean inside the execution data, and finished executions get pruned: on n8n Cloud’s Starter plan they’re kept for 7 days. If you ever need to answer “who approved this refund in March, and what did they see when they approved it?”, that record is gone unless you’ve built your own logging alongside the workflow.

There’s no approvals inbox. Each pending approval lives wherever it was sent: a Slack thread, a Gmail message, a Telegram chat. The executions list shows what’s Waiting, but it’s an operations view, not a review queue. With one approval a week this is fine, but with ten a day across three workflows you’re hunting through channels to find what’s waiting on you.

Short waits live in memory. Waits under 65 seconds aren’t offloaded to the database, so only those evaporate on a restart. Approval waits are nearly always longer, but it’s worth knowing where the line is.

The gate n8n gives you never learns

Credit where due: of the big self-serve automation platforms, n8n has the most complete human approval story. Native, free on every plan, granular down to a single AI tool call. If you’re technical, happy running your own instance, and the build above sounds like a pleasant afternoon, n8n is an excellent choice and you should use it.

The limitation worth understanding before you commit is that every gate you build is binary, forever. The approval node either exists or it doesn’t. Approve the same routine $20 refund correctly 500 times and execution 501 still lands in your Slack thread, identical to the first. Your only escape is deleting the node, at which point the $900 edge case sails through unreviewed too. The gate can’t tell the difference, because nothing in it learns from the five hundred decisions you already made. After the retention window those decisions aren’t even records anymore, just expired booleans.

Rills exists to close that gap. Approvals here are first-class decisions rather than chat messages: each one carries the full context you decided on, is stored in the audit trail, and feeds confidence scoring that learns which actions you trust. Routine cases graduate to running on their own and the queue narrows to the decisions that genuinely need you. And the queue lives on your phone, so you can approve, edit, or reject without opening a laptop.

Approvals in Rills are free and always will be, however many workflows wait on you. If you’d rather your five-hundredth identical approval taught the system something, see it in a demo.

Ready to automate your workflows?

AI proposes the action, you approve it, and the record shows who signed off.

14-DAY TRIAL · NO CREDIT CARD · APPROVALS ARE FREE