Skip to main content

25 Common n8n Errors and Exactly How to Fix Them

25 common n8n errors with the exact message text, the documented cause and the fix: HTTP 401 and 429, expression errors, Code node, webhooks and memory.

Founder of IImagined.ai

Published
Oct 11, 2026
Reading time
12 min read
Quick answer

Most n8n errors fall into five groups: API errors from the HTTP Request and app nodes, expression errors, Code node errors, webhook and trigger errors, and connection or memory errors on the instance. This page lists 25 of them with the exact message text from n8n's docs and the 2.42.6 source, the documented cause and the fix. Retry On Fail only helps the temporary ones, such as 429 and 5xx; the rest need a change to the request, the credential or the workflow.

Most n8n errors fall into five groups: API errors from the HTTP Request and app nodes, expression errors, Code node errors, webhook and trigger errors, and connection or memory errors on the instance itself. This page lists 25 of them with the exact text n8n shows, the documented cause and the fix, grouped by where they appear, so you can search for the message on your screen.

Every message is quoted from n8n's documentation or from the source of n8n 2.42.6, the stable release on 9 October 2026, checked October 2026: the common-issues pages for the HTTP Request, Code and Webhook nodes, the expressions, item linking and memory pages, and the error classes in node-api.error.ts, workflow-data-proxy.ts and result-validation.ts. Nothing here was collected from a live instance.

This is the lookup page in our n8n hub. Once an error is fixed, the n8n error handling guide covers retries and alerts so the next one reaches you, the Error Trigger guide covers the alert workflow itself, and five ways workflows fail silently covers the failures that show no error at all.

How do you read n8n errors before fixing them?

Read past the first line. n8n replaces raw status codes with friendly sentences, so the headline is often n8n's wording and the detail underneath is the service's. Work through an error in this order:

Where an n8n error tells you what is wrong
  1. 01
    The message

    One line, such as Authorization failed. For API errors n8n picks it from the HTTP status code.

  2. 02
    The description

    The second line: what the service answered, or n8n's own hint about the cause.

  3. 03
    The node and the item

    Which node failed, and on which input item. One bad record out of 500 is a data problem.

  4. 04
    The execution

    Executions tab, failed run, Debug in editor: the same input, ready to rerun.

  5. 05
    The server log

    Self-hosted only. Startup, encryption-key and memory errors never reach the editor.

Where n8n's docs and its code word a message differently, the tables below use the code's wording for 2.42.6 and mention the older one. Placeholders such as Name, my-path and item 0 stand for your own node name, webhook path and item number.

n8n error 401 and the other HTTP status errors

The HTTP Request node and every app node built on an API share one set of messages: n8n maps the status code to a fixed sentence. A 401 always reads "Authorization failed - please check your credentials", whichever service sent it.

Error textWhat it meansFix
Bad request - please check your parametersHTTP 400. The docs name two usual causes: an invalid name or value in a query parameter, or an array in a query parameter that is formatted wrongly.Compare the request with the API's reference. For arrays, set the Array Format in Query Parameters option. In the Gmail node, check that the message, thread or label ID exists.
Authorization failed - please check your credentialsHTTP 401. The service rejected the credential: a wrong, expired or revoked key or token.Open the credential, test it, then reconnect or replace it. Do not retry: the same token fails the same way.
Forbidden - perhaps check your credentials?HTTP 403. The credential works but is not allowed to do this. In the Gmail node it appears with a Service Account that has Impersonate a User switched off.Add the missing scope or permission, or create a key that has it. For a Google Service Account, turn on Impersonate a User.
The resource you are requesting could not be foundHTTP 404. The docs: the endpoint URL is invalid, from a typo or a deprecated API.Check the URL, and any ID an expression builds into it, against the current API reference.
The service is receiving too many requests from youHTTP 429. You hit the service's rate limit.In the HTTP Request node add the Batching option (Items per Batch, Batch Interval), or turn on Retry On Fail. In other nodes, use Loop Over Items with a Wait node.
The service refused the connection - perhaps it is offlineECONNREFUSED. The host answered but nothing listens on that port. Inside Docker, localhost is the n8n container itself.Use host.docker.internal for the host machine, the service name for another container, or 127.0.0.1 where localhost resolves to IPv6. On n8n Cloud, expose the target on a public URL.

