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_41_PUBLISH_BLOG",
"nodes": [
{
"parameters": {
"httpMethod": "POST",
"path": "publish-blog",
"responseMode": "responseNode",
"options": {}
},
"id": "webhook-trigger",
"name": "Webhook Trigger",
"type": "n8n-nodes-base.webhook",
"typeVersion": 2,
"position": [
240,
300
]
},
{
"parameters": {
"jsCode": "// Input: { pipeline_job_id, title, content_html, category, image_url?, tags? }\nconst body = $input.first().json.body ?? $input.first().json;\n\nif (!body.pipeline_job_id) throw new Error('pipeline_job_id fehlt');\nif (!body.title) throw new Error('title fehlt');\nif (!body.content_html) throw new Error('content_html fehlt');\n\nconst tags = body.tags ?? [];\nconst slug = body.title\n .toLowerCase()\n .replace(/[\u00e4\u00f6\u00fc\u00df]/g, c => ({\u00e4:'ae',\u00f6:'oe',\u00fc:'ue',\u00df:'ss'}[c]))\n .replace(/[^a-z0-9]+/g, '-')\n .replace(/^-|-$/g, '')\n .slice(0, 80);\n\nreturn [{ json: {\n pipeline_job_id: body.pipeline_job_id,\n title: body.title,\n content_html: body.content_html,\n category: body.category ?? 'general',\n image_url: body.image_url ?? null,\n tags,\n slug\n} }];"
},
"id": "prepare-post",
"name": "Post vorbereiten",
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
460,
300
]
},
{
"parameters": {
"method": "POST",
"url": "={{ $env.POSTIZ_API_URL }}/api/v1/posts",
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth",
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "Authorization",
"value": "Bearer {{ $env.POSTIZ_API_TOKEN }}"
},
{
"name": "X-Integration-ID",
"value": "={{ $env.POSTIZ_ORG_ID }}"
}
]
},
"sendBody": true,
"contentType": "json",
"bodyParameters": {
"parameters": [
{
"name": "title",
"value": "={{ $json.title }}"
},
{
"name": "content",
"value": "={{ $json.content_html }}"
},
{
"name": "slug",
"value": "={{ $json.slug }}"
},
{
"name": "category",
"value": "={{ $json.category }}"
},
{
"name": "featured_image",
"value": "={{ $json.image_url }}"
},
{
"name": "tags",
"value": "={{ $json.tags }}"
},
{
"name": "status",
"value": "published"
}
]
},
"options": {
"timeout": 20000
}
},
"id": "blogify-publish",
"name": "Blogify ver\u00f6ffentlichen",
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.2,
"position": [
680,
300
]
},
{
"parameters": {
"jsCode": "const blog = $input.first().json;\nconst body = $('Post vorbereiten').first().json;\nreturn [{ json: {\n Id: null,\n pipeline_job_id: body.pipeline_job_id,\n platform: 'blogify',\n post_url: blog.url ?? blog.link ?? null,\n postiz_post_id: null,\n status: 'published',\n published_at: new Date().toISOString()\n} }];"
},
"id": "prepare-log",
"name": "Log vorbereiten",
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
900,
300
]
},
{
"parameters": {
"method": "POST",
"url": "={{ $env.NOCODB_URL }}/api/v2/tables/{{ $env.NOCODB_PUBLISH_LOG_TABLE_ID }}/records",
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "Authorization",
"value": "Bearer ={{ $env.DIRECTUS_TOKEN }}"
}
]
},
"sendBody": true,
"contentType": "json",
"bodyParameters": {
"parameters": [
{
"name": "pipeline_job_id",
"value": "={{ $json.pipeline_job_id }}"
},
{
"name": "platform",
"value": "={{ $json.platform }}"
},
{
"name": "post_url",
"value": "={{ $json.post_url }}"
},
{
"name": "status",
"value": "={{ $json.status }}"
},
{
"name": "published_at",
"value": "={{ $json.published_at }}"
}
]
}
},
"id": "nocodb-publish-log",
"name": "NocoDB publish_log",
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.2,
"position": [
1120,
300
]
},
{
"parameters": {
"method": "PATCH",
"url": "={{ $env.NOCODB_URL }}/api/v2/tables/{{ $env.NOCODB_CONTENT_PIPELINE_TABLE_ID }}/records",
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "Authorization",
"value": "Bearer ={{ $env.DIRECTUS_TOKEN }}"
}
]
},
"sendBody": true,
"contentType": "json",
"bodyParameters": {
"parameters": [
{
"name": "Id",
"value": "={{ $('Post vorbereiten').first().json.pipeline_job_id }}"
},
{
"name": "stage",
"value": "done"
},
{
"name": "status",
"value": "done"
},
{
"name": "blog_url",
"value": "={{ $('Log vorbereiten').first().json.post_url }}"
},
{
"name": "updated_at",
"value": "={{ new Date().toISOString() }}"
}
]
}
},
"id": "nocodb-pipeline-update",
"name": "NocoDB Pipeline Update",
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.2,
"position": [
1340,
300
]
},
{
"parameters": {
"respondWith": "json",
"responseBody": "={ \"ok\": true, \"blog_url\": \"{{ $('Log vorbereiten').first().json.post_url }}\" }"
},
"id": "respond",
"name": "Respond",
"type": "n8n-nodes-base.respondToWebhook",
"typeVersion": 1,
"position": [
1560,
300
]
}
],
"connections": {
"Webhook Trigger": {
"main": [
[
{
"node": "Post vorbereiten",
"type": "main",
"index": 0
}
]
]
},
"Post vorbereiten": {
"main": [
[
{
"node": "Blogify ver\u00f6ffentlichen",
"type": "main",
"index": 0
}
]
]
},
"Blogify ver\u00f6ffentlichen": {
"main": [
[
{
"node": "Log vorbereiten",
"type": "main",
"index": 0
}
]
]
},
"Log vorbereiten": {
"main": [
[
{
"node": "NocoDB publish_log",
"type": "main",
"index": 0
}
]
]
},
"NocoDB publish_log": {
"main": [
[
{
"node": "NocoDB Pipeline Update",
"type": "main",
"index": 0
}
]
]
},
"NocoDB Pipeline Update": {
"main": [
[
{
"node": "Respond",
"type": "main",
"index": 0
}
]
]
}
},
"settings": {
"executionOrder": "v1"
},
"tags": [
{
"name": "publishing"
},
{
"name": "30_content"
}
]
}
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
40_41_PUBLISH_BLOG. Uses httpRequest. Webhook trigger; 7 nodes.
Source: https://github.com/timo-goetz-ai/apki-core-platform/blob/main/automations/n8n-workflows/content-pipeline/40_41_PUBLISH_BLOG.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