The n8n Wait Node: Add Delays, Pauses & Human Approval to Workflows (2025)
Not every workflow should run start-to-finish in one burst. Sometimes you need to wait — an hour before a follow-up, a day before a reminder, or indefinitely until a human approves. That’s exactly what the n8n Wait node is for, and it’s one of the most underused nodes in the whole platform.
Four ways the Wait node can pause
- After a time interval — wait 30 seconds, 2 hours, or 7 days.
- Until a specific date/time — resume Monday at 9am, for example.
- On a webhook call — pause until an external event hits a resume URL.
- On a form submission — pause until someone fills an approval form.
How long pauses actually work
For short waits (under ~65 seconds by default) n8n holds the execution in memory. For longer waits, it saves the execution state to the database and resumes later — so the workflow uses no resources while waiting. This means you can safely wait days or weeks without tying anything up.
⚡ Skip the build: Stripe Payment Failed → Escalating Recovery Email + Slack Alert
A timed, escalating dunning sequence that waits between emails and recovers failed payments on autopilot.
Building a human-approval step
This is the Wait node’s killer feature. Set it to Resume: On Webhook Call (or a form). n8n generates a unique resume URL. Send that URL to an approver via Slack or email with Approve and Reject links. The workflow sits paused until they click — then continues down the right path.
1. Generate document
2. Slack message: “Approve? {{ $resumeUrl }}?decision=yes”
3. Wait (resume on webhook)
4. IF decision = yes → send to client
else → notify author to reviseTime-delay patterns
Drip sequences
Send email 1, Wait 2 days, send email 2, Wait 3 days, send email 3 — a full nurture flow in a single workflow.
Escalating dunning
Payment fails → wait 1 day → remind → wait 3 days → escalate → wait 5 days → final notice.
Polite delays
Wait a random 1–5 minutes between outreach messages so automated sends look human and dodge rate limits.
Pitfalls
- Self-hosting & restarts: long waits survive restarts only if executions are saved to a real database (Postgres), not the default SQLite for heavy use.
- Resume URL security: the URL is a secret — anyone with it can resume the flow. Add a token check if it’s exposed.
- Timezones: “resume at a date” uses the instance timezone — set it explicitly.
FAQ
Is a waiting execution counted as running? It shows as “waiting,” not active, and consumes no compute.
Wait vs Schedule Trigger? Use Wait to pause within a run; use the Schedule Trigger to start runs on a cadence.
Ready to automate this?
Don’t rebuild it from scratch. Stripe Payment Failed → Escalating Recovery Email + Slack Alert is a production-ready n8n workflow you can import in minutes — credentials in, activate, done.