The same map covers 5xx responses: 500 reads "The service was not able to process your request", 502 "Bad gateway - the service failed to handle your request" and 504 "Gateway timed out - perhaps try again later?". Those are the service's problem, and the only fix on your side is to retry. That split decides most of your response:

Will a retry fix it?
Their side
A 404 after an API change, or a 403 for a scope the service does not grant: change the request or the plan.
429, 502, 503, 504 and dropped connections: turn on Retry On Fail and slow the calls down.
Your side
400, 401, expression errors and Code node errors: fix the request, the credential or the workflow.
Out of memory or a task runner at capacity: shrink the batch or add resources, then run again.
Retry will not help
Retry can help

If you are wiring a new API, our guide to connecting any API in n8n covers authentication and pagination before the first 400 appears.

n8n expression error: what each message means

An expression error means n8n could not turn {{ }} into a value. Three causes cover almost all of them: the node you reference has not run, n8n cannot tell which item you mean, or the expression itself does not parse.

Error textWhat it meansFix
Can’t get data for expressionn8n cannot retrieve what the expression points at. The docs: often the preceding node has not run yet. On a field it reads "Can’t get data for expression under ‘Field’ field".Execute the workflow up to the referenced node, then reopen this one. In production, make sure that node is on the path every run takes.
Node 'Name' hasn't been executedAn expression references a node that did not run in this execution. The editor adds: "Either change the expression, or re-wire your workflow to make sure that node executes first." The docs call it Referenced node is unexecuted.Rewire so the node runs first, or guard the reference with $('Name').isExecuted.
invalid syntaxThe expression does not parse. The docs' example is a trailing period: {{ $('If').item.json. }}Check brackets, quotes and dots. The preview under the field shows the result as you type.
Multiple matching items for item [0]You used .item after a node that combines items, such as Summarize, Aggregate or Merge, so n8n cannot tell which one you mean. In a Code node the same error reads Multiple matches.Use .first(), .last() or .all()[index], or reference a node from before the items were combined.
The 'JSON Output' in item 0 contains invalid JSONEdit Fields (Set) in JSON mode received text that is not a JSON object, often because an expression inside it returned undefined.Validate the JSON, wrap string expressions in quotes, and give optional fields a fallback with $ifEmpty().
References that break, and the version that holds
Breaks easily
  • Using .item after a Merge, Aggregate or Summarize node
  • Reading a node on a branch that may not run
  • JSON mode fields built from values that can be undefined
  • Closing the node without looking at the expression preview
Holds up
  • .first(), .last() or .all()[index] once items have been combined
  • Checking $('Name').isExecuted before the reference
  • $ifEmpty(value, fallback) around optional fields
  • A real value in the preview before you close the node

Source: n8n item linking and expression docs, checked October 2026

One item-linking case does not stop the run at all. When the referenced node is on another branch, the docs say the expression "resolves to null and the node still succeeds", and the error only shows in the editor's preview. That is how a Merge in Append mode produces rows with empty fields.

Code node errors

Code node errors come in two kinds: your code returned the wrong shape, or the sandbox refused something. Since n8n 2.0 the Code node runs in a task runner, which adds a third kind on self-hosted setups: the runner is not there to take the job.

Error textWhat it meansFix
Code doesn't return items properlyIn Run Once for All Items mode the code must return an array of objects, one for each output item.Return [{ json: { ... } }], or an array of plain objects. Check that every code path returns.
A 'json' property isn't an objectA returned item has a json key that points to an array, a string or a number.Wrap the value in an object, for example { json: { rows: myArray } }.
'import' and 'export' may only appear at the top levelThe Code node's sandbox does not support import or export statements.Load modules with require() on a self-hosted instance that allows them.
Module 'name' is disallowedThe module is not on the Code node's allowlist. The docs list the related Cannot find module error, which you get when an allowed module is not installed.Self-hosted: set NODE_FUNCTION_ALLOW_BUILTIN or NODE_FUNCTION_ALLOW_EXTERNAL, on the task runner if you run one, and install the package in the image. n8n Cloud does not support importing modules.
Task request timed outThe description says the Code node task "was not matched to a runner within the timeout period": the task runner is down, not ready or at capacity. The default wait is 60 seconds.Self-hosted: check the runner container is running, on the same version as n8n and using the same auth token. Space out heavy Code nodes. N8N_RUNNERS_TASK_REQUEST_TIMEOUT raises the wait.

