Header credential failing to connect or authorize the n8n getAll:workflow action

Hello. I am new to n8n and am running a self-hosted instance of n8n Community Edition v1.76.1 in Queue Mode w/ Webhook processors on Railway AI. Database is Postgres. Deployment was a Template from a Comunity Member, Jack. The n8n Template installation in Railway was flawless and is operating well.

I have imported a substantial number of blueprints (thank you community, you are just fantastic) and thought it wise to deploy an n8n Backup workflow just in case I inadvertly crash something up on Railway.

I have imported Jonathan’s impressively engineered Backup workflow template which appears to have been configured for Enterprise and am starting to work through iterative Test step configurations to make requisite adjustments having already applied my credentials where required.

<{
“name”: “Back Up n8n Workflows To Github”,
“nodes”: [
{
“parameters”: {},
“id”: “421824c2-59a2-441b-aacc-7dadf2ec153b”,
“name”: “On clicking ‘execute’”,
“type”: “n8n-nodes-base.manualTrigger”,
“position”: [
860,
320
],
“typeVersion”: 1
},
{
“parameters”: {
“content”: “## Subworkflow”,
“height”: 731.7039821513649,
“width”: 1910.7813046051347,
“color”: 6
},
“id”: “c6024a57-1957-4714-84e3-8d326c83cd89”,
“name”: “Sticky Note”,
“type”: “n8n-nodes-base.stickyNote”,
“position”: [
380,
700
],
“typeVersion”: 1
},
{
“parameters”: {},
“id”: “07691901-a8d2-4891-860b-1d672361021b”,
“name”: “Execute Workflow Trigger”,
“type”: “n8n-nodes-base.executeWorkflowTrigger”,
“position”: [
440,
1080
],
“typeVersion”: 1
},
{
“parameters”: {
“filters”: {},
“requestOptions”: {}
},
“id”: “2b1dd138-7872-42ea-9882-8750ef4cf227”,
“name”: “n8n”,
“type”: “n8n-nodes-base.n8n”,
“position”: [
1260,
420
],
“typeVersion”: 1,
“credentials”: {
“n8nApi”: {
“id”: “GHODKsVn9EVCMPjs”,
“name”: “n8n account”
}
}
},
{
“parameters”: {
“assignments”: {
“assignments”: [
{
“id”: “8d513345-6484-431f-afb7-7cf045c90f4f”,
“name”: “Done”,
“type”: “boolean”,
“value”: true
}
]
},
“options”: {}
},
“id”: “96c0c6a7-2a11-441d-8177-e0a18030daf9”,
“name”: “Return”,
“type”: “n8n-nodes-base.set”,
“position”: [
2100,
900
],
“typeVersion”: 3.3
},
{
“parameters”: {
“url”: “={{ $json.download_url }}”,
“options”: {}
},
“id”: “6715d1ff-a1f0-4e1a-b96e-f680d1495047”,
“name”: “Get File”,
“type”: “n8n-nodes-base.httpRequest”,
“position”: [
1060,
780
],
“typeVersion”: 4.2
},
{
“parameters”: {
“conditions”: {
“options”: {
“leftValue”: “”,
“caseSensitive”: true,
“typeValidation”: “strict”
},
“combinator”: “and”,
“conditions”: [
{
“id”: “45ce825e-9fa6-430c-8931-9aaf22c42585”,
“operator”: {
“type”: “string”,
“operation”: “empty”,
“singleValue”: true
},
“leftValue”: “={{ $json.content }}”,
“rightValue”: “”
},
{
“id”: “9619a55f-7fb1-4f24-b1a7-7aeb82365806”,
“operator”: {
“type”: “string”,
“operation”: “notExists”,
“singleValue”: true
},
“leftValue”: “={{ $json.error }}”,
“rightValue”: “”
}
]
},
“options”: {}
},
“id”: “443b18e8-c05b-444f-b323-dea0b3041939”,
“name”: “If file too large”,
“type”: “n8n-nodes-base.if”,
“position”: [
820,
800
],
“typeVersion”: 2
},
{
“parameters”: {},
“id”: “e460a2cd-f7af-4551-8ea2-84d9b9e5cb7f”,
“name”: “Merge Items”,
“type”: “n8n-nodes-base.merge”,
“position”: [
820,
1060
],
“typeVersion”: 2
},
{
“parameters”: {
“jsCode”: “const orderJsonKeys = (jsonObj) => {\n const ordered = {};\n Object.keys(jsonObj).sort().forEach(key => {\n ordered[key] = jsonObj[key];\n });\n return ordered;\n}\n\n// Check if file returned with content\nif (Object.keys($input.all()[0].json).includes("content")) {\n // Decode base64 content and parse JSON\n const origWorkflow = JSON.parse(Buffer.from($input.all()[0].json.content, ‘base64’).toString());\n const n8nWorkflow = $input.all()[1].json;\n \n // Order JSON objects\n const orderedOriginal = orderJsonKeys(origWorkflow);\n const orderedActual = orderJsonKeys(n8nWorkflow);\n\n // Determine difference\n if (JSON.stringify(orderedOriginal) === JSON.stringify(orderedActual)) {\n $input.all()[0].json.github_status = "same";\n } else {\n $input.all()[0].json.github_status = "different";\n $input.all()[0].json.n8n_data_stringy = JSON.stringify(orderedActual, null, 2);\n }\n $input.all()[0].json.content_decoded = orderedOriginal;\n// No file returned / new workflow\n} else if (Object.keys($input.all()[0].json).includes("data")) {\n const origWorkflow = JSON.parse($input.all()[0].json.data);\n const n8nWorkflow = $input.all()[1].json;\n \n // Order JSON objects\n const orderedOriginal = orderJsonKeys(origWorkflow);\n const orderedActual = orderJsonKeys(n8nWorkflow);\n\n // Determine difference\n if (JSON.stringify(orderedOriginal) === JSON.stringify(orderedActual)) {\n $input.all()[0].json.github_status = "same";\n } else {\n $input.all()[0].json.github_status = "different";\n $input.all()[0].json.n8n_data_stringy = JSON.stringify(orderedActual, null, 2);\n }\n $input.all()[0].json.content_decoded = orderedOriginal;\n\n} else {\n // Order JSON object\n const n8nWorkflow = $input.all()[1].json;\n const orderedActual = orderJsonKeys(n8nWorkflow);\n \n // Proper formatting\n $input.all()[0].json.github_status = "new";\n $input.all()[0].json.n8n_data_stringy = JSON.stringify(orderedActual, null, 2);\n}\n\n// Return items\nreturn $input.all();\n”
},
“id”: “f795180a-66aa-4a86-acb0-96cf8c487db0”,
“name”: “isDiffOrNew”,
“type”: “n8n-nodes-base.code”,
“position”: [
1020,
1060
],
“typeVersion”: 1
},
{
“parameters”: {
“dataType”: “string”,
“value1”: “={{$json.github_status}}”,
“rules”: {
“rules”: [
{
“value2”: “same”
},
{
“value2”: “different”,
“output”: 1
},
{
“value2”: “new”,
“output”: 2
}
]
}
},
“id”: “30e7d6fc-327e-4693-95ce-376a3b1f145c”,
“name”: “Check Status”,
“type”: “n8n-nodes-base.switch”,
“position”: [
1420,
1060
],
“typeVersion”: 1
},
{
“parameters”: {},
“id”: “36f12309-c7fe-446f-9571-bd1005c18ed8”,
“name”: “Same file - Do nothing”,
“type”: “n8n-nodes-base.noOp”,
“position”: [
1640,
900
],
“typeVersion”: 1
},
{
“parameters”: {},
“id”: “45f0eaa7-259b-4908-b567-af2b3b5abb6d”,
“name”: “File is different”,
“type”: “n8n-nodes-base.noOp”,
“position”: [
1640,
1060
],
“typeVersion”: 1
},
{
“parameters”: {},
“id”: “d16ec06b-7a3f-486e-8328-935ed3b4d565”,
“name”: “File is new”,
“type”: “n8n-nodes-base.noOp”,
“position”: [
1640,
1260
],
“typeVersion”: 1
},
{
“parameters”: {
“resource”: “file”,
“owner”: {
“__rl”: true,
“mode”: “”,
“value”: “={{ $(‘Config’).first().item.repo_owner }}”
},
“repository”: {
“__rl”: true,
“mode”: “”,
“value”: “={{ $(‘Config’).first().item.repo_name }}”
},
“filePath”: “={{ $(‘Config’).first().item.repo_path }}{{ $json.subPath }}{{$(‘Execute Workflow Trigger’).first().json.id}}.json”,
“fileContent”: “={{$(‘isDiffOrNew’).item.json["n8n_data_stringy"]}}”,
“commitMessage”: “={{$(‘Execute Workflow Trigger’).first().json.name}} ({{$json.github_status}})”
},
“id”: “cdc7f306-b7d2-4de1-8e44-0bd8d49a679f”,
“name”: “Create new file”,
“type”: “n8n-nodes-base.github”,
“position”: [
1860,
1260
],
“typeVersion”: 1,
“credentials”: {
“githubApi”: {
“id”: “NYCmP55BOYeWZooP”,
“name”: “GitHub account”
}
}
},
{
“parameters”: {
“resource”: “file”,
“operation”: “edit”,
“owner”: {
“__rl”: true,
“mode”: “”,
“value”: “={{ $(‘Config’).first().item.repo_owner }}”
},
“repository”: {
“__rl”: true,
“mode”: “”,
“value”: “={{ $(‘Config’).first().item.repo_name }}”
},
“filePath”: “={{ $(‘Config’).first().item.repo_path }}{{ $json.subPath }}{{$(‘Execute Workflow Trigger’).first().json.id}}.json”,
“fileContent”: “={{$(‘isDiffOrNew’).item.json["n8n_data_stringy"]}}”,
“commitMessage”: “={{$(‘Execute Workflow Trigger’).first().json.name}} ({{$json.github_status}})”
},
“id”: “9785333a-4a86-448d-afc2-58b0aa50ea96”,
“name”: “Edit existing file”,
“type”: “n8n-nodes-base.github”,
“position”: [
1860,
1060
],
“typeVersion”: 1,
“credentials”: {
“githubApi”: {
“id”: “NYCmP55BOYeWZooP”,
“name”: “GitHub account”
}
}
},
{
“parameters”: {
“options”: {}
},
“id”: “806db72c-c9f6-461d-be1a-1e6867a25382”,
“name”: “Loop Over Items”,
“type”: “n8n-nodes-base.splitInBatches”,
“position”: [
1460,
420
],
“typeVersion”: 3
},
{
“parameters”: {
“rule”: {
“interval”: [
{
“triggerAtHour”: 1
}
]
}
},
“id”: “e5c433e4-bf56-4a0a-906c-7d74f6fe7287”,
“name”: “Schedule Trigger”,
“type”: “n8n-nodes-base.scheduleTrigger”,
“position”: [
860,
520
],
“typeVersion”: 1.2
},
{
“parameters”: {
“assignments”: {
“assignments”: [
{
“id”: “dae43d3b-56e5-4098-b602-862ebf5cd073”,
“name”: “subPath”,
“type”: “string”,
“value”: “={{ $(‘Execute Workflow Trigger’).first().json.createdAt.split(‘-’)[0] }}/{{ $(‘Execute Workflow Trigger’).first().json.createdAt.split(‘-’)[1] }}/”
}
]
},
“includeOtherFields”: true,
“options”: {}
},
“id”: “f6b566cb-0a15-4792-ba27-d6cd2a6c9453”,
“name”: “Create sub path”,
“type”: “n8n-nodes-base.set”,
“position”: [
1220,
1060
],
“typeVersion”: 3.3
},
{
“parameters”: {
“content”: “### Jonathan\n## Backup to GitHub \nThis workflow will backup all instance workflows to GitHub every 24 hours.\n\nThe files are saved into folders using YYYY/MM/ for the directory path and ID.json for the filename.\n\nThe Repo Owner, Repo Name and Main folder are set using the Variables feature but can be replaced with the Config node in the subworkflow. \n\nThe workflow runs calls itself to help reduce memory usage, Once the workflow has completed it will send an optional notification to Slack.\n\n### Time to Run\nTested with 1423 workflows on 1.44.1 it took under 30 minutes for the first run and under 12 minutes once the initial run is complete.”,
“height”: 477,
“width”: 385,
“color”: 4
},
“id”: “9e2412f6-df25-4c12-8faf-0200558b537c”,
“name”: “Sticky Note1”,
“type”: “n8n-nodes-base.stickyNote”,
“position”: [
380,
180
],
“typeVersion”: 1
},
{
“parameters”: {
“content”: “## Main workflow loop”,
“height”: 416.1856906618075,
“width”: 1272.6408145680155,
“color”: 7
},
“id”: “00fdb977-4f3e-49f6-81c3-bc7f9520914f”,
“name”: “Sticky Note2”,
“type”: “n8n-nodes-base.stickyNote”,
“position”: [
820,
240
],
“typeVersion”: 1
},
{
“parameters”: {
“select”: “channel”,
“channelId”: {
“__rl”: true,
“value”: “C08BP8GSWLR”,
“mode”: “list”,
“cachedResultName”: “dc_n8n_backups”
},
“text”: “=:information_source: Starting Workflow Backup [{{ $execution.id }}]”,
“otherOptions”: {
“includeLinkToWorkflow”: false
}
},
“id”: “0c00a374-566a-49c7-80de-66a991c4bf69”,
“name”: “Starting Message”,
“type”: “n8n-nodes-base.slack”,
“position”: [
1100,
420
],
“webhookId”: “c02eb407-5547-4aa0-9ebf-46dab67b63b6”,
“typeVersion”: 2.2,
“credentials”: {
“slackApi”: {
“id”: “l0nLVuU2VrUBtbxK”,
“name”: “Slack account”
}
}
},
{
“parameters”: {
“workflowId”: “={{ $workflow.id }}”,
“mode”: “each”,
“options”: {}
},
“id”: “eb7d15be-7f5d-4e39-837b-06d740685af3”,
“name”: “Execute Workflow”,
“type”: “n8n-nodes-base.executeWorkflow”,
“position”: [
1680,
440
],
“typeVersion”: 1,
“onError”: “continueErrorOutput”
},
{
“parameters”: {
“select”: “channel”,
“channelId”: {
“__rl”: true,
“mode”: “name”,
“value”: “#notifications
},
“text”: “=✅ Backup has completed - {{ $(‘n8n’).all().length }} workflows have been processed.”,
“otherOptions”: {}
},
“id”: “c831a0eb-95e1-46b3-bbf8-5d5bd928ca0a”,
“name”: “Completed Notification”,
“type”: “n8n-nodes-base.slack”,
“position”: [
1680,
260
],
“webhookId”: “a0c6e8c8-5d71-40fa-b02b-63a7ed5726c4”,
“executeOnce”: true,
“typeVersion”: 2.2,
“credentials”: {
“slackApi”: {
“id”: “l0nLVuU2VrUBtbxK”,
“name”: “Slack account”
}
}
},
{
“parameters”: {
“select”: “channel”,
“channelId”: {
“__rl”: true,
“mode”: “name”,
“value”: “#notifications
},
“text”: “=:x: Failed to backup {{ $(‘Loop Over Items’).item.json.id }}”,
“otherOptions”: {
“includeLinkToWorkflow”: false
}
},
“id”: “00864cb8-c8e4-4324-be1b-7d093e1bc3bf”,
“name”: “Failed Flows”,
“type”: “n8n-nodes-base.slack”,
“position”: [
1880,
460
],
“webhookId”: “2a092edb-de12-490f-931b-34d70e7d7696”,
“typeVersion”: 2.2,
“credentials”: {
“slackApi”: {
“id”: “l0nLVuU2VrUBtbxK”,
“name”: “Slack account”
}
}
},
{
“parameters”: {
“resource”: “file”,
“operation”: “get”,
“owner”: {
“__rl”: true,
“mode”: “”,
“value”: “={{ $(‘Config’).first().item.repo_owner }}”
},
“repository”: {
“__rl”: true,
“mode”: “”,
“value”: “={{ $(‘Config’).first().item.repo_name }}”
},
“filePath”: “={{ $(‘Config’).first().item.repo_path }}{{ $(‘Execute Workflow Trigger’).first().json.createdAt.split(‘-’)[0] }}/{{ $(‘Execute Workflow Trigger’).first().json.createdAt.split(‘-’)[1] }}/{{$json.id}}.json”,
“asBinaryProperty”: false,
“additionalParameters”: {}
},
“id”: “e4d70af5-5c21-4340-8054-7ba0203f3ee1”,
“name”: “Get file data”,
“type”: “n8n-nodes-base.github”,
“position”: [
620,
800
],
“typeVersion”: 1,
“alwaysOutputData”: true,
“credentials”: {
“githubApi”: {
“id”: “NYCmP55BOYeWZooP”,
“name”: “GitHub account”
}
},
“continueOnFail”: true
},
{
“parameters”: {
“assignments”: {
“assignments”: [
{
“id”: “8f6d1741-772f-462a-811f-4c334185e4f0”,
“name”: “repo_owner”,
“type”: “string”,
“value”: “={{ $env.repo_owner }}”
},
{
“id”: “8cac215c-4fd7-422f-9fd2-6b2d1e5e0383”,
“name”: “=repo_name”,
“type”: “string”,
“value”: “={{ $env.repo_name }}”
},
{
“id”: “eee305e9-4164-462a-86bd-80f0d58a31ae”,
“name”: “repo_path”,
“type”: “string”,
“value”: “={{ $env.repo_path }}”
}
]
},
“includeOtherFields”: true,
“options”: {}
},
“id”: “42ad4762-26fb-4686-9016-729e95c95324”,
“name”: “Config”,
“type”: “n8n-nodes-base.set”,
“position”: [
620,
1080
],
“typeVersion”: 3.4
}
],
“pinData”: {},
“connections”: {
“n8n”: {
“main”: [
[
{
“node”: “Loop Over Items”,
“type”: “main”,
“index”: 0
}
]
]
},
“Config”: {
“main”: [
[
{
“node”: “Get file data”,
“type”: “main”,
“index”: 0
},
{
“node”: “Merge Items”,
“type”: “main”,
“index”: 1
}
]
]
},
“Get File”: {
“main”: [
[
{
“node”: “Merge Items”,
“type”: “main”,
“index”: 0
}
]
]
},
“File is new”: {
“main”: [
[
{
“node”: “Create new file”,
“type”: “main”,
“index”: 0
}
]
]
},
“Merge Items”: {
“main”: [
[
{
“node”: “isDiffOrNew”,
“type”: “main”,
“index”: 0
}
]
]
},
“isDiffOrNew”: {
“main”: [
[
{
“node”: “Create sub path”,
“type”: “main”,
“index”: 0
}
]
]
},
“Check Status”: {
“main”: [
[
{
“node”: “Same file - Do nothing”,
“type”: “main”,
“index”: 0
}
],
[
{
“node”: “File is different”,
“type”: “main”,
“index”: 0
}
],
[
{
“node”: “File is new”,
“type”: “main”,
“index”: 0
}
]
]
},
“Failed Flows”: {
“main”: [
[
{
“node”: “Loop Over Items”,
“type”: “main”,
“index”: 0
}
]
]
},
“Get file data”: {
“main”: [
[
{
“node”: “If file too large”,
“type”: “main”,
“index”: 0
}
]
]
},
“Create new file”: {
“main”: [
[
{
“node”: “Return”,
“type”: “main”,
“index”: 0
}
]
]
},
“Create sub path”: {
“main”: [
[
{
“node”: “Check Status”,
“type”: “main”,
“index”: 0
}
]
]
},
“Loop Over Items”: {
“main”: [
[
{
“node”: “Completed Notification”,
“type”: “main”,
“index”: 0
}
],
[
{
“node”: “Execute Workflow”,
“type”: “main”,
“index”: 0
}
]
]
},
“Execute Workflow”: {
“main”: [
[
{
“node”: “Loop Over Items”,
“type”: “main”,
“index”: 0
}
],
[
{
“node”: “Failed Flows”,
“type”: “main”,
“index”: 0
}
]
]
},
“Schedule Trigger”: {
“main”: [
[
{
“node”: “Starting Message”,
“type”: “main”,
“index”: 0
}
]
]
},
“Starting Message”: {
“main”: [
[
{
“node”: “n8n”,
“type”: “main”,
“index”: 0
}
]
]
},
“File is different”: {
“main”: [
[
{
“node”: “Edit existing file”,
“type”: “main”,
“index”: 0
}
]
]
},
“If file too large”: {
“main”: [
[
{
“node”: “Get File”,
“type”: “main”,
“index”: 0
}
],
[
{
“node”: “Merge Items”,
“type”: “main”,
“index”: 0
}
]
]
},
“Edit existing file”: {
“main”: [
[
{
“node”: “Return”,
“type”: “main”,
“index”: 0
}
]
]
},
“On clicking ‘execute’”: {
“main”: [
[
{
“node”: “Starting Message”,
“type”: “main”,
“index”: 0
}
]
]
},
“Same file - Do nothing”: {
“main”: [
[
{
“node”: “Return”,
“type”: “main”,
“index”: 0
}
]
]
},
“Execute Workflow Trigger”: {
“main”: [
[
{
“node”: “Config”,
“type”: “main”,
“index”: 0
}
]
]
}
},
“active”: false,
“settings”: {
“executionOrder”: “v1”
},
“versionId”: “d90d1014-c5ab-4f56-b042-4b6626094cce”,
“meta”: {
“templateId”: “1534”,
“templateCredsSetupCompleted”: true,
“instanceId”: “6133dc0aeb42b1a820b4fe5506562a5d8f57b362268ee2db19989cac2b6d4079”
},
“id”: “0whrsIuwJPMuvAWS”,
“tags”: [
{
“createdAt”: “2025-01-29T20:00:16.601Z”,
“updatedAt”: “2025-01-29T20:00:16.601Z”,
“id”: “39pITprfX87g49oe”,
“name”: “Backups”
},
{
“createdAt”: “2025-01-29T20:00:23.839Z”,
“updatedAt”: “2025-01-29T20:00:23.839Z”,
“id”: “vBolf9BV29vPEq2g”,
“name”: “GitHub”
},
{
“createdAt”: “2025-01-29T21:43:47.621Z”,
“updatedAt”: “2025-01-29T21:43:47.621Z”,
“id”: “sO0pHICOfLUDsxSH”,
“name”: “DevOps”
},
{
“createdAt”: “2025-01-31T08:28:20.131Z”,
“updatedAt”: “2025-01-31T08:28:20.131Z”,
“id”: “aeorJlhTcQBzt0Tq”,
“name”: “DC_DEV”
}
]
}/>

