Dev.to WebDev ๐Ÿ›  Dev ๐Ÿ‘ 1 ๐Ÿ“– 4 min read

n8n Wait Node: Pause, Delay, and Schedule Workflow Execution (Free Workflow JSON)

n8n Wait Node: Pause, Delay, and Schedule Workflow Execution (Free Workflow JSON) Most n8n workflows rush from node to node without pausing. That's fine until you hit an API rate limit, need a human to approve somethin

n8n Wait Node: Pause, Delay, and Schedule Workflow Execution (Free Workflow JSON)

Most n8n workflows rush from node to node without pausing. That's fine until you hit an API rate limit, need a human to approve something, or need to schedule a follow-up for exactly 24 hours later.

The Wait node solves all three. It pauses workflow execution, releases the worker, and resumes later --- on a timer, on a webhook call, or on a form submission. Your server isn't idle while it waits.

What the Wait Node Does

The Wait node suspends execution of the current workflow item and stores its state. The n8n worker is freed immediately (no memory held, no thread parked). When the resume condition is met, n8n restarts execution from the next node.

This makes it perfectly safe for very long waits (hours, days) without consuming resources.

Wait Modes

1. Time Interval

Wait for a fixed duration after the node is reached.

Setting Example
Amount 1
Unit Seconds, Minutes, Hours, Days

Use case: Sleep 1s between API calls to respect rate limits.

2. At Specific Time

Resume at an exact date-time, either hardcoded or from an expression.

DateTime: <{ $json.send_at }>

Use case: Send a follow-up email at exactly 9am on the next business day.

3. On Webhook Call (Human-in-the-loop)

Wait indefinitely until an external system calls a URL n8n generates automatically.

Webhook URL: https://<your-n8n>/webhook-waiting/<uuid>

Use case: Send an approval email with an "Approve" link. When the manager clicks it, the workflow resumes.

4. On Form Submission

Same as webhook but n8n renders a hosted form --- no external form tool needed.

Use case: Collect additional information mid-workflow (e.g., ask the user for a reason before processing).

Pattern 1: Rate-Limit-Safe API Poller

Problem: You need to call an API for 50 items but the API allows 10/min.

Solution: Split In Batches (batchSize=1) + Wait 6s between calls.

[Webhook] -> [Split In Batches batchSize=1] -> [HTTP Request] -> [Wait 6s] -> (loop back)

The Wait node is placed after the HTTP Request and before the Split In Batches loop-back connection. This guarantees 6s between each call regardless of how fast the request resolves.

Pattern 2: Human Approval Gate

The most powerful Wait pattern. Include the webhook resume URL in an approval email.

[Trigger] -> [Wait: On Webhook] -> [Set resumeURL=$webhookUrl] -> [Send Email with "Approve" link]
              -> (on click: resume with {"approved":true}) -> [IF approved] -> [Process]

Key: use {{ $execution.resumeUrl }} in the Wait node expression to get the generated webhook URL.

Pattern 3: Scheduled Follow-Up

Send a welcome email immediately, wait 3 days, then send an onboarding checkin.

[New Signup] -> [Send Welcome Email] -> [Wait 3 days] -> [Send Check-in Email]

No cron job needed. No separate scheduler. The execution simply resumes after 72 hours.

Pattern 4: Polling Loop (Repeat Until Done)

Check a job status every 30s until it completes.

[Trigger] -> [HTTP GET job/status] -> [IF status==="done"] -> [Process Result]
                                                   _-> [Wait 30s] -> (loop back)

Connect the Wait node's output back to the HTTP Request node. N8n supports backward connections for this pattern.

Gotchas Table

Gotcha Detail
Execution timeout vs wait duration The Wait node suspends execution (doesn't count toward the timeout). But if your n!n execution timeout is lower than the wait duration, the workflow will be killed before resuming.
Webhook URL expires The resume webhook URL is only active while the execution is paused. Calling it after a workflow completes or fails returns 404.
Cloud vs self-hosted n8n Cloud has a max wait time of 30 days on higher plans. Self-hosted no hard limit but your DB must retain execution state.
Resume URL not accessible If your n8n is behind a firewall/localhost, the resume URL is not reachable from external systems. Use a tunnel (ngrok, cloudflared) or n8n Cloud.
Not for cron-style recurrence The Wait node does not loop on its own. For periodic recurrence, use the Schedule Trigger instead.
Wait node in item loops Each item in a batch waits independently. If you have 100 items, all 100 waits are active simultaneously. Use Split In Batches (batchSize=1) to serialize.

Free Workflow JSON: Rate-Limit-Safe API Poller

This workflow fetches a list of IDs from a trigger, then queries an API for each one with a 1s delay between calls.

Copy the JSON below and import it into n8n (Menu > Import Workflow):

{
  "name": "Rate-Limit-Safe API Poller",
  "nodes": [
    {
      "name": "Webhook Trigger",
      "type": "n8n-nodes-base.webhook",
      "typeVersion": 2,
      "position": [-500, 300],
      "parameters": {
        "path": "api-poller",
        "responseMode": "lastNode"
      }
    },
    {
      "name": "Split In Batches",
      "type": "n8n-nodes-base.splitInBatches",
      "typeVersion": 3,
      "position": [-300, 300],
      "parameters": {
        "batchSize": 1
      }
    },
    {
      "name": "Call API",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4,
      "position": [-100, 300],
      "parameters": {
        "method": "GET",
        "url": "https://api.example.com/items/{{ $json.id }}",
        "responseFormat": "json"
      }
    },
    {
      "name": "Wait 1s",
      "type": "n8n-nodes-base.wait",
      "typeVersion": 1,
      "position": [100, 300],
      "parameters": {
        "resume": "timeInterval",
        "amount": 1,
        "unit": "seconds"
      }
    },
    {
      "name": "Collect Results",
      "type": "n8n-nodes-base.noOp",
      "typeVersion": 1,
      "position": [300, 300],
      "parameters": {}
    }
  ],
  "connections": {
    "Webhook Trigger": {"main": [[{"node": "Split In Batches", "type": "main", "index": 0}]]},
    "Split In Batches": {"main": [[{"node": "Call API", "type": "main", "index": 0}], [{"node": "Collect Results", "type": "main", "index": 0}]]},
    "Call API": {"main": [[{"node": "Wait 1s", "type": "main", "index": 0}]]},
    "Wait 1s": {"main": [[{"node": "Split In Batches", "type": "main", "index": 0}]]}
  }
}

Get the Complete Automation Starter Pack

Want 15 pre-built, documented n8n workflows covering lead capture, Stripe fulfillment, AI enrichment, and more?

รขโ€ โ€™ Get the n8n Workflow Starter Pack($29)

๐Ÿ“ฐ Read the original article on Dev.to WebDev

Originally published by Dev.to WebDev. Aggregated on AIWithGhost for educational purposes โ€” full credit and traffic to the original publisher.