Discord node "Send a Message" (Webhook) fails with empty NodeOperationError on self-hosted — QS101 "Notify the team" step

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.

What’s happening:

  • The whole workflow executes fine end-to-end: Trigger Manually → GetDataFromWarehouse (30 items) → CheckOrderStatus (14 true / 16 false) → CalculateBookedOrders (1 item).
  • 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 messageerrorMessage: "" 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

Hello @Alex_Badiia,

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.

{
“errorMessage”: “”,
“errorDetails”: {},
“n8nDetails”: {
“nodeName”: “n8n Quickstart S1 Discord Webhook account”,
“nodeType”: “n8n-nodes-base.discord”,
“nodeVersion”: 2,
“operation”: “sendLegacy”,
“itemIndex”: 0,
“time”: “17.06.2026, 20:44:18”,
“n8nVersion”: “2.26.6 (Self Hosted)”,
“binaryDataMode”: “filesystem”,
“stackTrace”: [
“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"
]
}
}

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.

Hello,

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,.

cheers,

Hello everyone,

I’m reopening this topic because the same issue is occurring further along in the course, on the webhook https://learn.app.n8n.cloud/webhook/courses/n8n-quickstart/notify-reports

Could you please check the webhook backend?

Thank you!!

Hello,

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.

cheers,