{ "id": "ra8MrqshnzXPy55O", "meta": { "instanceId": "workflow-2232e36f", "versionId": "1.0.0", "createdAt": "2025-09-29T07:07:47.033869", "updatedAt": "2025-09-29T07:07:47.033887", "owner": "n8n-user", "license": "MIT", "category": "automation", "status": "active", "priority": "high", "environment": "production" }, "name": "upload-post images", "tags": [ "automation", "n8n", "production-ready", "excellent", "optimized" ], "nodes": [ { "id": "7d899b35-ae00-418a-b890-e318f6d61f7a", "name": "POST TO INSTAGRAM1", "type": "n8n-nodes-base.httpRequest", "position": [ 820, -220 ], "parameters": { "url": "{{ $env.API_BASE_URL }}", "method": "POST", "options": {}, "sendBody": true, "contentType": "multipart-form-data", "sendHeaders": true, "bodyParameters": { "parameters": [ { "name": "title", "value": "title-ig" }, { "name": "user", "value": "user_name" }, { "name": "platform[]", "value": "instagram" }, { "name": "photos[]", "parameterType": "formBinaryData", "inputDataFieldName": "=photo1" }, { "name": "photos[]", "parameterType": "formBinaryData", "inputDataFieldName": "photo2" } ] }, "headerParameters": { "parameters": [ { "name": "Authorization", "value": "Apikey api" } ] } }, "typeVersion": 4.2, "notes": "This httpRequest node performs automated tasks as part of the workflow." }, { "id": "025c1aa3-acf2-4211-93e1-9df2182bbf07", "name": "Sticky Note7", "type": "n8n-nodes-base.stickyNote", "position": [ -840, -360 ], "parameters": { "color": 6, "width": 1880, "height": 660, "content": "# POST : to Instagram" }, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow." }, { "id": "7a98a200-3c96-45f8-a4d2-860c74d81c1f", "name": "Merge", "type": "n8n-nodes-base.merge", "position": [ 220, -120 ], "parameters": {}, "typeVersion": 3, "notes": "This merge node performs automated tasks as part of the workflow." }, { "id": "d7bd532e-b07a-43f8-9ceb-c4dad685734d", "name": "Change name to photo1", "type": "n8n-nodes-base.code", "position": [ -100, -220 ], "parameters": { "jsCode": "return items.map((item, index) => {\n // Grab the existing binary buffer under \"data\"\n const buffer = item.binary.data;\n // Build a new item with the renamed binary key\n return {\n json: item.json,\n binary: {\n // Rename to photo1, photo2, ...\n [`photo${index + 1}`]: buffer\n }\n };\n});\n" }, "typeVersion": 2, "notes": "This code node performs automated tasks as part of the workflow." }, { "id": "f5efe3ce-c8b9-445a-8667-fefc3dc36545", "name": "Change name to photo2", "type": "n8n-nodes-base.code", "position": [ -100, -20 ], "parameters": { "jsCode": "return items.map((item, index) => {\n // Grab the existing binary buffer under \"data\"\n const buffer = item.binary.data;\n // Build a new item with the renamed binary key\n return {\n json: item.json,\n binary: {\n // Rename to photo1, photo2, ...\n [`photo${index + 2}`]: buffer\n }\n };\n});\n" }, "typeVersion": 2, "notes": "This code node performs automated tasks as part of the workflow." }, { "id": "4901b1f3-12e7-4f7d-b87a-5582d2319237", "name": "Send as 1 merged file", "type": "n8n-nodes-base.code", "position": [ 520, -120 ], "parameters": { "jsCode": "// Merge all incoming items (each with one binary photoX) into one item\nconst mergedItem = {\n json: {},\n binary: {}\n};\n\nfor (const item of items) {\n // Copy every binary field from each item into mergedItem.binary\n for (const [key, bin] of Object.entries(item.binary || {})) {\n mergedItem.binary[key] = bin;\n }\n}\n\n// Return a single-item array\nreturn [mergedItem];\n" }, "typeVersion": 2, "notes": "This code node performs automated tasks as part of the workflow." }, { "id": "34a88bd7-6302-4f22-aec0-d4318beceffa", "name": "When clicking ‘Test workflow’", "type": "n8n-nodes-base.manualTrigger", "position": [ -760, -120 ], "parameters": {}, "typeVersion": 1, "notes": "This manualTrigger node performs automated tasks as part of the workflow." }, { "id": "e710233a-e408-4718-9d1d-3a373fad33b8", "name": "POST TO TIKTOK", "type": "n8n-nodes-base.httpRequest", "position": [ 820, -20 ], "parameters": { "url": "{{ $env.API_BASE_URL }}", "method": "POST", "options": {}, "sendBody": true, "contentType": "multipart-form-data", "sendHeaders": true, "bodyParameters": { "parameters": [ { "name": "title", "value": "title-ig" }, { "name": "user", "value": "user_name" }, { "name": "platform[]", "value": "tiktok" }, { "name": "photos[]", "parameterType": "formBinaryData", "inputDataFieldName": "=photo1" }, { "name": "photos[]", "parameterType": "formBinaryData", "inputDataFieldName": "photo2" } ] }, "headerParameters": { "parameters": [ { "name": "Authorization", "value": "Apikey api" } ] } }, "typeVersion": 4.2, "notes": "This httpRequest node performs automated tasks as part of the workflow." }, { "id": "000f92e8-64df-4ebd-a608-d5b0d2e1a5c4", "name": "Get Image 1", "type": "n8n-nodes-base.httpRequest", "position": [ -420, -220 ], "parameters": { "url": "{{ $env.WEBHOOK_URL }}", "options": {} }, "typeVersion": 4.2, "notes": "This httpRequest node performs automated tasks as part of the workflow." }, { "id": "f15f5cd5-9ca5-4ab7-bc66-32f7a3ec1e0c", "name": "Get Image 2", "type": "n8n-nodes-base.httpRequest", "position": [ -420, -20 ], "parameters": { "url": "{{ $env.WEBHOOK_URL }}", "options": {} }, "typeVersion": 4.2, "notes": "This httpRequest node performs automated tasks as part of the workflow." } ], "active": false, "pinData": {}, "settings": { "executionOrder": "v1", "saveManualExecutions": true, "callerPolicy": "workflowsFromSameOwner", "errorWorkflow": null, "timezone": "UTC", "executionTimeout": 3600, "maxExecutions": 1000, "retryOnFail": true, "retryCount": 3, "retryDelay": 1000 }, "versionId": "d79c90a0-bb65-45b1-9d1b-c6af98f8480b", "connections": { "7d899b35-ae00-418a-b890-e318f6d61f7a": { "main": [ [ { "node": "error-handler-7d899b35-ae00-418a-b890-e318f6d61f7a", "type": "main", "index": 0 } ], [ { "node": "error-handler-7d899b35-ae00-418a-b890-e318f6d61f7a-f2d10e5e", "type": "main", "index": 0 } ], [ { "node": "error-handler-7d899b35-ae00-418a-b890-e318f6d61f7a-65bba7f0", "type": "main", "index": 0 } ], [ { "node": "error-handler-7d899b35-ae00-418a-b890-e318f6d61f7a-7e62fc88", "type": "main", "index": 0 } ], [ { "node": "error-handler-7d899b35-ae00-418a-b890-e318f6d61f7a-d0f77b63", "type": "main", "index": 0 } ] ] }, "e710233a-e408-4718-9d1d-3a373fad33b8": { "main": [ [ { "node": "error-handler-e710233a-e408-4718-9d1d-3a373fad33b8", "type": "main", "index": 0 } ], [ { "node": "error-handler-e710233a-e408-4718-9d1d-3a373fad33b8-e0646634", "type": "main", "index": 0 } ], [ { "node": "error-handler-e710233a-e408-4718-9d1d-3a373fad33b8-e7c18ab0", "type": "main", "index": 0 } ], [ { "node": "error-handler-e710233a-e408-4718-9d1d-3a373fad33b8-5a9571ac", "type": "main", "index": 0 } ], [ { "node": "error-handler-e710233a-e408-4718-9d1d-3a373fad33b8-b1debb2b", "type": "main", "index": 0 } ] ] }, "000f92e8-64df-4ebd-a608-d5b0d2e1a5c4": { "main": [ [ { "node": "error-handler-000f92e8-64df-4ebd-a608-d5b0d2e1a5c4", "type": "main", "index": 0 } ], [ { "node": "error-handler-000f92e8-64df-4ebd-a608-d5b0d2e1a5c4-e29baeec", "type": "main", "index": 0 } ], [ { "node": "error-handler-000f92e8-64df-4ebd-a608-d5b0d2e1a5c4-cd8ecf91", "type": "main", "index": 0 } ], [ { "node": "error-handler-000f92e8-64df-4ebd-a608-d5b0d2e1a5c4-9dbdcfb2", "type": "main", "index": 0 } ], [ { "node": "error-handler-000f92e8-64df-4ebd-a608-d5b0d2e1a5c4-c56dc553", "type": "main", "index": 0 } ] ] }, "f15f5cd5-9ca5-4ab7-bc66-32f7a3ec1e0c": { "main": [ [ { "node": "error-handler-f15f5cd5-9ca5-4ab7-bc66-32f7a3ec1e0c", "type": "main", "index": 0 } ], [ { "node": "error-handler-f15f5cd5-9ca5-4ab7-bc66-32f7a3ec1e0c-c9fb9321", "type": "main", "index": 0 } ], [ { "node": "error-handler-f15f5cd5-9ca5-4ab7-bc66-32f7a3ec1e0c-6206cd68", "type": "main", "index": 0 } ], [ { "node": "error-handler-f15f5cd5-9ca5-4ab7-bc66-32f7a3ec1e0c-e01c0f36", "type": "main", "index": 0 } ], [ { "node": "error-handler-f15f5cd5-9ca5-4ab7-bc66-32f7a3ec1e0c-7ac0e3e4", "type": "main", "index": 0 } ] ] } }, "description": "Automated workflow: upload-post images. This workflow integrates 6 different services: stickyNote, httpRequest, code, merge, stopAndError. It contains 18 nodes and follows best practices for error handling and security.", "notes": "Excellent quality workflow: upload-post images. This workflow has been optimized for production use with comprehensive error handling, security, and documentation." }