Bug report : Respond to Webhook node just returns "success : true" in v2 when there is a wait node with “On webhook call” turned on in the workflow, and not the JSON put in the Response Body

Describe the bug

Since upgrading to n8n v2.0.0-rc.4, the Respond to Webhook node returns an empty HTTP response body, even though the node executes successfully and shows the correct JSON payload in the execution log.

To Reproduce

  1. n8n running in queue mode (1 main + 5 workers, Redis as broker)

  2. Workflow triggered by Webhook node with responseMode: "responseNode"

  3. Workflow ends with Respond to Webhook node configured to return JSON

  4. Call the webhook via curl

Expected behavior

The HTTP response should contain the JSON body defined in the Respond to Webhook node.

Actual behavior

  • HTTP status: 200 OK

  • Response body: empty

Environment

  • n8n version: 2.0.0-rc.4

  • Deployment: Docker Compose (self-hosted)

  • Mode: Queue mode (main + 5 workers)

  • Database: PostgreSQL

  • Broker: Redis

Additional context

  • This workflow has been working perfectly for months on v1.x

  • The issue appeared after upgrading to v2

  • Testing with curl shows HTTP 200 but empty body

  • Same workflow works correctly when tested manually in the n8n UI (test webhook)

Workflow JSON (simplified)

I precise : the problem appears when I’ve got a subworkflow with a wait node (with incoming webhook) in the workflow !!

I got the exact same issue here, using a webhook to trigger a workflow from a Monday.com environment.. Any thoughts about the issue here?

Hello all, I confirm that when a workflow has a “Wait node” with “On webhook call” turned on, the “Respond to Webhook” node of the workflow just sends “success : true” what ever the JSON you put in the Response Body.

But if I desactivate the node, it sends the complete JSON (normal process).

I’m on 2.2.1

We ran into the exact same issue and found a workaround.

The Problem:
When you have a Wait node with “On webhook call” in the workflow, the Respond to Webhook node gets overridden — it just returns {“success”: true} regardless of what you set in the Response Body.

Our Solution:

Instead of using “Respond to Webhook” in the normal way, change the Webhook trigger node’s responseMode to “responseNode”. This tells n8n to delegate the HTTP response entirely to your Respond to Webhook node, bypassing the Wait
node’s interference.

Webhook (responseMode: “responseNode”)

[Your logic here]

Respond to Webhook (returns your custom JSON, e.g. { executionId: $execution.id })

Wait (On webhook call)

[Rest of workflow]

Key points:

  1. Set the Webhook trigger → Response Mode = “Using ‘Respond to Webhook’ Node”
  2. Place your Respond to Webhook node before the Wait node
  3. The Respond to Webhook node will now correctly return your custom JSON

Additional gotchas we discovered (n8n 2.x):

  • Wait node resume only works with GET requests (POST body is silently ignored) — pass data via query parameters instead
  • Consecutive Wait nodes can cause response blocking — we solved this with a client-side timeout (AbortController, 3s)
  • Waiting executions don’t appear in the /executions list API — use /executions/{id} individual query instead

Hope this helps! These issues aren’t well-documented but once you know the workarounds, Wait node orchestration works reliably.