Production webhook returns HTTP 200 with empty response body

Thanks for responding. I’m new to n8n, so I appreciate the help.
I’m using n8n Cloud with a Lovable app sending a POST request to my production webhook.
What happens:
Lovable sends the request successfully.
The n8n production workflow triggers and completes successfully.
The AI nodes run successfully.
The Airtable record is created successfully.
The final response node has the correct JSON.
But Lovable receives HTTP 200 with an empty response body.
Webhook configuration:
Node: n8n-nodes-base.webhook
responseMode: responseNode
“No Response Body”: OFF
Configured to use a Respond to Webhook node
I also tried When Last Node Finishes, but the external caller still received an empty response.
The production webhook is active and production executions are appearing normally.
I can provide screenshots of the Webhook node, Respond to Webhook node, final JSON output, and execution. Please let me know which would be most useful.
I’d prefer not to publicly post the entire production workflow because it contains business configuration and integrations, but I can share a sanitized portion if needed. escalate this ticket to a human support engineer.
We have already checked the Webhook node response settings, verified the Respond to Webhook node receives valid JSON, tested both “Respond to Webhook” and “When Last Node Finishes,” and confirmed the production workflow executes successfully.
The caller still receives HTTP 200 with an empty body.
I’d like a human to review the production execution and webhook response behavior. I can provide execution IDs, screenshots, and a sanitized workflow export.-- Thank you for opening a feature request. If this is not for a node, please remove the node subcategory. Otherwise, follow the below template. →

It would help if there was a node for:

My use case:

Any resources to support this?

Are you willing to work on this?

Hey @David_Sichel, while you wait for a response, here are some things that might help:

Suggested resources

Automatically matched to your question.

Docs:

Forum:

@Mohd_Zuhaili_Mohd, @Uros_Zdravkovic, @Niffzy - you’ve helped with similar issues before, can you take a look?

Automatically suggested by n8n’s community bot. It’s a pilot - please share feedback here.

@David_Sichel Can you elaborate? What is the request you are sending? Can you provide your workflow or screenshots?

Hey @David_Sichel Welcome to the n8n community
“the final response node has the correct JSON” is the part worth re-checking, because that panel shows the node’s input by default, not what it sent. A green execution returning an empty body looks exactly like this when the response expression resolves to nothing.

Open the Respond to Webhook node, go to the Settings tab and turn on Enable Response Output Branch. That adds a second output with the actual body in it. If it’s empty, the expression is your problem. If it already shows your JSON, go looking for another Respond to Webhook node earlier in the flow, because the first one to run wins and n8n silently ignores every one after it.

I’ve narrowed down the issue.

My Lovable Content Studio sends a request to n8n. The n8n workflow now completes successfully, but Lovable returns:

“Generation failed — Generation timed out. The automation did not respond in time.”

The integration is designed to be asynchronous: Lovable sends callback_url, n8n generates the content, then sends the finished result back to Lovable.

However, Lovable’s current code uses await fetch(webhookUrl, ...), so it appears to wait for the initial n8n HTTP response.

Can you confirm the correct setup so the initial request is acknowledged immediately and Lovable then waits for the callback/polls for the completed post?

I do not want to rebuild the workflow or database. I’m trying to fix only this timeout/response-handshake issue.

Hey @David_Sichel, no n8n setting fixes this alone, because the timeout is Lovable’s await, not n8n being slow to answer.

The n8n side is one node, not a rebuild. Move a Respond to Webhook node so it sits directly after the trigger and give it Response Code 202 under Add Option. Execution carries on past it, so your AI nodes and Airtable still run exactly as they do now, and an HTTP Request node at the end posts the finished content to {{ $(‘Webhook’).first().json.body.callback_url }}.

The half you can’t avoid is Lovable. While its code treats the fetch response as the generated post, it will just show that acknowledgement instead of waiting for your callback.

solved thanks for everything