{"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","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,"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":{"POST TO INSTAGRAM1":{"main":[[],[],[],[],[]]},"POST TO TIKTOK":{"main":[[],[],[],[],[]]},"Get Image 1":{"main":[[],[],[],[],[]]},"Get Image 2":{"main":[[],[],[],[],[]]}},"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."}