In doing so, I have hit an early snag in that I cannot resolve where the Header credential failing to connect and authorize in the n8n getAll:workflow action. I have tried everything and all combinations of API Key values I can think of with both my Settings > n8n API > My API Key, as well as an alternative Primary Variable > N8N_ENCRIPTION_KEY value in Railway. Interestly, both key values show green as successfully connected on the self-test in my Credentials, so I’m obviously missing something here.

This is the error I am receiving, which I believe is similar when tying both the n8n API and Railway Primary Key values:

{
“errorMessage”: “The resource you are requesting could not be found”,
“errorDescription”: “Request failed with status code 404”,
“errorDetails”: {
“rawErrorMessage”: [
“Request failed with status code 404”
],
“httpCode”: “404”
},
“n8nDetails”: {
“nodeName”: “n8n”,
“nodeType”: “n8n-nodes-base.n8n”,
“nodeVersion”: 1,
“resource”: “workflow”,
“operation”: “getAll”,
“itemIndex”: 0,
“runIndex”: 0,
“time”: “2/3/2025, 2:53:23 PM”,
“n8nVersion”: “1.76.1 (Self Hosted)”,
“binaryDataMode”: “default”,
“stackTrace”: [
“NodeApiError: The resource you are requesting could not be found”,
" at ExecuteSingleContext.httpRequestWithAuthentication (/usr/local/lib/node_modules/n8n/node_modules/n8n-core/dist/node-execute-functions.js:1199:15)“,
" at processTicksAndRejections (node:internal/process/task_queues:95:5)”,
" at ExecuteSingleContext.httpRequestWithAuthentication (/usr/local/lib/node_modules/n8n/node_modules/n8n-core/dist/node-execute-functions.js:1476:20)“,
" at RoutingNode.rawRoutingRequest (/usr/local/lib/node_modules/n8n/node_modules/n8n-core/dist/execution-engine/routing-node.js:319:29)”,
" at ExecuteSingleContext.makeRoutingRequest (/usr/local/lib/node_modules/n8n/node_modules/n8n-core/dist/execution-engine/routing-node.js:332:20)“,
" at ExecuteSingleContext.cursorPagination (/usr/local/lib/node_modules/n8n/node_modules/n8n-nodes-base/dist/nodes/N8n/GenericFunctions.js:59:28)”,
" at RoutingNode.makeRoutingRequest (/usr/local/lib/node_modules/n8n/node_modules/n8n-core/dist/execution-engine/routing-node.js:339:32)“,
" at async Promise.allSettled (index 0)”,
" at RoutingNode.runNode (/usr/local/lib/node_modules/n8n/node_modules/n8n-core/dist/execution-engine/routing-node.js:140:35)“,
" at WorkflowExecute.runNode (/usr/local/lib/node_modules/n8n/node_modules/n8n-core/dist/execution-engine/workflow-execute.js:683:23)”
]
}
}