Webhook and trigger errors

Webhook errors are mostly about which URL is listening. n8n gives every Webhook node a test URL and a production URL, and each answers only in its own state. Our n8n webhook guide explains the two in full.

Error textWhat it meansFix
The requested webhook "POST my-path" is not registered.n8n's 404 reply when nothing listens on that URL. On a test URL the hint says the webhook "only works for one call after you click this button". On a production URL the workflow is not published.Production: publish the workflow and call the Production URL. Testing: select Listen for test event, then send the request within 120 seconds.
This webhook is not registered for GET requests. Did you mean to make a POST request?The path exists, but the HTTP method does not match the Webhook node.Change the sender's method or the node's HTTP Method. To accept several, turn on Allow Multiple HTTP Methods in the node's Settings.
There is a conflict with one of the webhooks.Publishing failed because another published workflow already uses the same path and method. n8n registers one webhook for each combination.Unpublish the other workflow, or change the path or method on one of them.
Bad request: bad webhook: An HTTPS URL must be provided for webhookTelegram Trigger. n8n registered a webhook address that is not public HTTPS, usually behind a reverse proxy with no webhook URL set.Terminate TLS at the proxy and set N8N_WEBHOOK_URL (WEBHOOK_URL on versions before 2.30.0) to the public https address.
401 - {"error":"unauthorized_client", ...}Gmail and Google Drive nodes and triggers. Google will not issue a token for this client and these scopes.OAuth2: enable the service's API under APIs & Services, Library. Service Account: enable domain-wide delegation and add the API to it.

Two notes on wording. The hint n8n sends with the production 404 still says the workflow "must be active" and mentions a toggle; in n8n 2.x that means published. And the Telegram and Google messages come from those services, passed through by n8n, which is why they look different from the rest.

n8n cannot connect to server: connection and memory errors

These errors are about the instance, not a workflow. The first question is which side lost the connection: your browser to n8n, or n8n to something else. A refused connection inside a node is the second kind and sits in the HTTP table above.

Error textWhat it meansFix
Could not connect to server. Refresh to try againA toast titled Error connecting to n8n. The editor could not load its settings from the backend when the page opened.Check the instance is up: /healthz should return 200. Self-hosted: read the container logs and check the proxy forwards to n8n's port.
Connection lostThe editor lost its live connection. n8n's tooltip: "You have a connection issue or the server is down." Behind a reverse proxy, the docs point to missing websocket support.Enable websocket proxying in Nginx, Caddy, Traefik or Apache. If it appears during large runs, treat it as a memory problem (next row).
Execution stopped at this nodeThe description: "n8n may have run out of memory while running this execution." Server logs may show Allocation failed - JavaScript heap out of memory.Process smaller batches, move heavy steps into sub-workflows and avoid manual runs on large data. Self-hosted: add memory or raise --max-old-space-size.
Credentials could not be decrypted. The likely reason is that a different "encryptionKey" was used to encrypt the data.The instance, or a queue-mode worker, runs with a different N8N_ENCRYPTION_KEY from the one that saved the credentials.Restore the original key from your backup and set the same N8N_ENCRYPTION_KEY on the main instance and every worker.

n8n's memory docs list the signs of an instance that ran out of memory: Problem running workflow, Connection Lost and 503 Service Temporarily Unavailable. n8n Cloud and the Docker image restart on their own after such a crash. The Cloud vs self-hosted guide covers the upkeep you take on when the server is yours.

The four patterns behind almost every n8n error

Read the 25 rows again and the same four causes repeat. Naming the pattern is faster than searching the message.

  • The credential. 401, 403, unauthorized_client and failed decryption. Nothing in the workflow is wrong, and nothing in the workflow can fix it.
  • The shape of the data. Invalid JSON, a json property that is not an object, a 400 from a malformed parameter. The input changed or was never what you assumed.
  • The path that did not run. An unexecuted node, a webhook that is not registered, a workflow that is not published. The reference is fine and the thing it points at is absent.
  • Capacity. 429, memory stops, a task runner that never picks up the job. The work is correct and there is too much of it at once.
