Handle errors

How do I properly handle errors without breaking the entire workflow?

Describe the problem/error/question

What is the error message (if any)?

Please share your workflow

(Select the nodes on your canvas and use the keyboard shortcuts CMD+C/CTRL+C and CMD+V/CTRL+V to copy and paste the workflow.)

Share the output returned by the last node

Information on your n8n setup

  • n8n version:
  • Database (default: SQLite):
  • n8n EXECUTIONS_PROCESS setting (default: own, main):
  • Running n8n via (Docker, npm, n8n cloud, desktop app):
  • Operating system:

Hi @Abrayomo
We usually do 2 things to handle errors. The first is to add an error workflow in the settings of the flow, like you can see the settings here:


And so for that you first have to create another flow, for example, an error flow, which should look like this:

And so once you have created a flow like this which notifies you of any error that occurred, you can manually run this, and it will simulate an example, and then you can set this up with messaging platforms to send an error warning. Once the flow is done, make sure it is published, and then you would be able to see this flow in the settings of another flow which you want to send error-occurring messages to, and then hit the save button, and whenever there is any error, it would report to you.

Now above was about the whole workflow, but what if you want to handle specific node-related errors? So for that, each node has this option:


Which is continuing to use error output, and that allows you to have another branch which is

And so with this error branch you can either remind yourself of the error OR you can set up some backup logic to recover or even retry the node or execute another node by attaching it to the error branch.

Hope this helps.

Different angle: handle errors at the node level, not the whole flow. Open the failing node → Settings → set On Error to “Continue (using error output)”, then wire the red error branch into a log/notify node. Only that step’s failure is handled; the rest keeps running.

{ "nodes": [ {"name":"HTTP Request","type":"n8n-nodes-base.httpRequest","onError":"continueErrorOutput"}, {"name":"Success","type":"n8n-nodes-base.set"}, {"name":"Log Error","type":"n8n-nodes-base.set","parameters":{"values":{"string":[{"name":"error","value":"={{$json.error.message}}"}]}}} ], "connections":{"HTTP Request":{"main":[[{"node":"Success"}],[{"node":"Log Error"}]]}} }

Second main output = error branch. Swap HTTP for whichever node fails.