The base URL in Railway is: https://primary-production-b0359.up.railway.app, and I beleive the correct endpoint should be https://primary-production-b0359.up.railway.app/rest/workflows through the n8n API.

Apologies for this very long thread, and hope someone is able to assist with guidence even if it’s to dirct me to Railway support should that be the proper action.

Thanks - DC

It looks like your topic is missing some important information. Could you provide the following if applicable.

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

Thanks Mod, note the majority of this requested info was in my first two sentances,“… running a self-hosted instance of n8n Community Edition v1.76.1 in Queue Mode w/ Webhook processors on Railway AI. Database is Postgres. Deployment was a Template from an n8n Comunity Creator.” This template instance uses Docker, in addition to Redis for the Queue Mode w/ Webhook processor.
Fortunantly, I was able to successfully resolve the main portion of this issue last night.

To summarize, the Backup blueprint workflow I installed was created on a local PC instance of n8n and used an HTTP node with local path. In researching, the proper path for the n8n API on Railway showed to be https://primary-production-b0359.up.railway.app/rest/workflows. This was when the 404 issues started. I tried it with and without the Authorization: Bearer as well as X-N8N-API-KEY and (e.g., no Bearer) Header formats without success. Of note both Header methods tested successful for connction in the Create a Credential self-test. I subsequently tried various cURL calls without success.

I next replaced the HTTP node with the n8n Get Many Workflows action node, which to my surprise similarly failed. So this was a head scratcher for me as multiple online sources confirmed I was using the correct API path.

After generating a new n8n API Key for the third time out of desparation, I was able to locate this snippet Authentication | n8n Docs which indicates the path to be “/api/v1/workflows” vs. “/rest/workflows”. When changing the full path to https://primary-production-b0359.up.railway.app/api/v1/workflows in combination with my X-N8N-API-KEY and (e.g., no Bearer) credentials, the cURL call was successful and returned all of my workflows.

I susequently reverted back to an HTTP node in the Backup workflow to designate the URL path with /api/v1/workflows which was successful, and I was able to backup all of my workflows to GitHub.

Obviously the path that is baked into the n8n Getmany Workflows action is not /api/v1/workflows, so that remains a mystery but for another day, as the workflow’s working 100% now. Thanks - DC

1 Like

This topic was automatically closed 7 days after the last reply. New replies are no longer allowed.