Post Videos to TikTok, Reels, and Shorts from One Workflow

You made a short-form video. Now you need it on TikTok, Instagram Reels, YouTube Shorts, LinkedIn, Facebook, and X. Each platform has a different upload API, different authentication, and different required fields. Building separate integrations for each one takes days and breaks often.

This is one of the most requested workflows on the n8n forumarrow-up-right and Make.com forumarrow-up-right. Users want one workflow that takes a video URL and publishes it everywhere. Here is how to build that.

Why cross-platform video posting is hard without Blotato

Each platform requires a different approach:

  • TikTok has no native module in Make.com. On n8n, the TikTok API requires developer app approval that many users report getting rejected. The upload flow requires chunked uploads and a multi-step "publish" confirmation.

  • Instagram Reels requires the Facebook Graph API with a two-step process: create a video container, wait for processing, then publish. Video processing takes 30-120 seconds, so you need polling logic.

  • YouTube Shorts uses the YouTube Data API v3 with OAuth2. Videos under 60 seconds with a vertical aspect ratio appear as Shorts. You need to handle title, privacyStatus, and subscriber notifications.

  • X (Twitter) requires OAuth1 for media uploads, which n8n has deprecated. Image and video posting through n8n's native X node is broken for many users.

  • LinkedIn has a separate video upload flow from images, requiring a pre-registered upload URL, a binary PUT request, then a post creation referencing the uploaded asset.

  • Facebook needs a pageId, and video uploads go through a different endpoint than image uploads.

Building and maintaining six separate integrations means six points of failure.

The unified approach: one API, all platforms

With the Blotato Publish APIarrow-up-right, each platform publish is one POST request. The video URL goes in mediaUrls. Blotato handles the platform-specific upload, processing, and publishing.

Here is the request body for TikTok:

{
  "post": {
    "accountId": "your-tiktok-account-id",
    "content": {
      "text": "Your caption #shorts",
      "mediaUrls": ["https://example.com/video.mp4"],
      "platform": "tiktok"
    },
    "target": {
      "targetType": "tiktok",
      "privacyLevel": "PUBLIC_TO_EVERYONE",
      "disabledComments": false,
      "disabledDuet": false,
      "disabledStitch": false,
      "isBrandedContent": false,
      "isYourBrand": false,
      "isAiGenerated": false
    }
  }
}

For Instagram Reels, change platform and targetType to "instagram" and add "mediaType": "reel" in the target. For YouTube Shorts, set "youtube" and include title and privacyStatus. Same video URL. Same API. Same authentication.

Step-by-step: build the workflow in n8n

  1. Add a trigger (Google Sheets row, webhook, file watcher, or schedule).

  2. Add one Blotato "Publish Post" node per platform. Connect them in parallel from the trigger so they all fire at the same time.

  3. Configure each node with the correct platform, targetType, and accountId.

  4. Pass the same video URL to each node's mediaUrls field.

  5. Run the workflow.

All six platforms publish in parallel. If one fails, the others still complete.

For a video walkthrough, see: n8n Post Everywherearrow-up-right

Step-by-step: build the scenario in Make.com

  1. Add a trigger module (Google Sheets, Airtable, webhook).

  2. Add a Router module after the trigger.

  3. Add one HTTP module per platform route, each calling POST https://backend.blotato.com/v2/posts with the blotato-api-key header.

  4. Configure each HTTP module with the platform-specific request body.

  5. Run the scenario.

For a blueprint and walkthrough, see: Make AI Social Media Systemarrow-up-right

Platform-specific fields at a glance

Platform

targetType

Required target fields

Video type

TikTok

tiktok

privacyLevel, disabledComments, disabledDuet, disabledStitch, isBrandedContent, isYourBrand, isAiGenerated

Video or carousel

Instagram

instagram

mediaType: "reel" (optional, defaults to reel for video)

Reel or Story

YouTube

youtube

title, privacyStatus, shouldNotifySubscribers

Short (under 60s vertical)

LinkedIn

linkedin

None (add pageId for company pages)

Native video

Facebook

facebook

pageId

Video or Reel

X (Twitter)

twitter

None

Native video

Forum threads referenced

These are the community discussions that prompted this post:

Last updated