I’m working through the n8n Quickstart course (QS101), “Notifying the team” unit, on a self-hosted instance. Every node in the workflow runs successfully except the final Discord node (“Send a Message” via Webhook), which fails with an empty error.
The Discord node receives its input (1 item) but throws NodeOperationError from parseDiscordError (Discord/v2/actions/webhook/sendLegacy.operation.ts:153).
The error has no message — errorMessage: "" and errorDetails: {} are both empty.
What I’ve already checked / ruled out:
The Discord Webhook credential shows “Connection tested successfully”, so the Webhook URL is valid and reachable.
The Webhook URL is exactly the course one: https://learn.app.n8n.cloud/webhook/courses/n8n-quickstart/notify-team.
My Assessment ID is correctly set as the x-assessment-id header in the GetDataFromWarehouse HTTP Request node, and the message expression resolves it correctly.
The same Assessment ID works for the company-warehouse request (it returns 30 items), so the ID itself is valid.
The message preview renders fully and correctly (totalBooked, bookedSum, Assessment ID).
So the notify-team proxy seems to accept the credential test but reject the actual sendLegacy request, returning a response with no standard Discord error body (hence the empty NodeOperationError).
My question:
Has anyone gotten the QS101 “Notify the team” Discord step to work on self-hosted n8n? Is the notify-team webhook expected to work outside the course’s provided cloud LMS instance, or is something extra required (a header, origin, etc.) that the hosted instance injects automatically?
Information on my n8n setup:
n8n version: 2.26.6
Database: Postgres
n8n EXECUTIONS_PROCESS setting: default
Running n8n via: Self-hosted Docker
Operating system: Ubuntu 24.04
Error details:
Item Index
0
Node type
n8n-nodes-base.discord
Node version
2 (Latest)
n8n version
2.26.6 (Self Hosted)
Time
17.06.2026, 21:16:10
Stack trace
NodeOperationError: at ExecuteContext.parseDiscordError (/usr/local/lib/node_modules/n8n/node_modules/.pnpm/n8n-nodes-base@file+packages+nodes-base_@aws-sdk+credential-providers@3.808.0_asn1.js@5_8da18263ca0574b0db58d4fefd8173ce/node_modules/n8n-nodes-base/nodes/Discord/v2/helpers/utils.ts:78:9) at ExecuteContext.execute (/usr/local/lib/node_modules/n8n/node_modules/.pnpm/n8n-nodes-base@file+packages+nodes-base_@aws-sdk+credential-providers@3.808.0_asn1.js@5_8da18263ca0574b0db58d4fefd8173ce/node_modules/n8n-nodes-base/nodes/Discord/v2/actions/webhook/sendLegacy.operation.ts:153:34) at processTicksAndRejections (node:internal/process/task_queues:104:5) at ExecuteContext.router (/usr/local/lib/node_modules/n8n/node_modules/.pnpm/n8n-nodes-base@file+packages+nodes-base_@aws-sdk+credential-providers@3.808.0_asn1.js@5_8da18263ca0574b0db58d4fefd8173ce/node_modules/n8n-nodes-base/nodes/Discord/v2/actions/router.ts:65:17) at ExecuteContext.execute (/usr/local/lib/node_modules/n8n/node_modules/.pnpm/n8n-nodes-base@file+packages+nodes-base_@aws-sdk+credential-providers@3.808.0_asn1.js@5_8da18263ca0574b0db58d4fefd8173ce/node_modules/n8n-nodes-base/nodes/Discord/v2/DiscordV2.node.ts:33:10) at WorkflowExecute.executeNode (/usr/local/lib/node_modules/n8n/node_modules/.pnpm/n8n-core@file+packages+core_@opentelemetry+api@1.9.0_@opentelemetry+exporter-trace-otlp_cf5896492347c4895f0373f4acc773d7/node_modules/n8n-core/src/execution-engine/workflow-execute.ts:1053:8) at WorkflowExecute.runNode (/usr/local/lib/node_modules/n8n/node_modules/.pnpm/n8n-core@file+packages+core_@opentelemetry+api@1.9.0_@opentelemetry+exporter-trace-otlp_cf5896492347c4895f0373f4acc773d7/node_modules/n8n-core/src/execution-engine/workflow-execute.ts:1327:11) at /usr/local/lib/node_modules/n8n/node_modules/.pnpm/n8n-core@file+packages+core_@opentelemetry+api@1.9.0_@opentelemetry+exporter-trace-otlp_cf5896492347c4895f0373f4acc773d7/node_modules/n8n-core/src/execution-engine/workflow-execute.ts:1778:27 at /usr/local/lib/node_modules/n8n/node_modules/.pnpm/n8n-core@file+packages+core_@opentelemetry+api@1.9.0_@opentelemetry+exporter-trace-otlp_cf5896492347c4895f0373f4acc773d7/node_modules/n8n-core/src/execution-engine/workflow-execute.ts:2474:11
to better understand the issue: Can you share the complete error message and how your Discord node is configured, bot token or webhook URL? Also helpful: Does the Discord node run without errors when you test it in isolation, separate from the rest of the QS101 workflow?
A common cause of empty NodeOperationError messages in self-hosted setups is a missing or expired webhook URL, but without the exact error text it’s impossible to confirm that for certain.
Hey @Tessub, the empty NodeOperationError is happening because the notify-team webhook URL is a course-specific proxy on n8n’s cloud LMS — not a real Discord webhook. It likely requires session headers that are automatically injected when running inside the Academy environment, but aren’t present on a self-hosted instance.
A quick way to confirm: add a raw HTTP Request node pointing to the same URL and inspect the response body directly.
Workaround: Create your own Discord server, generate a real webhook URL, and swap it in. You’ll be able to complete and verify the workflow without depending on the course proxy.
This is almost certainly a course environment limitation, not a bug in your setup.
Thanks for reporting the issue. @Stanleyy was indeed correct, there was a backend error. I’ve tested the workflow on my local lab and it is indeed working now.
You can re-run the workflow to mark your progress,.
In the future please open your own topics as this is a different issue. Please outline the issue you’re having as I have tested this and it is working.