The n8n Webhook node's maximum payload is 16MB by default. If you self-host, you can raise it with the N8N_PAYLOAD_SIZE_MAX environment variable, set in MiB, and then restart the instance. Files sent in form-data webhook payloads have their own separate limit, N8N_FORMDATA_FILE_SIZE_MAX, which defaults to 200 MiB.
The webhook size settings in one table
If a workflow suddenly stops receiving data from a form tool, a CRM export or a batch job, the size of the incoming request is one of the first things I'd look at. There are two numbers involved, not one, and they're controlled separately.
| Item | Limit | Applies to |
|---|---|---|
| Webhook maximum payload | 16MB | Webhook node (default) |
| N8N_PAYLOAD_SIZE_MAX | 16 MiB default, adjustable upward | Self-hosted instances |
| N8N_FORMDATA_FILE_SIZE_MAX | 200 MiB default | Files in form-data webhook payloads |
| Applying a change | Instance restart required | Self-hosted instances |
The Webhook node page gives the default as 16MB and the environment variables page lists N8N_PAYLOAD_SIZE_MAX with a default of 16, measured in MiB. Treat them as the same default. If you're sending anything near that size, you're at the edge and it's time to plan.
What a webhook request has to fit inside
The Webhook node accepts DELETE, GET, HEAD, PATCH, POST and PUT requests, and each node gets a randomly generated URL path by default so two webhook nodes don't clash. Whatever method you use, the body of the request is what counts against the payload limit.
For most small-business automations, such as a form submission, a new order or a CRM update, you'll never get close. JSON for a single record is tiny. The trouble starts when someone sends a whole export in one request, or attaches images and PDFs directly to the call. That's when the two separate settings start to matter. If you're still getting comfortable with the difference between pulling data and having it pushed to you, my explainer on how an API call differs from a webhook covers the basics.
Raising the payload ceiling on a self-hosted instance
- Decide how large your biggest expected request is, and pick a value in MiB with some headroom.
- Set N8N_PAYLOAD_SIZE_MAX to that number in your instance's environment configuration.
- If the large requests carry files as form-data, set N8N_FORMDATA_FILE_SIZE_MAX as well, because it's a separate setting.
- Restart the n8n instance. Nothing changes until you do.
- Send a real request of the size you expect and check the execution completes.
n8n warns that a larger payload size needs more memory and CPU and may affect performance, so the machine underneath has to be able to handle it. Raise the value to what you need, not to the biggest number you can think of.
The variable is documented as a self-hosting setting. The documentation doesn't give a way to change it yourself on a hosted account, so I won't guess at what applies there. If you're on hosted n8n and keep hitting the ceiling, that's a question for n8n directly.
Two dials, one restart, and a heavier server
n8n Docs set out the trap clearly on the endpoints environment variables page. Raising N8N_PAYLOAD_SIZE_MAX doesn't change N8N_FORMDATA_FILE_SIZE_MAX, which governs files in form-data payloads. So you can lift one limit, restart, and still see uploads fail because the other one hasn't moved. Raising the payload also puts more load on memory and CPU, and none of it applies until the instance restarts.
My rule of thumb: change both together if files are involved, write down what you set and why, and restart at a quiet moment so you're not interrupting running workflows.
How other automation tools cap webhook bodies
Zapier states a maximum webhook payload size of 10MB for triggers and 2MB for Catch Raw Hook. If you're weighing the two tools for heavy data, my comparison of n8n and Zapier side by side looks at the wider trade-offs.
Pipedream limits the body of HTTP requests to a workflow to 512KB by default and returns 413 Payload Too Large above that. It allows large payloads with the pipedream_upload_body=1 query string or the x-pd-upload-body header.
Want AI doing the heavy lifting in your marketing?
I build the systems that handle the boring 80 percent, so you get your week back. Done properly, with the human kept in.
For a wider view of tools in this space, my roundup of other workflow automation platforms goes further.
My take for anyone sending big payloads
Don't make the webhook carry everything. Send a small notification with an ID or a file link, then let the workflow fetch the heavy part in a separate step. If you can't avoid big bodies on a self-hosted instance, raise N8N_PAYLOAD_SIZE_MAX, raise the form-data file limit too if files are involved, restart, and watch memory for the first few days.
Want your tool on this list? Featured spots and reviews here are paid partnerships. Here's how to partner with me.
Frequently asked questions
What is the n8n webhook payload limit?
16MB by default, according to the Webhook node documentation.
How do I increase it?
On a self-hosted instance, set N8N_PAYLOAD_SIZE_MAX in MiB and restart n8n.
Does the same limit apply to uploaded files?
No. Files in form-data payloads have their own variable, N8N_FORMDATA_FILE_SIZE_MAX, which defaults to 200 MiB.
Is there a downside to raising it?
n8n warns it needs more memory and CPU and may affect performance.
How does it compare to Zapier?
Zapier states 10MB for webhook triggers and 2MB for Catch Raw Hook.


