{
  "name": "Wouldliker — fixed TikTok sound router",
  "active": false,
  "versionId": "wouldliker-fixed-v1.0.0",
  "nodes": [
    {
      "parameters": {
        "content": "## How it works\nThis workflow adds one fixed Wouldliker TikTok sound to any downstream posting or content workflow.\n\n1. A webhook receives an optional `sound_slug`.\n2. The workflow defaults to `vlog` when no sound is provided.\n3. It fetches the official sound profile from `/api/sounds/{slug}`.\n4. The final node returns a flat object with TikTok sound URL, music ID, page URL, and boundary copy.\n\nUse this when another system already chooses, renders, uploads, or posts the video and only needs the official Wouldliker sound fields.",
        "height": 360,
        "width": 470
      },
      "id": "note-how-it-works",
      "name": "How it works",
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [220, -220]
    },
    {
      "parameters": {
        "content": "## Set up steps\nSetup time: about 3 minutes.\n\n1. Import this template.\n2. Execute the workflow once to enable the test webhook.\n3. Send a POST request with `sound_slug`, or omit it to use `vlog`.\n4. Connect the final output to your own uploader, scheduler, browser automation, CMS, or content queue.\n\nValid slugs: `vlog`, `product-reveal`, `core`, `presentation`, `affirmation`, `hala-madrid`, `barcelona`.\n\nNo credentials or API keys are required.",
        "height": 360,
        "width": 470
      },
      "id": "note-setup",
      "name": "Set up steps",
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [700, -220]
    },
    {
      "parameters": {
        "content": "## Boundaries\nThis workflow prepares sound metadata only.\n\n- It does not auto-post to TikTok.\n- It does not download or redistribute audio.\n- It does not guarantee views.\n- A downstream publisher must support attaching the returned `tiktok_sound_url` or `tiktok_music_id` for official TikTok sound usage.\n- If the publisher only uploads an MP4, official sound usage may not be counted by TikTok.",
        "height": 320,
        "width": 470
      },
      "id": "note-boundaries",
      "name": "Boundaries",
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [1180, -220]
    },
    {
      "parameters": {
        "httpMethod": "POST",
        "path": "wouldliker-fixed-sound",
        "responseMode": "lastNode",
        "options": {}
      },
      "id": "trigger",
      "name": "Webhook: fixed sound in",
      "type": "n8n-nodes-base.webhook",
      "typeVersion": 1,
      "position": [240, 320],
      "webhookId": "wouldliker-fixed-sound"
    },
    {
      "parameters": {
        "values": {
          "string": [
            {
              "name": "sound_slug",
              "value": "={{ $json.body.sound_slug || $json.body.sound || 'vlog' }}"
            },
            {
              "name": "source_id",
              "value": "={{ $json.body.source_id || $json.body.video_id || '' }}"
            },
            {
              "name": "copy_boundary",
              "value": "Public proof is evidence of fit and momentum, not a guarantee of views."
            }
          ]
        },
        "options": {}
      },
      "id": "normalize",
      "name": "Normalize sound slug",
      "type": "n8n-nodes-base.set",
      "typeVersion": 2,
      "position": [500, 320]
    },
    {
      "parameters": {
        "url": "={{ 'https://wouldliker.com/api/sounds/' + $json.sound_slug }}",
        "options": {}
      },
      "id": "sound-profile",
      "name": "Wouldliker: get sound profile",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [760, 320]
    },
    {
      "parameters": {
        "values": {
          "string": [
            {
              "name": "source_id",
              "value": "={{ $node['Normalize sound slug'].json.source_id }}"
            },
            {
              "name": "sound_name",
              "value": "={{ $json.sound.name }}"
            },
            {
              "name": "sound_slug",
              "value": "={{ $json.sound.sound_slug }}"
            },
            {
              "name": "tiktok_sound_url",
              "value": "={{ $json.sound.tiktok_sound_url }}"
            },
            {
              "name": "tiktok_music_id",
              "value": "={{ $json.sound.tiktok_music_id }}"
            },
            {
              "name": "page_url",
              "value": "={{ $json.sound.page_url }}"
            },
            {
              "name": "saturation_state",
              "value": "={{ $json.sound.saturation_state }}"
            },
            {
              "name": "copy_boundary",
              "value": "={{ $json.copy_boundary || $node['Normalize sound slug'].json.copy_boundary }}"
            }
          ]
        },
        "options": {}
      },
      "id": "shape",
      "name": "Shape sound metadata",
      "type": "n8n-nodes-base.set",
      "typeVersion": 2,
      "position": [1020, 320]
    }
  ],
  "connections": {
    "Webhook: fixed sound in": {
      "main": [[{ "node": "Normalize sound slug", "type": "main", "index": 0 }]]
    },
    "Normalize sound slug": {
      "main": [[{ "node": "Wouldliker: get sound profile", "type": "main", "index": 0 }]]
    },
    "Wouldliker: get sound profile": {
      "main": [[{ "node": "Shape sound metadata", "type": "main", "index": 0 }]]
    }
  },
  "settings": { "executionOrder": "v1" },
  "meta": {
    "templateCredsSetupCompleted": true,
    "wouldliker_template_version": "fixed-1.0.0",
    "description": "Webhook → fixed Wouldliker sound profile → flat metadata for downstream publishers. Public proof is evidence of fit and momentum, not a guarantee of views."
  },
  "tags": [
    { "name": "wouldliker" },
    { "name": "tiktok" },
    { "name": "autoposting" },
    { "name": "workflow-automation" },
    { "name": "sound-metadata" }
  ]
}
