An execution fails, the row glows red, and the operator's eyes slide past the only object trying to tell them what happened. n8n error output looks hostile but is pathologically informative once you learn the grammar — and the grammar has about nine tokens.
First split: NodeOperationError vs NodeApiError
NodeOperationError = the node judged your input guilty before any network call: invalid parameter, missing field, wrong-shaped expression output. Fix in the canvas.
NodeApiError = the request was fine and the external service rejected it. Fix in credentials, scopes, endpoint, or the API account. Splitting these at a glance halves every debugging session.
The HTTP family, ranked by real-world frequency
- 400 — payload violates the API schema; usually a field renamed upstream or a required field that went silently empty
- 401 — credential rejected: expired token, wrong key, revoked OAuth grant
- 403 — authenticated but unauthorized: scope or plan tier doesn't cover the endpoint
- 404 — resource moved, or the URL template rendered wrong
- 429 — rate limit: retry with backoff (a per-node Retry On Fail policy makes this a permanent non-event)
- 500/502/503/504 — genuinely not you: vendor outage. Retry, alert on exhaustion, never rewrite workflows mid-outage
The sneaky one that isn't an error
An execution that succeeded with empty data is the most expensive failure class there is: the node ran, output was nulls, everything downstream happily processed nothing. Almost always a renamed node reference from the last edit. No red row, no ping — only a validating habit catches it.
Translation on demand
Paste any error into the free n8n error lookup for the plain-English meaning and standard fix path — client-side, nothing stored. For the pre-checks that stop the empty-success class before it ships: the free workflow audit checks the exported JSON, also browser-only.
Learn the nine tokens. Errors stop ruining your evening and start telling you things.
Top comments (0)