The workflow JSON
Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →
{
"name": "Offline Intake Review - sichere API-Freigabe",
"nodes": [
{
"parameters": {},
"type": "n8n-nodes-base.manualTrigger",
"typeVersion": 1,
"position": [
-760,
0
],
"id": "0b1b8c2e-0d3f-4f5b-8f09-694f0a6a1001",
"name": "When clicking 'Test workflow'"
},
{
"parameters": {
"jsCode": "const requests = [\n {\n requestId: 'REQ-2026-001',\n requesterEmail: 'teamlead@example.invalid',\n targetSystem: 'internal-ticketing',\n action: 'prepare-ticket-update',\n dataSensitivity: 'internal',\n approvedForAutomation: false,\n summary: 'Routingregel f\u00fcr Kategorie Hardware pr\u00fcfen',\n payload: {\n ticketId: 'TCK-1001',\n category: 'Hardware',\n priority: 'medium'\n }\n }\n];\n\nreturn requests.map((request) => ({ json: request }));"
},
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
-520,
0
],
"id": "0b1b8c2e-0d3f-4f5b-8f09-694f0a6a1002",
"name": "Beispieldaten laden"
},
{
"parameters": {
"jsCode": "const requiredFields = [\n 'requestId',\n 'requesterEmail',\n 'targetSystem',\n 'action',\n 'dataSensitivity',\n 'payload'\n];\nconst sensitiveClasses = new Set(['personal', 'confidential', 'secret']);\n\nreturn $input.all().map((item) => {\n const source = item.json;\n const missing = requiredFields.filter((field) => source[field] === undefined || source[field] === null || source[field] === '');\n const action = String(source.action || '').toLowerCase();\n const dataSensitivity = String(source.dataSensitivity || '').toLowerCase();\n const riskyAction = /delete|close|send|create-user|payment|admin/.test(action);\n const needsHumanReview = riskyAction || source.approvedForAutomation !== true || sensitiveClasses.has(dataSensitivity);\n\n return {\n json: {\n ...source,\n validation: {\n valid: missing.length === 0,\n missing,\n riskyAction,\n needsHumanReview\n }\n }\n };\n});"
},
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
-260,
0
],
"id": "0b1b8c2e-0d3f-4f5b-8f09-694f0a6a1003",
"name": "Eingabe validieren"
},
{
"parameters": {
"jsCode": "return $input.all().map((item) => {\n const data = item.json;\n let status = 'ready_for_dry_run';\n let nextStep = 'Interne API in Testumgebung mit Credential-Platzhalter zuordnen.';\n\n if (!data.validation.valid) {\n status = 'blocked_missing_fields';\n nextStep = `Fehlende Pflichtfelder erg\u00e4nzen: ${data.validation.missing.join(', ')}`;\n } else if (data.validation.needsHumanReview) {\n status = 'needs_human_review';\n nextStep = 'Menschliche Freigabe einholen; Workflow f\u00fchrt noch keine produktive Aktion aus.';\n }\n\n return {\n json: {\n requestId: data.requestId,\n status,\n nextStep,\n safePayload: {\n targetSystem: data.targetSystem,\n action: data.action,\n summary: data.summary,\n ticketId: data.payload.ticketId || null,\n category: data.payload.category || null,\n priority: data.payload.priority || null\n },\n validation: data.validation\n }\n };\n});"
},
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
0,
0
],
"id": "0b1b8c2e-0d3f-4f5b-8f09-694f0a6a1004",
"name": "Freigabeentscheidung vorbereiten"
},
{
"parameters": {
"jsCode": "return $input.all().map((item) => ({\n json: {\n auditId: `audit-${item.json.requestId}`,\n generatedAt: new Date().toISOString(),\n workflowMode: 'dry-run',\n status: item.json.status,\n nextStep: item.json.nextStep,\n safePayload: item.json.safePayload,\n safety: {\n noSecretsInWorkflow: true,\n productiveActionExecuted: false,\n humanReviewRequired: item.json.validation.needsHumanReview\n }\n }\n}));"
},
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
260,
0
],
"id": "0b1b8c2e-0d3f-4f5b-8f09-694f0a6a1005",
"name": "Audit-Record erzeugen"
}
],
"connections": {
"When clicking 'Test workflow'": {
"main": [
[
{
"node": "Beispieldaten laden",
"type": "main",
"index": 0
}
]
]
},
"Beispieldaten laden": {
"main": [
[
{
"node": "Eingabe validieren",
"type": "main",
"index": 0
}
]
]
},
"Eingabe validieren": {
"main": [
[
{
"node": "Freigabeentscheidung vorbereiten",
"type": "main",
"index": 0
}
]
]
},
"Freigabeentscheidung vorbereiten": {
"main": [
[
{
"node": "Audit-Record erzeugen",
"type": "main",
"index": 0
}
]
]
}
},
"active": false,
"settings": {
"executionOrder": "v1"
},
"tags": []
}
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
Offline Intake Review - sichere API-Freigabe. Event-driven trigger; 5 nodes.
Source: https://github.com/adrianweidig/openwebui-workbench/blob/6c2f9c62041a9078a47d277ed5f6f13bdcc46986/Modelle/einzelmodelle/n8n-workflow-architect/beispielergebnis.json — original creator credit. Request a take-down →
Related workflows
Workflows that share integrations, category, or trigger type with this one. All free to copy and import.
Reagendamiento. Uses executeWorkflowTrigger, redis, n8n-nodes-evolution-api, dataTable. Event-driven trigger; 73 nodes.
Blotato. Uses googleSheets, @blotato/n8n-nodes-blotato. Event-driven trigger; 65 nodes.
This template is a hands-on, practical exam designed to help you master n8n Expressions—the key to accessing and manipulating data in your workflows.
This template is a hands-on, practical exam designed to test your understanding of the fundamental JSON data types. It's the perfect way to solidify your knowledge after learning the basics.
Agendamiento. Uses n8n-nodes-evolution-api, redis, dataTable, executeWorkflowTrigger. Event-driven trigger; 60 nodes.