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": "40_450_CONTENT_MASTER_FLOW_v2",
"nodes": [
{
"parameters": {
"httpMethod": "POST",
"path": "content-master",
"responseMode": "lastNode",
"options": {}
},
"id": "webhook-trigger",
"name": "Webhook Trigger",
"type": "n8n-nodes-base.webhook",
"typeVersion": 2,
"position": [
240,
300
]
},
{
"parameters": {
"jsCode": "const body = $input.first().json.body ?? $input.first().json;\nconst pipelineJobId = body.pipeline_job_id ?? '';\nconst topic = body.topic ?? '';\nconst category = body.category ?? 'Allgemein';\nconst platforms = body.target_platforms ?? 'blog';\n\nif (!topic) throw new Error('topic fehlt');\n\nreturn [{ json: { pipeline_job_id: pipelineJobId, topic, category, target_platforms: platforms } }];"
},
"id": "parse-input",
"name": "Input parsen",
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
460,
380
]
},
{
"parameters": {
"method": "PATCH",
"url": "https://directus.automation-plus-ki.de/items/400_content_pipeline",
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "Authorization",
"value": "Bearer ={{ $env.DIRECTUS_TOKEN }}"
}
]
},
"sendBody": true,
"contentType": "json",
"specifyBody": "keypair",
"bodyParameters": {
"parameters": [
{
"name": "Id",
"value": "={{ $json.pipeline_job_id }}"
},
{
"name": "stage",
"value": "text"
},
{
"name": "status",
"value": "running"
}
]
}
},
"id": "update-running",
"name": "Pipeline auf Running setzen",
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.2,
"position": [
680,
380
]
},
{
"parameters": {
"method": "POST",
"url": "http://s0k444ck0w4cgc400skwkos0.<HETZNER_HOST>.sslip.io/crews/content_generation_crew/run",
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "Content-Type",
"value": "application/json"
}
]
},
"sendBody": true,
"contentType": "json",
"specifyBody": "json",
"jsonBody": "{ \"inputs\": { \"topic\": \"{{ $('Input parsen').item.json.topic }}\", \"category\": \"{{ $('Input parsen').item.json.category }}\", \"target_platforms\": \"{{ $('Input parsen').item.json.target_platforms }}\", \"pipeline_job_id\": \"{{ $('Input parsen').item.json.pipeline_job_id }}\" } }",
"options": {
"timeout": 180000
}
},
"id": "call-crew-api",
"name": "Crew API: Text generieren",
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.2,
"position": [
900,
380
]
},
{
"parameters": {
"jsCode": "// Crew-API Ergebnis parsen \u2014 Writer-Agent soll JSON liefern\nconst res = $input.first().json;\nconst rawResult = res.result ?? '';\n\nlet title = '';\nlet excerpt = '';\nlet seoKeywords = '';\nlet contentText = rawResult;\n\n// Versuche JSON zu parsen (Writer-Agent liefert idealerweise valides JSON)\ntry {\n const match = rawResult.match(/\\{[\\s\\S]*\\}/);\n if (match) {\n const parsed = JSON.parse(match[0]);\n title = parsed.title ?? '';\n excerpt = parsed.excerpt ?? '';\n seoKeywords = parsed.seo_keywords ?? '';\n contentText = parsed.content ?? rawResult;\n }\n} catch (_) {\n // Fallback: rohen Text als Content verwenden\n}\n\n// Titel aus erstem H1 extrahieren falls leer\nif (!title) {\n const h1Match = contentText.match(/^#\\s+(.+)$/m);\n title = h1Match ? h1Match[1].trim() : 'Generierter Artikel';\n}\n\nreturn [{ json: {\n execution_id: res.execution_id,\n pipeline_job_id: $('Input parsen').item.json.pipeline_job_id,\n topic: $('Input parsen').item.json.topic,\n category: $('Input parsen').item.json.category,\n target_platforms: $('Input parsen').item.json.target_platforms,\n title,\n excerpt,\n seo_keywords: seoKeywords,\n content_text: contentText,\n} }];"
},
"id": "parse-result",
"name": "Ergebnis parsen",
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
1120,
380
]
},
{
"parameters": {
"method": "PATCH",
"url": "https://directus.automation-plus-ki.de/items/400_content_pipeline",
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "Authorization",
"value": "Bearer ={{ $env.DIRECTUS_TOKEN }}"
}
]
},
"sendBody": true,
"contentType": "json",
"specifyBody": "keypair",
"bodyParameters": {
"parameters": [
{
"name": "Id",
"value": "={{ $(\"Input parsen\").item.json.pipeline_job_id }}"
},
{
"name": "stage",
"value": "image"
},
{
"name": "title",
"value": "={{ $json.title }}"
},
{
"name": "excerpt",
"value": "={{ $json.excerpt }}"
},
{
"name": "seo_keywords",
"value": "={{ $json.seo_keywords }}"
}
]
}
},
"id": "update-text-done",
"name": "Pipeline: Text fertig",
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.2,
"position": [
1340,
380
]
},
{
"parameters": {
"method": "POST",
"url": "https://n8n.automation-plus-ki.de/webhook/pixart-image",
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "Content-Type",
"value": "application/json"
}
]
},
"sendBody": true,
"contentType": "json",
"specifyBody": "json",
"jsonBody": "{ \"pipeline_job_id\": \"{{ $json.pipeline_job_id }}\", \"topic\": \"{{ $json.topic }}\", \"category\": \"{{ $json.category }}\" }",
"options": {
"timeout": 5000
}
},
"id": "trigger-image",
"name": "Bild generieren (async)",
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.2,
"position": [
1560,
260
],
"onError": "continueRegularOutput"
},
{
"parameters": {
"method": "POST",
"url": "https://n8n.automation-plus-ki.de/webhook/fish-audio",
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "Content-Type",
"value": "application/json"
}
]
},
"sendBody": true,
"contentType": "json",
"specifyBody": "json",
"jsonBody": "{ \"pipeline_job_id\": \"{{ $json.pipeline_job_id }}\", \"text_content\": \"{{ $json.excerpt || $json.content_text.substring(0, 800) }}\" }",
"options": {
"timeout": 5000
}
},
"id": "trigger-audio",
"name": "Audio generieren (async)",
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.2,
"position": [
1560,
500
],
"onError": "continueRegularOutput"
}
],
"connections": {
"Webhook Trigger": {
"main": [
[
{
"node": "Input parsen",
"type": "main",
"index": 0
}
]
]
},
"Input parsen": {
"main": [
[
{
"node": "Pipeline auf Running setzen",
"type": "main",
"index": 0
}
]
]
},
"Pipeline auf Running setzen": {
"main": [
[
{
"node": "Crew API: Text generieren",
"type": "main",
"index": 0
}
]
]
},
"Crew API: Text generieren": {
"main": [
[
{
"node": "Ergebnis parsen",
"type": "main",
"index": 0
}
]
]
},
"Ergebnis parsen": {
"main": [
[
{
"node": "Pipeline: Text fertig",
"type": "main",
"index": 0
}
]
]
},
"Pipeline: Text fertig": {
"main": [
[
{
"node": "Bild generieren (async)",
"type": "main",
"index": 0
},
{
"node": "Audio generieren (async)",
"type": "main",
"index": 0
}
]
]
}
},
"active": true,
"settings": {
"executionOrder": "v1",
"callerPolicy": "workflowsFromSameOwner",
"availableInMCP": false
},
"tags": [
"content-pipeline"
]
}
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
40_450_CONTENT_MASTER_FLOW_v2. Uses httpRequest. Webhook trigger; 8 nodes.
Source: https://github.com/timo-goetz-ai/apki-core-platform/blob/5cd9c9d9ed0ed464da995af94683e9301965a3bc/automations/n8n-workflows/content-pipeline/40_450_CONTENT_MASTER_FLOW_v2.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.
This n8n template provides enterprise-level version control for your workflows using GitHub integration. Stop losing hours to broken workflows and manual exports – get proper commit history, visual di
This flow creates dummy files for every item added in your *Arrs (Radarr/Sonarr) with the tag .
eek-Go v2 (Batch-Then-Review). Uses httpRequest. Webhook trigger; 75 nodes.
This workflow receives webhook requests from a content calendar and uses the X API v2 to publish text posts, threads, image/video posts, and polls, as well as delete existing posts and run a credentia
This workflow acts as a central API gateway for all technical indicator agents in the Binance Spot Market Quant AI system. It listens for incoming webhook requests and dynamically routes them to the c