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.
Coming from Relay.app? Here’s the honest trade
A lot of people reading this arrived because Relay.app is winding down, free accounts on August 15, 2026 and paid accounts on September 14, and n8n is one of the destinations Relay users get pointed toward. If the approval step is the specific thing you’re replacing, it’s worth knowing what transfers before you start rebuilding.
What you gain is the gate itself, at no charge. Relay metered your steps, so every approval you added drew from the same pool as the work it was guarding. n8n bills per execution, which means a run that pauses for two days of deliberation costs the same as one that doesn’t pause at all. You also get approval on individual AI tool calls, which arrived in January 2026 and is the most precise version of this idea on any of these platforms.
What you lose is harder to see until you’re mid-build. In Relay, the human step was a first-class object in a shared workspace, and its Team plan carried up to 10 users. In n8n, a pending approval is a message sitting wherever you sent it. There’s no approvals inbox and no queue view, just an executions list showing which runs are Waiting. The decision itself is a boolean in the execution log, so on Cloud’s Starter plan the record of who approved what disappears after seven days. If the reason you used Relay was that somebody other than you had to sign off, budget time for building that part by hand.
One practical note before you commit either way: rebuilding is not importing. Nothing reads Relay’s format, so each workflow gets translated by hand from the JSON and AI-prompt exports. Get your data out first, because after your account’s date there’s no archive to ask for. If you’d rather not spend the last week before the deadline rebuilding, send us the export and we’ll do it, free, and hand you back a working workflow to watch before you decide anything.
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:
- 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.
- 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.
- 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.
If you’re 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 stop needing your sign-off, 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.
Common questions
Does n8n have human-in-the-loop approvals like Relay.app?
Yes, and they are native on every plan including the free self-hosted edition. The difference is where the approval lives. Relay's human steps sat in a shared workspace as first-class objects. In n8n a pending approval is a message in whatever channel you sent it to, with no approvals inbox and no queue view, and the decision is a boolean that expires with the execution log.
Is the n8n human approval step free on the self-hosted version?
Yes. Approvals are not on n8n's list of features missing from the Community Edition, so send-and-wait operations, the Wait node, and AI tool review all work on a free self-hosted instance with no execution cap.
How long does n8n keep a record of who approved something?
Only as long as the execution log survives. The approval is stored as a boolean inside the execution data, and finished executions are pruned after 7 days on n8n Cloud's Starter plan. If you need to answer who approved a payment months later, you have to build that logging yourself alongside the workflow.
Can I import my Relay.app workflows into n8n?
No. Nothing reads Relay's export format, so you rebuild each workflow rather than importing it. Relay's AI-prompt export is the transferable piece, since it describes each workflow in plain language you can work from.
Why do my n8n approval emails link to localhost?
The resume URLs are built from your instance's configured base URL. If WEBHOOK_URL is not set correctly on a self-hosted instance, the buttons in your approval emails point at localhost:5678 and only work from the server itself.
Keep reading
- A Lindy Alternative That Learns and Keeps a RecordLindy has you approve drafts, but the review never shrinks. Rills scores every send, clears the safe ones on their own, and logs every decision.
- 5 Relay.app Alternatives Ranked Before the Sep 14 DeadlineFree plans died Aug 15, paid Sep 14. Five replacements scored on the thing Relay was built around: where the approval step lives, and what each move costs.
- Relay.app Is Shutting Down: Why, Key Dates, Where to MoveRelay's free accounts are already deleted. Paid accounts go Sep 14. What to export, where to move, or send an export prompt and we rebuild it free.
Ready to automate your workflows?
AI proposes the action, you approve it, and the record shows who signed off.