{
  "name": "Multi-channel content engine",
  "nodes": [
    {
      "parameters": {},
      "id": "00000000-0000-4000-8000-000000000001",
      "name": "When clicking ‘Test workflow’",
      "type": "n8n-nodes-base.manualTrigger",
      "typeVersion": 1,
      "position": [
        0,
        0
      ]
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "00000000-0000-4000-8000-000000000002",
              "name": "idea",
              "value": "Our new PostSider n8n workflows are live",
              "type": "string"
            },
            {
              "id": "00000000-0000-4000-8000-000000000003",
              "name": "tone",
              "value": "confident and friendly",
              "type": "string"
            },
            {
              "id": "00000000-0000-4000-8000-000000000004",
              "name": "imageUrl",
              "value": "",
              "type": "string"
            }
          ]
        },
        "options": {}
      },
      "id": "00000000-0000-4000-8000-000000000005",
      "name": "1. Post idea",
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        220,
        0
      ]
    },
    {
      "parameters": {
        "conditions": {
          "options": {
            "caseSensitive": true,
            "leftValue": "",
            "typeValidation": "strict",
            "version": 2
          },
          "conditions": [
            {
              "id": "00000000-0000-4000-8000-000000000006",
              "leftValue": "={{ $json.imageUrl }}",
              "rightValue": "",
              "operator": {
                "type": "string",
                "operation": "isNotEmpty",
                "name": "filter.operator.isNotEmpty"
              }
            }
          ],
          "combinator": "and"
        }
      },
      "id": "00000000-0000-4000-8000-000000000007",
      "name": "2. Own image?",
      "type": "n8n-nodes-base.if",
      "typeVersion": 2.2,
      "position": [
        440,
        0
      ]
    },
    {
      "parameters": {
        "method": "POST",
        "url": "https://api.postsider.com/public/v1/upload-from-url",
        "sendBody": true,
        "specifyBody": "json",
        "jsonBody": "={\"url\": \"{{ $json.imageUrl }}\"}"
      },
      "id": "00000000-0000-4000-8000-000000000008",
      "name": "3a. Upload my image",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [
        660,
        -180
      ],
      "credentials": {
        "httpHeaderAuth": {
          "id": "1",
          "name": "PostSider API Key"
        }
      }
    },
    {
      "parameters": {
        "method": "POST",
        "url": "https://api.openai.com/v1/images/generations",
        "sendBody": true,
        "specifyBody": "json",
        "jsonBody": "={\n  \"model\": \"dall-e-3\",\n  \"prompt\": \"High-quality social media image about: {{ $('1. Post idea').first().json.idea }}. Clean composition, modern style, no text overlays.\",\n  \"n\": 1,\n  \"size\": \"1024x1024\",\n  \"response_format\": \"url\"\n}"
      },
      "id": "00000000-0000-4000-8000-000000000009",
      "name": "3b. Generate image (AI)",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [
        660,
        180
      ],
      "credentials": {
        "httpHeaderAuth": {
          "id": "2",
          "name": "OpenAI API Key"
        }
      }
    },
    {
      "parameters": {
        "method": "POST",
        "url": "https://api.postsider.com/public/v1/upload-from-url",
        "sendBody": true,
        "specifyBody": "json",
        "jsonBody": "={\"url\": \"{{ $json.data[0].url }}\"}"
      },
      "id": "00000000-0000-4000-8000-000000000010",
      "name": "4b. Upload AI image",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [
        880,
        180
      ],
      "credentials": {
        "httpHeaderAuth": {
          "id": "1",
          "name": "PostSider API Key"
        }
      }
    },
    {
      "parameters": {
        "mode": "combine",
        "combineBy": "combineByPosition",
        "options": {}
      },
      "id": "00000000-0000-4000-8000-000000000011",
      "name": "5. Image ready",
      "type": "n8n-nodes-base.merge",
      "typeVersion": 3.1,
      "position": [
        1100,
        0
      ]
    },
    {
      "parameters": {
        "method": "GET",
        "url": "https://api.postsider.com/public/v1/find-slot/[YOUR POSTSIDER X CHANNEL ID]"
      },
      "id": "00000000-0000-4000-8000-000000000012",
      "name": "6a. Find best slot (X)",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [
        1320,
        -420
      ],
      "credentials": {
        "httpHeaderAuth": {
          "id": "1",
          "name": "PostSider API Key"
        }
      }
    },
    {
      "parameters": {
        "method": "POST",
        "url": "https://api.openai.com/v1/chat/completions",
        "sendBody": true,
        "specifyBody": "json",
        "jsonBody": "={\n  \"model\": \"gpt-4o-mini\",\n  \"temperature\": 0.8,\n  \"messages\": [\n    { \"role\": \"system\", \"content\": \"You write social media posts for X (Twitter). Rules: Max 280 characters. Sharp hook in the first line, confident tone, 1-3 relevant hashtags woven in naturally. No clickbait. Respond with the post text only.\" },\n    { \"role\": \"user\", \"content\": \"Topic: {{ $('1. Post idea').first().json.idea }}. Tone: {{ $('1. Post idea').first().json.tone }}. Write the post.\" }\n  ]\n}"
      },
      "id": "00000000-0000-4000-8000-000000000013",
      "name": "7a. Generate post (AI) (X)",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [
        1540,
        -420
      ],
      "credentials": {
        "httpHeaderAuth": {
          "id": "2",
          "name": "OpenAI API Key"
        }
      }
    },
    {
      "parameters": {
        "mode": "runOnceForAllItems",
        "jsCode": "const slot = $('6a. Find best slot (X)').first().json; // { date } UTC, append 'Z'\nconst ai = $input.first().json;\nconst media = $('5. Image ready').first().json; // { id, path } from whichever upload ran\nconst content = (ai.choices?.[0]?.message?.content || '').trim();\nreturn [{\n  json: {\n    body: {\n      type: 'draft',\n      date: slot.date + 'Z',\n      shortLink: false,\n      tags: [],\n      posts: [{\n        integration: { id: '[YOUR POSTSIDER X CHANNEL ID]' },\n        value: [{ content, image: [{ id: media.id, path: media.path }] }],\n        settings: {\"__type\":\"x\"}\n      }]\n    }\n  }\n}];"
      },
      "id": "00000000-0000-4000-8000-000000000014",
      "name": "8a. Build draft (X)",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        1760,
        -420
      ]
    },
    {
      "parameters": {
        "method": "POST",
        "url": "https://api.postsider.com/public/v1/posts",
        "sendBody": true,
        "specifyBody": "json",
        "jsonBody": "={{ JSON.stringify($json.body) }}",
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            {
              "name": "Idempotency-Key",
              "value": "=ps-{{ $now.toISO() }}"
            }
          ]
        }
      },
      "id": "00000000-0000-4000-8000-000000000015",
      "name": "9a. Create draft (X)",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [
        1980,
        -420
      ],
      "credentials": {
        "httpHeaderAuth": {
          "id": "1",
          "name": "PostSider API Key"
        }
      }
    },
    {
      "parameters": {
        "method": "POST",
        "url": "=https://api.postsider.com/public/v1/posts/{{ $json.postId }}/request-approval"
      },
      "id": "00000000-0000-4000-8000-000000000016",
      "name": "10a. Request approval (X)",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [
        2200,
        -420
      ],
      "credentials": {
        "httpHeaderAuth": {
          "id": "1",
          "name": "PostSider API Key"
        }
      }
    },
    {
      "parameters": {
        "method": "GET",
        "url": "https://api.postsider.com/public/v1/find-slot/[YOUR POSTSIDER LINKEDIN CHANNEL ID]"
      },
      "id": "00000000-0000-4000-8000-000000000017",
      "name": "6a. Find best slot (LinkedIn)",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [
        1320,
        -140
      ],
      "credentials": {
        "httpHeaderAuth": {
          "id": "1",
          "name": "PostSider API Key"
        }
      }
    },
    {
      "parameters": {
        "method": "POST",
        "url": "https://api.openai.com/v1/chat/completions",
        "sendBody": true,
        "specifyBody": "json",
        "jsonBody": "={\n  \"model\": \"gpt-4o-mini\",\n  \"temperature\": 0.8,\n  \"messages\": [\n    { \"role\": \"system\", \"content\": \"You write social media posts for LinkedIn. Rules: Professional, insight-first tone. Short paragraphs with a line break between them, a concrete takeaway, and a closing question or call to action. 2-4 relevant hashtags. Respond with the post text only.\" },\n    { \"role\": \"user\", \"content\": \"Topic: {{ $('1. Post idea').first().json.idea }}. Tone: {{ $('1. Post idea').first().json.tone }}. Write the post.\" }\n  ]\n}"
      },
      "id": "00000000-0000-4000-8000-000000000018",
      "name": "7a. Generate post (AI) (LinkedIn)",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [
        1540,
        -140
      ],
      "credentials": {
        "httpHeaderAuth": {
          "id": "2",
          "name": "OpenAI API Key"
        }
      }
    },
    {
      "parameters": {
        "mode": "runOnceForAllItems",
        "jsCode": "const slot = $('6a. Find best slot (LinkedIn)').first().json; // { date } UTC, append 'Z'\nconst ai = $input.first().json;\nconst media = $('5. Image ready').first().json; // { id, path } from whichever upload ran\nconst content = (ai.choices?.[0]?.message?.content || '').trim();\nreturn [{\n  json: {\n    body: {\n      type: 'draft',\n      date: slot.date + 'Z',\n      shortLink: false,\n      tags: [],\n      posts: [{\n        integration: { id: '[YOUR POSTSIDER LINKEDIN CHANNEL ID]' },\n        value: [{ content, image: [{ id: media.id, path: media.path }] }],\n        settings: {\"__type\":\"linkedin\"}\n      }]\n    }\n  }\n}];"
      },
      "id": "00000000-0000-4000-8000-000000000019",
      "name": "8a. Build draft (LinkedIn)",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        1760,
        -140
      ]
    },
    {
      "parameters": {
        "method": "POST",
        "url": "https://api.postsider.com/public/v1/posts",
        "sendBody": true,
        "specifyBody": "json",
        "jsonBody": "={{ JSON.stringify($json.body) }}",
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            {
              "name": "Idempotency-Key",
              "value": "=ps-{{ $now.toISO() }}"
            }
          ]
        }
      },
      "id": "00000000-0000-4000-8000-000000000020",
      "name": "9a. Create draft (LinkedIn)",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [
        1980,
        -140
      ],
      "credentials": {
        "httpHeaderAuth": {
          "id": "1",
          "name": "PostSider API Key"
        }
      }
    },
    {
      "parameters": {
        "method": "POST",
        "url": "=https://api.postsider.com/public/v1/posts/{{ $json.postId }}/request-approval"
      },
      "id": "00000000-0000-4000-8000-000000000021",
      "name": "10a. Request approval (LinkedIn)",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [
        2200,
        -140
      ],
      "credentials": {
        "httpHeaderAuth": {
          "id": "1",
          "name": "PostSider API Key"
        }
      }
    },
    {
      "parameters": {
        "method": "GET",
        "url": "https://api.postsider.com/public/v1/find-slot/[YOUR POSTSIDER FACEBOOK CHANNEL ID]"
      },
      "id": "00000000-0000-4000-8000-000000000022",
      "name": "6a. Find best slot (Facebook)",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [
        1320,
        140
      ],
      "credentials": {
        "httpHeaderAuth": {
          "id": "1",
          "name": "PostSider API Key"
        }
      }
    },
    {
      "parameters": {
        "method": "POST",
        "url": "https://api.openai.com/v1/chat/completions",
        "sendBody": true,
        "specifyBody": "json",
        "jsonBody": "={\n  \"model\": \"gpt-4o-mini\",\n  \"temperature\": 0.8,\n  \"messages\": [\n    { \"role\": \"system\", \"content\": \"You write social media posts for Facebook. Rules: Friendly, conversational tone, up to 4 short paragraphs, one clear call to action at the end, 3-5 relevant hashtags. Respond with the post text only.\" },\n    { \"role\": \"user\", \"content\": \"Topic: {{ $('1. Post idea').first().json.idea }}. Tone: {{ $('1. Post idea').first().json.tone }}. Write the post.\" }\n  ]\n}"
      },
      "id": "00000000-0000-4000-8000-000000000023",
      "name": "7a. Generate post (AI) (Facebook)",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [
        1540,
        140
      ],
      "credentials": {
        "httpHeaderAuth": {
          "id": "2",
          "name": "OpenAI API Key"
        }
      }
    },
    {
      "parameters": {
        "mode": "runOnceForAllItems",
        "jsCode": "const slot = $('6a. Find best slot (Facebook)').first().json; // { date } UTC, append 'Z'\nconst ai = $input.first().json;\nconst media = $('5. Image ready').first().json; // { id, path } from whichever upload ran\nconst content = (ai.choices?.[0]?.message?.content || '').trim();\nreturn [{\n  json: {\n    body: {\n      type: 'draft',\n      date: slot.date + 'Z',\n      shortLink: false,\n      tags: [],\n      posts: [{\n        integration: { id: '[YOUR POSTSIDER FACEBOOK CHANNEL ID]' },\n        value: [{ content, image: [{ id: media.id, path: media.path }] }],\n        settings: {\"__type\":\"facebook\"}\n      }]\n    }\n  }\n}];"
      },
      "id": "00000000-0000-4000-8000-000000000024",
      "name": "8a. Build draft (Facebook)",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        1760,
        140
      ]
    },
    {
      "parameters": {
        "method": "POST",
        "url": "https://api.postsider.com/public/v1/posts",
        "sendBody": true,
        "specifyBody": "json",
        "jsonBody": "={{ JSON.stringify($json.body) }}",
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            {
              "name": "Idempotency-Key",
              "value": "=ps-{{ $now.toISO() }}"
            }
          ]
        }
      },
      "id": "00000000-0000-4000-8000-000000000025",
      "name": "9a. Create draft (Facebook)",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [
        1980,
        140
      ],
      "credentials": {
        "httpHeaderAuth": {
          "id": "1",
          "name": "PostSider API Key"
        }
      }
    },
    {
      "parameters": {
        "method": "POST",
        "url": "=https://api.postsider.com/public/v1/posts/{{ $json.postId }}/request-approval"
      },
      "id": "00000000-0000-4000-8000-000000000026",
      "name": "10a. Request approval (Facebook)",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [
        2200,
        140
      ],
      "credentials": {
        "httpHeaderAuth": {
          "id": "1",
          "name": "PostSider API Key"
        }
      }
    },
    {
      "parameters": {
        "method": "GET",
        "url": "https://api.postsider.com/public/v1/find-slot/[YOUR POSTSIDER INSTAGRAM CHANNEL ID]"
      },
      "id": "00000000-0000-4000-8000-000000000027",
      "name": "6a. Find best slot (Instagram)",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [
        1320,
        420
      ],
      "credentials": {
        "httpHeaderAuth": {
          "id": "1",
          "name": "PostSider API Key"
        }
      }
    },
    {
      "parameters": {
        "method": "POST",
        "url": "https://api.openai.com/v1/chat/completions",
        "sendBody": true,
        "specifyBody": "json",
        "jsonBody": "={\n  \"model\": \"gpt-4o-mini\",\n  \"temperature\": 0.8,\n  \"messages\": [\n    { \"role\": \"system\", \"content\": \"You write social media posts for Instagram. Rules: Caption of 2-4 short, human lines with a light hook, then 5-8 relevant hashtags. Visual language, warm and engaging. This post is published together with an image. Respond with the post text only.\" },\n    { \"role\": \"user\", \"content\": \"Topic: {{ $('1. Post idea').first().json.idea }}. Tone: {{ $('1. Post idea').first().json.tone }}. Write the post.\" }\n  ]\n}"
      },
      "id": "00000000-0000-4000-8000-000000000028",
      "name": "7a. Generate post (AI) (Instagram)",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [
        1540,
        420
      ],
      "credentials": {
        "httpHeaderAuth": {
          "id": "2",
          "name": "OpenAI API Key"
        }
      }
    },
    {
      "parameters": {
        "mode": "runOnceForAllItems",
        "jsCode": "const slot = $('6a. Find best slot (Instagram)').first().json; // { date } UTC, append 'Z'\nconst ai = $input.first().json;\nconst media = $('5. Image ready').first().json; // { id, path } from whichever upload ran\nconst content = (ai.choices?.[0]?.message?.content || '').trim();\nreturn [{\n  json: {\n    body: {\n      type: 'draft',\n      date: slot.date + 'Z',\n      shortLink: false,\n      tags: [],\n      posts: [{\n        integration: { id: '[YOUR POSTSIDER INSTAGRAM CHANNEL ID]' },\n        value: [{ content, image: [{ id: media.id, path: media.path }] }],\n        settings: {\"__type\":\"instagram\",\"post_type\":\"post\"}\n      }]\n    }\n  }\n}];"
      },
      "id": "00000000-0000-4000-8000-000000000029",
      "name": "8a. Build draft (Instagram)",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        1760,
        420
      ]
    },
    {
      "parameters": {
        "method": "POST",
        "url": "https://api.postsider.com/public/v1/posts",
        "sendBody": true,
        "specifyBody": "json",
        "jsonBody": "={{ JSON.stringify($json.body) }}",
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            {
              "name": "Idempotency-Key",
              "value": "=ps-{{ $now.toISO() }}"
            }
          ]
        }
      },
      "id": "00000000-0000-4000-8000-000000000030",
      "name": "9a. Create draft (Instagram)",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [
        1980,
        420
      ],
      "credentials": {
        "httpHeaderAuth": {
          "id": "1",
          "name": "PostSider API Key"
        }
      }
    },
    {
      "parameters": {
        "method": "POST",
        "url": "=https://api.postsider.com/public/v1/posts/{{ $json.postId }}/request-approval"
      },
      "id": "00000000-0000-4000-8000-000000000031",
      "name": "10a. Request approval (Instagram)",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [
        2200,
        420
      ],
      "credentials": {
        "httpHeaderAuth": {
          "id": "1",
          "name": "PostSider API Key"
        }
      }
    },
    {
      "parameters": {
        "content": "WHAT THIS DOES\nOne idea in, a full campaign out: AI writes a platform-native post for X, LinkedIn, Facebook and Instagram (sharing one image), every post is placed in the PostSider calendar at its own next free slot (the same day-aware queue logic as the dashboard) and pushed into the approval queue. Approve them in the app and PostSider publishes each post at its found slot.\n\nSETUP (once, about 4 minutes)\n1. PostSider API key: app.postsider.com > Settings > API > Create key. It starts with ps_ and is shown once, so save it.\n2. n8n credentials (both type Header Auth):\n   - \"PostSider API Key\": Name = Authorization, Value = your ps_ key. Select it on every node that talks to PostSider.\n   - \"OpenAI API Key\": Name = Authorization, Value = Bearer sk-... . Select it on the \"(AI)\" nodes.\n3. Channels: replace each [YOUR POSTSIDER ... CHANNEL ID] placeholder with a real channel id from Settings > Channels in the app. Keep only the platforms you actually use (delete the other legs).\n\nHOW TO RUN\n1. Open \"1. Post idea\" and set: idea (your topic), tone (optional).\n2. Image: leave \"imageUrl\" empty to generate one image with AI (dall-e-3), or paste a URL of your own image to use that instead. The same image is attached to all four posts.\n3. Click \"Test workflow\": four drafts land in the calendar at their best slots and go into the approval queue. Approve them in the app to publish.\n\nNOTES\n- Every leg creates a DRAFT (type \"draft\") with the found slot date, so nothing publishes without approval. To auto-publish at the slot instead, change \"type: 'draft'\" to \"type: 'schedule'\" in the \"Build draft\" code node of each leg.\n- Each post is created with an Idempotency-Key header, so a retried run returns the original result instead of a duplicate post.\n\nSELF-HOSTED POSTSIDER\nReplace api.postsider.com with your domain; add /api if your install serves the API under /api.",
        "height": 560,
        "width": 600,
        "color": 3
      },
      "id": "00000000-0000-4000-8000-000000000032",
      "name": "How to use",
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        0,
        -560
      ]
    },
    {
      "parameters": {
        "content": "SETUP STEP BY STEP\nFollow in order. Do this once per workflow.\n\nSTEP 1 - Create the n8n credentials (do this once, both type Header Auth):\n  a. \"PostSider API Key\": Name = Authorization, Value = your ps_ key (app.postsider.com > Settings > API > Create key).\n  b. \"OpenAI API Key\": Name = Authorization, Value = Bearer sk-... (your OpenAI key, platform.openai.com).\n\nSTEP 2 - \"1. Post idea\" (Set node):\n  idea = your topic (e.g. \"Our new PostSider n8n workflows are live\")\n  tone = optional style (e.g. \"confident and friendly\")\n  imageUrl = leave empty to generate one image with AI, or paste a URL of your own image\n\nSTEP 3 - Select the \"PostSider API Key\" credential on these nodes:\n  - \"3a. Upload my image\" (own image upload)\n  - \"4b. Upload AI image\" (AI image upload)\n  - \"6a. Find best slot (X)\" / \"(LinkedIn)\" / \"(Facebook)\" / \"(Instagram)\"\n  - \"9a. Create draft (...)\" and \"10a. Request approval (...)\" for each platform\n  - \"5. Find best slot\" in the Google Sheets workflow uses it too\n\nSTEP 4 - Select the \"OpenAI API Key\" credential on these nodes:\n  - \"3b. Generate image (AI)\" (AI image generation)\n  - \"7a. Generate post (AI) (X)\" / \"(LinkedIn)\" / \"(Facebook)\" / \"(Instagram)\"\n\nSTEP 5 - Replace the channel ids:\n  Open the \"6a. Find best slot\", \"8a. Build draft\", \"9a. Create draft\" nodes for each platform and replace the [YOUR POSTSIDER X/LINKEDIN/FACEBOOK/INSTAGRAM CHANNEL ID] placeholders with your real channel ids (app > Settings > Channels). Delete the legs of platforms you do not use.\n\nSTEP 6 - Run:\n  Click \"Test workflow\" once to verify everything works before activating the workflow.",
        "height": 700,
        "width": 680,
        "color": 3
      },
      "id": "00000000-0000-4000-8000-000000000033",
      "name": "Setup step by step",
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        0,
        -1100
      ]
    }
  ],
  "connections": {
    "6a. Find best slot (X)": {
      "main": [
        [
          {
            "node": "7a. Generate post (AI) (X)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "7a. Generate post (AI) (X)": {
      "main": [
        [
          {
            "node": "8a. Build draft (X)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "8a. Build draft (X)": {
      "main": [
        [
          {
            "node": "9a. Create draft (X)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "9a. Create draft (X)": {
      "main": [
        [
          {
            "node": "10a. Request approval (X)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "6a. Find best slot (LinkedIn)": {
      "main": [
        [
          {
            "node": "7a. Generate post (AI) (LinkedIn)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "7a. Generate post (AI) (LinkedIn)": {
      "main": [
        [
          {
            "node": "8a. Build draft (LinkedIn)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "8a. Build draft (LinkedIn)": {
      "main": [
        [
          {
            "node": "9a. Create draft (LinkedIn)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "9a. Create draft (LinkedIn)": {
      "main": [
        [
          {
            "node": "10a. Request approval (LinkedIn)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "6a. Find best slot (Facebook)": {
      "main": [
        [
          {
            "node": "7a. Generate post (AI) (Facebook)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "7a. Generate post (AI) (Facebook)": {
      "main": [
        [
          {
            "node": "8a. Build draft (Facebook)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "8a. Build draft (Facebook)": {
      "main": [
        [
          {
            "node": "9a. Create draft (Facebook)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "9a. Create draft (Facebook)": {
      "main": [
        [
          {
            "node": "10a. Request approval (Facebook)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "6a. Find best slot (Instagram)": {
      "main": [
        [
          {
            "node": "7a. Generate post (AI) (Instagram)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "7a. Generate post (AI) (Instagram)": {
      "main": [
        [
          {
            "node": "8a. Build draft (Instagram)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "8a. Build draft (Instagram)": {
      "main": [
        [
          {
            "node": "9a. Create draft (Instagram)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "9a. Create draft (Instagram)": {
      "main": [
        [
          {
            "node": "10a. Request approval (Instagram)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "When clicking ‘Test workflow’": {
      "main": [
        [
          {
            "node": "1. Post idea",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "1. Post idea": {
      "main": [
        [
          {
            "node": "2. Own image?",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "2. Own image?": {
      "main": [
        [
          {
            "node": "3a. Upload my image",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "3b. Generate image (AI)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "3a. Upload my image": {
      "main": [
        [
          {
            "node": "5. Image ready",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "3b. Generate image (AI)": {
      "main": [
        [
          {
            "node": "4b. Upload AI image",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "4b. Upload AI image": {
      "main": [
        [
          {
            "node": "5. Image ready",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "5. Image ready": {
      "main": [
        [
          {
            "node": "6a. Find best slot (X)",
            "type": "main",
            "index": 0
          },
          {
            "node": "6a. Find best slot (LinkedIn)",
            "type": "main",
            "index": 0
          },
          {
            "node": "6a. Find best slot (Facebook)",
            "type": "main",
            "index": 0
          },
          {
            "node": "6a. Find best slot (Instagram)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "settings": {
    "executionOrder": "v1"
  },
  "pinData": {},
  "active": false,
  "tags": [
    "PostSider",
    "Multi-channel",
    "Content engine",
    "AI"
  ]
}