{
  "name": "Automate TikTok trend videos with Videotok",
  "nodes": [
    {
      "parameters": {
        "content": "## TikTok trend video machine\n\nTurns a trend, keyword, or saved idea into a branded vertical TikTok-style video with Videotok.\n\nReplace the sample idea with TikTok research, a Telegram bot, Google Sheets, Airtable, or your trend tracker.\n\nRequired variables: VIDEOTOK_API_KEY, OPENAI_API_KEY, VIDEOTOK_BRAND_KIT_ID, VIDEOTOK_VOICE_ID.",
        "height": 320,
        "width": 500,
        "color": 4
      },
      "id": "note-overview",
      "name": "Overview and setup",
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [-700, -280]
    },
    {
      "parameters": {},
      "id": "manual",
      "name": "Manual TikTok idea test",
      "type": "n8n-nodes-base.manualTrigger",
      "typeVersion": 1,
      "position": [-620, 120]
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "topic",
              "name": "trend_topic",
              "type": "string",
              "value": "A new TikTok trend about tiny daily productivity systems"
            },
            {
              "id": "brand",
              "name": "brand_context",
              "type": "string",
              "value": "A SaaS brand helping creators automate social media production"
            },
            {
              "id": "audience",
              "name": "audience",
              "type": "string",
              "value": "Social media managers and founders"
            }
          ]
        }
      },
      "id": "trend-source",
      "name": "Replace with TikTok trend source",
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [-360, 120]
    },
    {
      "parameters": {
        "method": "POST",
        "url": "https://api.openai.com/v1/responses",
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            {
              "name": "Authorization",
              "value": "=Bearer {{$vars.OPENAI_API_KEY}}"
            },
            {
              "name": "Content-Type",
              "value": "application/json"
            }
          ]
        },
        "sendBody": true,
        "specifyBody": "json",
        "jsonBody": "={\"model\":\"gpt-4.1-mini\",\"input\":\"Create a TikTok-native video brief. Return strict JSON with title, hook, script, visual_prompt, caption, hashtags. Input: \" + JSON.stringify($json)}"
      },
      "id": "openai-script",
      "name": "OpenAI writes TikTok script",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [-80, 120]
    },
    {
      "parameters": {
        "jsCode": "const raw = $input.first().json.output_text || $input.first().json.output?.[0]?.content?.[0]?.text || '{}';\nlet brief;\ntry { brief = JSON.parse(raw); } catch { brief = { title: 'TikTok trend video', hook: raw.slice(0, 120), script: raw, visual_prompt: raw, caption: raw.slice(0, 220), hashtags: '#tiktok #socialmedia #videotok' }; }\nreturn [{ json: { ...brief, idempotency_key: `tiktok-trend-${$execution.id}` } }];"
      },
      "id": "prepare-payload",
      "name": "Prepare Videotok faceless payload",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [200, 120]
    },
    {
      "parameters": {
        "method": "POST",
        "url": "https://videotok.app/api/v1/faceless-videos",
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            {
              "name": "Authorization",
              "value": "=Bearer {{$vars.VIDEOTOK_API_KEY}}"
            },
            {
              "name": "Content-Type",
              "value": "application/json"
            },
            {
              "name": "Idempotency-Key",
              "value": "={{$json.idempotency_key}}"
            }
          ]
        },
        "sendBody": true,
        "specifyBody": "json",
        "jsonBody": "={\"title\":$json.title,\"prompt\":$json.visual_prompt,\"script\":$json.script,\"aspect_ratio\":\"9:16\",\"duration\":\"26\",\"language\":\"en\",\"voice_id\":$vars.VIDEOTOK_VOICE_ID || \"ash\",\"brand_kit_id\":$vars.VIDEOTOK_BRAND_KIT_ID}"
      },
      "id": "create-video",
      "name": "Create Videotok TikTok video",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [500, 120]
    },
    {
      "parameters": { "amount": 90, "unit": "seconds" },
      "id": "wait",
      "name": "Wait before polling",
      "type": "n8n-nodes-base.wait",
      "typeVersion": 1.1,
      "position": [760, 120]
    },
    {
      "parameters": {
        "url": "=https://videotok.app/api/v1/videos/{{$json.video_id || $json.id}}",
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            {
              "name": "Authorization",
              "value": "=Bearer {{$vars.VIDEOTOK_API_KEY}}"
            }
          ]
        }
      },
      "id": "poll-video",
      "name": "Poll Videotok video",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [1020, 120]
    }
  ],
  "connections": {
    "Manual TikTok idea test": {
      "main": [
        [
          {
            "node": "Replace with TikTok trend source",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Replace with TikTok trend source": {
      "main": [
        [{ "node": "OpenAI writes TikTok script", "type": "main", "index": 0 }]
      ]
    },
    "OpenAI writes TikTok script": {
      "main": [
        [
          {
            "node": "Prepare Videotok faceless payload",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Prepare Videotok faceless payload": {
      "main": [
        [{ "node": "Create Videotok TikTok video", "type": "main", "index": 0 }]
      ]
    },
    "Create Videotok TikTok video": {
      "main": [[{ "node": "Wait before polling", "type": "main", "index": 0 }]]
    },
    "Wait before polling": {
      "main": [[{ "node": "Poll Videotok video", "type": "main", "index": 0 }]]
    }
  },
  "pinData": {},
  "settings": { "executionOrder": "v1" },
  "tags": ["videotok", "openai", "tiktok", "short-form video"],
  "active": false,
  "versionId": "videotok-tiktok-trend-video-machine-1"
}