A debugging routine for any n8n error
  1. 1
    Copy the whole error

    Message, description and node name. The description usually holds the service's own answer.

  2. 2
    Name the pattern

    Credential, data shape, path or capacity. It tells you whether to look at the workflow at all.

  3. 3
    Find the failing item

    Open the failed execution and check which input item broke. Compare it with one that passed.

  4. 4
    Reproduce it on purpose

    Use Debug in editor to load the failed run's data, then execute only the failing node.

  5. 5
    Fix the cause, not the run

    Change the request, credential or expression. Add Retry On Fail only for temporary errors.

  6. 6
    Retry the original execution

    Retry it from the Executions tab so the stuck record is processed, not skipped.

Stop the same error coming back

Before a workflow goes live
  • Every expression shows a real value in its preview, tested with an item that has empty fields
  • Retry On Fail is on for calls that hit rate limits and are safe to repeat
  • Optional fields have a fallback, and lookups that may return nothing are handled
  • Code nodes return items in the documented shape on every code path
  • The sender uses the Production URL and the workflow is published
  • An error workflow is set, so a failed run sends an alert with the execution link
  • Self-hosted: the encryption key is backed up and identical on every worker

The habit behind this list carries over when automations turn into a product. Our AI SaaS Builder program has no n8n lessons, but its lesson on production hardening covers the same three subjects for Claude API features in your own code: errors, rate limits and fallbacks.

n8n errors: FAQ

What are the most common n8n errors?

They fall into five groups. API errors from the HTTP Request and app nodes, such as "Authorization failed - please check your credentials" for a 401. Expression errors, such as "Can’t get data for expression". Code node errors, such as "Code doesn't return items properly". Webhook errors, such as a webhook that "is not registered". And instance errors: "Connection lost", out-of-memory stops and credentials that cannot be decrypted.

How do I fix n8n error 401?

n8n shows a 401 as "Authorization failed - please check your credentials". The service rejected the key or token, so open the credential, test it and reconnect or replace it. Retrying does not help, because the same token fails the same way. For Google nodes, a 401 with unauthorized_client means the API is not enabled in the Google Cloud project, or a Service Account lacks domain-wide delegation.

Why does n8n say it could not connect to the server?

The editor shows "Could not connect to server. Refresh to try again" when it cannot load its settings from the n8n backend as the page opens. The instance is down, restarting, or unreachable through your proxy. Call /healthz on the instance: a 200 means n8n is reachable. If a node shows a refused connection instead, the workflow could not reach another service, which is a different problem.

What does "Can’t get data for expression" mean in n8n?

n8n could not retrieve the data an expression points at. The n8n docs say this often happens because the preceding node has not run yet, which is normal while you build: execute the workflow up to that node and the expression resolves. If it appears in a production run, the referenced node is on a branch that did not execute for that item.

Why does my n8n webhook say it is not registered?

n8n answers 404 and says the requested webhook "is not registered" when nothing is listening on that URL. For a production URL, the workflow is not published. For a test URL, you have to select Listen for test event first, and the URL only listens for 120 seconds. If the message names an HTTP method, the path is right and the sender is using the wrong method.

Does Retry On Fail fix n8n errors?

Only temporary ones. Retry On Fail helps with rate limits (429), gateway errors (502, 503, 504) and dropped connections. It cannot fix a 400, 401, 403 or 404, an expression error or a Code node error, because the same input fails the same way every time. Fix the request, the credential or the workflow instead, and keep retries for calls that are safe to repeat.

Where do I find the full error message in n8n?

Open the workflow's Executions tab, filter by failed runs and select the execution. The failing node shows the message, a description and, for API errors, the response the service sent. Debug in editor copies that run's data into the canvas so you can reproduce it. On self-hosted n8n, startup, encryption-key and memory errors only appear in the server or container logs.

All Access · all four programs · $99/mo

You can read what n8n is telling you. Next, build something worth debugging.

AI SaaS Builder, included in All Access, takes the same skills into your own code: Supabase and Next.js, Claude API features with production hardening for errors, rate limits and fallbacks, Claude Code and MCP, deployment and Stripe billing. All Access adds the other three programs, live coaching and the private community.

Start All Access — $99/mo →30-day money-back guarantee
Free

Got an error that is not on this list?

Paste the full message into the free Discord, where members trade n8n fixes, or start from a working workflow in our template library.