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": "WF3 - Post Video Manual (Enhanced)",
"nodes": [
{
"parameters": {
"httpMethod": "POST",
"path": "post-video",
"responseMode": "responseNode",
"options": {}
},
"id": "webhook-trigger",
"name": "Webhook Trigger",
"type": "n8n-nodes-base.webhook",
"typeVersion": 2,
"position": [
0,
0
]
},
{
"parameters": {
"assignments": {
"assignments": [
{
"id": "id-1",
"name": "supabaseUrl",
"value": "={{$env.SUPABASE_URL}}",
"type": "string"
},
{
"id": "id-2",
"name": "supabaseServiceKey",
"value": "={{$env.SUPABASE_SERVICE_ROLE_KEY}}",
"type": "string"
},
{
"id": "id-3",
"name": "blotatoApiKey",
"value": "={{$env.BLOTATO_API_KEY}}",
"type": "string"
},
{
"id": "id-4",
"name": "scriptId",
"value": "={{ $json.body.script_id }}",
"type": "string"
},
{
"id": "id-5",
"name": "requestedByUserId",
"value": "={{ $json.body.requested_by_user_id }}",
"type": "string"
},
{
"id": "id-6",
"name": "platforms",
"value": "={{ $json.body.platforms || ['tiktok', 'instagram', 'youtube'] }}",
"type": "object"
}
]
},
"includeOtherFields": true,
"options": {}
},
"id": "workflow-config",
"name": "Workflow Configuration",
"type": "n8n-nodes-base.set",
"typeVersion": 3.4,
"position": [
220,
0
]
},
{
"parameters": {
"url": "={{ $json.supabaseUrl }}/rest/v1/scripts?id=eq.{{ $json.scriptId }}&select=*",
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "apikey",
"value": "={{ $json.supabaseServiceKey }}"
},
{
"name": "Authorization",
"value": "=Bearer {{ $json.supabaseServiceKey }}"
}
]
},
"options": {}
},
"id": "fetch-script",
"name": "Fetch Script Data",
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.3,
"position": [
440,
0
]
},
{
"parameters": {
"conditions": {
"options": {
"caseSensitive": true,
"leftValue": "",
"typeValidation": "strict"
},
"conditions": [
{
"id": "condition-1",
"leftValue": "={{ $json[0].status }}",
"rightValue": "Video Ready (Preview)",
"operator": {
"type": "string",
"operation": "equals"
}
},
{
"id": "condition-2",
"leftValue": "={{ $json[0].processed }}",
"rightValue": false,
"operator": {
"type": "boolean",
"operation": "equals"
}
}
],
"combinator": "and"
},
"options": {}
},
"id": "if-valid-status",
"name": "IF Valid Status",
"type": "n8n-nodes-base.if",
"typeVersion": 2,
"position": [
660,
0
]
},
{
"parameters": {
"url": "={{ $('Fetch Script Data').first().json[0].video_url }}",
"options": {
"response": {
"response": {
"responseFormat": "file",
"outputPropertyName": "video"
}
}
}
},
"id": "download-video",
"name": "Download Video Binary",
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.3,
"position": [
880,
-100
]
},
{
"parameters": {
"assignments": {
"assignments": [
{
"id": "id-script",
"name": "scriptData",
"value": "={{ $('Fetch Script Data').first().json[0] }}",
"type": "object"
},
{
"id": "id-platforms",
"name": "targetPlatforms",
"value": "={{ $('Workflow Configuration').first().json.platforms }}",
"type": "object"
}
]
},
"includeOtherFields": true,
"options": {}
},
"id": "prepare-posting",
"name": "Prepare Posting Data",
"type": "n8n-nodes-base.set",
"typeVersion": 3.4,
"position": [
1100,
-100
]
},
{
"parameters": {
"jsCode": "// Get script data and platforms\nconst scriptData = $('Prepare Posting Data').first().json.scriptData;\nconst platforms = $('Prepare Posting Data').first().json.targetPlatforms;\nconst platformCaptions = scriptData.platform_captions || {};\nconst defaultCaption = scriptData.caption + ' ' + (scriptData.hashtags || []).map(h => '#' + h).join(' ');\n\n// Create items for each platform\nconst items = platforms.map(platform => ({\n json: {\n platform: platform,\n caption: platformCaptions[platform] || defaultCaption,\n scriptId: scriptData.id\n }\n}));\n\nreturn items;"
},
"id": "split-platforms",
"name": "Split by Platform",
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
1320,
-100
]
},
{
"parameters": {
"method": "POST",
"url": "https://api.blotato.com/v1/posts",
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "Authorization",
"value": "=Bearer {{ $('Workflow Configuration').first().json.blotatoApiKey }}"
}
]
},
"sendBody": true,
"contentType": "multipart-form-data",
"bodyParameters": {
"parameters": [
{
"parameterType": "formBinaryData",
"name": "video",
"inputDataFieldName": "={{ $('Download Video Binary').first().binary.video }}"
},
{
"name": "caption",
"value": "={{ $json.caption }}"
},
{
"name": "platform",
"value": "={{ $json.platform }}"
}
]
},
"options": {}
},
"id": "post-to-blotato",
"name": "Post to Blotato",
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.3,
"position": [
1540,
-100
]
},
{
"parameters": {
"jsCode": "// Aggregate all posting results\nconst results = $input.all();\nconst postIds = {};\nconst platforms = [];\nlet allSucceeded = true;\n\nresults.forEach(item => {\n const platform = item.json.platform || 'unknown';\n platforms.push(platform);\n if (item.json.post_id) {\n postIds[platform] = item.json.post_id;\n } else {\n allSucceeded = false;\n }\n});\n\nreturn [{\n json: {\n postIds,\n platforms,\n allSucceeded,\n resultCount: results.length\n }\n}];"
},
"id": "aggregate-results",
"name": "Aggregate Results",
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
1760,
-100
]
},
{
"parameters": {
"method": "PATCH",
"url": "={{ $('Workflow Configuration').first().json.supabaseUrl }}/rest/v1/scripts?id=eq.{{ $('Workflow Configuration').first().json.scriptId }}",
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "apikey",
"value": "={{ $('Workflow Configuration').first().json.supabaseServiceKey }}"
},
{
"name": "Authorization",
"value": "=Bearer {{ $('Workflow Configuration').first().json.supabaseServiceKey }}"
},
{
"name": "Content-Type",
"value": "application/json"
},
{
"name": "Prefer",
"value": "return=representation"
}
]
},
"sendBody": true,
"specifyBody": "json",
"jsonBody": "={\n \"status\": \"Posted\",\n \"processed\": true,\n \"posted_at\": \"{{ $now.toISO() }}\",\n \"platforms\": {{ JSON.stringify($json.platforms) }},\n \"post_ids\": {{ JSON.stringify($json.postIds) }}\n}",
"options": {}
},
"id": "update-supabase-success",
"name": "Update Supabase Success",
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.3,
"position": [
1980,
-100
]
},
{
"parameters": {
"respondWith": "json",
"responseBody": "={{ { success: true, script_id: $('Workflow Configuration').first().json.scriptId, status: 'Posted', platforms: $('Aggregate Results').first().json.platforms, post_ids: $('Aggregate Results').first().json.postIds } }}",
"options": {}
},
"id": "respond-success",
"name": "Respond Success",
"type": "n8n-nodes-base.respondToWebhook",
"typeVersion": 1.1,
"position": [
2200,
-100
]
},
{
"parameters": {
"respondWith": "json",
"responseBody": "={{ { success: false, script_id: $('Workflow Configuration').first().json.scriptId, error: 'Invalid status or already processed. Status must be \"Video Ready (Preview)\" and processed must be false.' } }}",
"options": {
"responseCode": 400
}
},
"id": "respond-invalid-status",
"name": "Respond Invalid Status",
"type": "n8n-nodes-base.respondToWebhook",
"typeVersion": 1.1,
"position": [
880,
100
]
},
{
"parameters": {
"method": "PATCH",
"url": "={{ $('Workflow Configuration').first().json.supabaseUrl }}/rest/v1/scripts?id=eq.{{ $('Workflow Configuration').first().json.scriptId }}",
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "apikey",
"value": "={{ $('Workflow Configuration').first().json.supabaseServiceKey }}"
},
{
"name": "Authorization",
"value": "=Bearer {{ $('Workflow Configuration').first().json.supabaseServiceKey }}"
},
{
"name": "Content-Type",
"value": "application/json"
}
]
},
"sendBody": true,
"specifyBody": "json",
"jsonBody": "={\n \"status\": \"Failed\",\n \"error_message\": \"Posting failed: {{ $json.error || 'Unknown error' }}\"\n}",
"options": {}
},
"id": "update-supabase-failed",
"name": "Update Supabase Failed",
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.3,
"position": [
1760,
100
],
"onError": "continueRegularOutput"
},
{
"parameters": {
"respondWith": "json",
"responseBody": "={{ { success: false, script_id: $('Workflow Configuration').first().json.scriptId, error: 'Posting failed' } }}",
"options": {
"responseCode": 500
}
},
"id": "respond-failed",
"name": "Respond Failed",
"type": "n8n-nodes-base.respondToWebhook",
"typeVersion": 1.1,
"position": [
1980,
100
]
}
],
"connections": {
"Webhook Trigger": {
"main": [
[
{
"node": "Workflow Configuration",
"type": "main",
"index": 0
}
]
]
},
"Workflow Configuration": {
"main": [
[
{
"node": "Fetch Script Data",
"type": "main",
"index": 0
}
]
]
},
"Fetch Script Data": {
"main": [
[
{
"node": "IF Valid Status",
"type": "main",
"index": 0
}
]
]
},
"IF Valid Status": {
"main": [
[
{
"node": "Download Video Binary",
"type": "main",
"index": 0
}
],
[
{
"node": "Respond Invalid Status",
"type": "main",
"index": 0
}
]
]
},
"Download Video Binary": {
"main": [
[
{
"node": "Prepare Posting Data",
"type": "main",
"index": 0
}
]
]
},
"Prepare Posting Data": {
"main": [
[
{
"node": "Split by Platform",
"type": "main",
"index": 0
}
]
]
},
"Split by Platform": {
"main": [
[
{
"node": "Post to Blotato",
"type": "main",
"index": 0
}
]
]
},
"Post to Blotato": {
"main": [
[
{
"node": "Aggregate Results",
"type": "main",
"index": 0
}
],
[
{
"node": "Update Supabase Failed",
"type": "main",
"index": 0
}
]
]
},
"Aggregate Results": {
"main": [
[
{
"node": "Update Supabase Success",
"type": "main",
"index": 0
}
]
]
},
"Update Supabase Success": {
"main": [
[
{
"node": "Respond Success",
"type": "main",
"index": 0
}
]
]
},
"Update Supabase Failed": {
"main": [
[
{
"node": "Respond Failed",
"type": "main",
"index": 0
}
]
]
}
},
"active": false,
"settings": {
"executionOrder": "v1"
},
"versionId": "wf3-v2-enhanced",
"id": "wf3_post_video_manual",
"tags": [
"viral-video-app",
"video-posting",
"multi-platform"
]
}
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
WF3 - Post Video Manual (Enhanced). Uses httpRequest. Webhook trigger; 14 nodes.
Source: https://github.com/awjames6875/ai-clone-viral-video-app/blob/9b7fedf22e605bfd02596be383f493bd019fb5d7/n8n/wf3_post_video_manual.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 .
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
Sign PDF documents with legally-compliant digital signatures using X.509 certificates. Supports multiple PAdES signature levels (B, T, LT, LTA) with optional visible stamps.
📡 This workflow serves as the central Alpha Vantage API fetcher for Tesla trading indicators, delivering cleaned 20-point JSON outputs for three timeframes: , , and . It is required by the following a