Self hosted with docker compose (actually through komodo, but that probably isn’t relevant I hope).
I am currently on version 2.64.4, but that’s only because I rolled back the docker container version for troubleshooting. The behavior was also broken/consistent on newest stable.
I am getting an “Invalid URL” error related to the discord node “NodeOperationError: Invalid URL at ExecuteContext.parseDiscordError”
The node is authenticating with a discord provided webhook and the credential window says that the connection is successful. I have tried as many combinations of env variables as I could find today over the last 3-4 hours and nothing seems to get the discord node to send properly.
What is the error message (if any)?
Please share your workflow
Share the output returned by the last node
{
“errorMessage”: “Invalid URL”,
“errorDetails”: {
“rawErrorMessage”: [
“Invalid URL”
]
},
“n8nDetails”: {
“nodeName”: “Discord”,
“nodeType”: “n8n-nodes-base.discord”,
“nodeVersion”: 2,
“operation”: “sendLegacy”,
“itemIndex”: 0,
“time”: “8/11/2026, 4:18:43 PM”,
“n8nVersion”: “2.26.4 (Self Hosted)”,
“binaryDataMode”: “filesystem”,
“stackTrace”: [
“NodeOperationError: Invalid URL”,
" 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 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"
]
}
}
Information on your n8n setup
n8n version: 2.34.4
Database (default: SQLite): SQLite (my docker compose does not define a DB, so whatever is on internal)
n8n EXECUTIONS_PROCESS setting (default: own, main): own, main
Running n8n via (Docker, npm, n8n cloud, desktop app): docker
Hi @Kickbut101 Welcome!
The Discord node with webhook auth uses the credential’s Webhook URL as the request URL verbatim, and the Discord node in your export has no credential attached ("credentials": {}), so the URL resolves to undefined and the request throws “Invalid URL” before it ever leaves n8n. A credential that tests fine on the credentials page still has to be selected on the node itself.
There’s an open regression since 2.14 where the credential dropdown stays greyed out on nodes that were saved without one, so deleting the Discord node and adding a fresh one is the reliable path: set Authentication to Webhook, pick the credential on the new node, then reconnect it to the Webhook node.
It does attach it, and that dropdown is the only place the node looks for it. The webhook path takes whatever is stored in that credential’s Webhook URL field and uses it as the request URL unchanged, so “Invalid URL” is coming from that stored value, not from the node being unconfigured. The field is masked once saved, so a URL that got truncated on paste looks identical to a good one.
Quickest way to tell which it is, and it doubles as a working replacement in the meantime, is to put an HTTP Request node where the Discord node sits:
Method: POST
URL: the Discord webhook URL pasted in directly
Body Content Type: JSON
Specify Body: Using Fields Below, one parameter named content with your message
If that lands in the channel, the URL itself is fine and the failure is in how the credential value reaches the node. HTTP Request | Nodes | n8n Docs
@Anshul_Namdev
Yeah, I have done that too, I can confirm the webhook URL is good/valid. I was just hoping to not have to custom HTTP Post the data for this. It is odd that the “Connection Valid” test in the webhook credential window can confirm the validity of the URL (and it ALSO complains/says it’s bad if I delete a character), but that it cannot work in the node when used as expected.
Bot auth is the way to stay on the Discord node. Switching Connection Type from Webhook to Bot sends through the Discord API with a bot token rather than the stored webhook URL, so Message > Send posts to general without going near the code path that’s failing.
Setup runs in the Discord developer portal: create an app, Bot > Reset Token for the token, tick Send Messages and Read Messages/View Channels under Bot Permissions, then Installation > Install Link and Add to server. Paste the token into a new Discord Bot API credential, then pick the server and channel on the node.
I’m aware I can go the bot auth route, but I was hoping to avoid having to install or add a bot into the servers I wanted to use this for. I was ideally trying to keep this lighter and smaller via the webhook worfklow. Unless I’m misunderstanding what you are saying?
Also, does this mean there is a bug in the webhook usage for the discord node?
Yes, it’s a bug on the node’s webhook path, nothing in your setup. n8n logged it as NODE-5739 off this thread, so it sits with their devs and no setting on your side moves it.
The bot isn’t the only way to avoid it. The HTTP Request POST you already have running is the lighter option, same webhook URL, nothing added to the server, and it swaps back to the Discord node once the fix ships.