TikTok API Upload Video: The Complete Guide to Automating TikTok Posts (2026)
Learn how to upload videos to TikTok via API. Complete guide with Node.js and Python examples. Skip the OAuth complexity with a unified API.
TL;DR
- What is it? The TikTok API lets you programmatically upload videos and images to TikTok-but it's painful to implement yourself.
- The Problem: OAuth flows, token refreshing, polling for status, rate limits, and a weeks-long approval process.
- The Solution: Use a unified API like bundle.social that handles all the complexity with one endpoint.
- Result: Upload to TikTok (+ 13 other platforms) with a single API call.
Why TikTok Video Upload Automation is Hard
If you've searched for "tiktok api upload video" or "auto upload video tiktok," you've probably discovered that TikTok doesn't make it easy:
- App Approval Hell – TikTok requires a video walkthrough of your app. Expect 1-4 weeks.
- OAuth Complexity – Managing tokens, refresh flows, and scopes for each user.
- Polling Required – TikTok doesn't return the post ID immediately. You have to poll.
- Rate Limits – Hit them too hard and you're in timeout.
- Business Accounts Only – Personal accounts can't use the API.
The reality: Most developers spend 40-80 hours building a TikTok integration. Then they have to maintain it.
The Smarter Way: One API for TikTok + 13 Other Platforms
At bundle.social, we've already done the hard work. Our unified API lets you upload videos to TikTok with a single request-no OAuth handling, no polling, no rate limit juggling.
One API. 14+ Platforms. Twitter, Instagram, Facebook, LinkedIn, TikTok, Pinterest, Reddit, Discord, Slack, YouTube, Mastodon, Bluesky, Threads, and Google Business.
How to Upload TikTok Videos with bundle.social API
Here's the complete flow using our API:
Step 1: Upload Your Video
First, upload your video file to get an uploadId:
curl -X POST https://api.bundle.social/api/v1/upload \ -H "x-api-key: YOUR_API_KEY" \ -F "[email protected]" \ -F "teamId=YOUR_TEAM_ID"
Response:
{ "id": "upload_abc123", "url": "https://cdn.bundle.social/uploads/video.mp4", "mimeType": "video/mp4", "status": "READY" }
Step 2: Create the Post
Now create the TikTok post with a single request:
curl -X POST https://api.bundle.social/api/v1/post \ -H "x-api-key: YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "teamId": "YOUR_TEAM_ID", "title": "My TikTok Video", "postDate": "2026-01-30T15:00:00Z", "status": "SCHEDULED", "socialAccountTypes": ["TIKTOK"], "data": { "TIKTOK": { "type": "VIDEO", "text": "Check out this video! #automation #tiktok", "uploadIds": ["upload_abc123"], "privacy": "PUBLIC_TO_EVERYONE", "disableComments": false, "disableDuet": false, "disableStitch": false } } }'
That's it. We handle the OAuth, the polling, the status checking, everything.
TikTok API Upload Video: Node.js Example
For developers searching "tiktok api upload video" in JavaScript/TypeScript, here's how to use our SDK:
import { BundleSocial } from 'bundlesocial'; import fs from 'fs'; const client = new BundleSocial({ apiKey: 'YOUR_API_KEY' }); async function uploadToTikTok() { // Step 1: Upload the video const upload = await client.upload.create({ teamId: 'YOUR_TEAM_ID', file: fs.createReadStream('./video.mp4') }); // Step 2: Create the post const post = await client.post.create({ teamId: 'YOUR_TEAM_ID', title: 'Automated TikTok Post', postDate: new Date().toISOString(), status: 'SCHEDULED', socialAccountTypes: ['TIKTOK'], data: { TIKTOK: { type: 'VIDEO', text: 'Posted via bundle.social API! 🚀 #automation', uploadIds: [upload.id], privacy: 'PUBLIC_TO_EVERYONE', disableComments: false, disableDuet: false, disableStitch: false, isAiGenerated: false, } } }); console.log('Post created:', post.id); }
TikTok API Upload Video: Python Example
For those searching "tiktok api upload video python":
import requests API_KEY = "YOUR_API_KEY" BASE_URL = "https://api.bundle.social/api/v1" HEADERS = {"x-api-key": API_KEY} def upload_video(file_path: str, team_id: str): """Upload video to bundle.social""" with open(file_path, "rb") as f: response = requests.post( f"{BASE_URL}/upload", headers=HEADERS, files={"file": f}, data={"teamId": team_id} ) return response.json() def create_tiktok_post(team_id: str, upload_id: str, caption: str): """Create TikTok post via bundle.social API""" payload = { "teamId": team_id, "title": "My TikTok Video", "postDate": "2026-01-30T15:00:00Z", "status": "SCHEDULED", "socialAccountTypes": ["TIKTOK"], "data": { "TIKTOK": { "type": "VIDEO", "text": caption, "uploadIds": [upload_id], "privacy": "PUBLIC_TO_EVERYONE", "disableComments": False, "disableDuet": False, "disableStitch": False, } } } response = requests.post( f"{BASE_URL}/post", headers={**HEADERS, "Content-Type": "application/json"}, json=payload ) return response.json() # Usage upload = upload_video("./video.mp4", "YOUR_TEAM_ID") post = create_tiktok_post( team_id="YOUR_TEAM_ID", upload_id=upload["id"], caption="Automated via bundle.social! #python #tiktok" ) print(f"Post created: {post['id']}")
Post to Multiple Platforms at Once
The real power of a unified API: post to TikTok AND other platforms simultaneously:
const post = await client.post.create({ teamId: 'YOUR_TEAM_ID', title: 'Cross-platform video', postDate: new Date().toISOString(), status: 'SCHEDULED', socialAccountTypes: ['TIKTOK', 'INSTAGRAM', 'YOUTUBE'], data: { TIKTOK: { type: 'VIDEO', text: 'Check this out on TikTok! #viral', uploadIds: [uploadId], privacy: 'PUBLIC_TO_EVERYONE', }, INSTAGRAM: { type: 'REEL', text: 'Watch this Reel! #instagram', uploadIds: [uploadId], }, YOUTUBE: { type: 'SHORT', title: 'New YouTube Short', description: 'Check out this short!', uploadIds: [uploadId], privacy: 'public', } } });
One request. Three platforms. Zero headache.
TikTok-Specific Options
Here are all the TikTok options you can configure:
| Option | Type | Description |
|---|---|---|
type | "VIDEO" | "IMAGE" | Video or photo carousel |
text | string | Caption (max 2200 characters) |
uploadIds | string[] | Your uploaded media IDs |
privacy | enum | PUBLIC_TO_EVERYONE, FOLLOWER_OF_CREATOR, MUTUAL_FOLLOW_FRIENDS, SELF_ONLY |
disableComments | boolean | Disable comments on post |
disableDuet | boolean | Disable duets |
disableStitch | boolean | Disable stitches |
isBrandContent | boolean | Mark as paid partnership |
isOrganicBrandContent | boolean | Mark as organic brand content |
isAiGenerated | boolean | Mark as AI-generated content |
autoAddMusic | boolean | Auto-add music (image posts only) |
thumbnailOffset | number | Frame offset for thumbnail (ms) |
TikTok Image/Photo Posts
TikTok now supports photo carousels. Here's how:
const post = await client.post.create({ teamId: 'YOUR_TEAM_ID', title: 'Photo carousel', postDate: new Date().toISOString(), status: 'SCHEDULED', socialAccountTypes: ['TIKTOK'], data: { TIKTOK: { type: 'IMAGE', // Use IMAGE for photo posts text: 'Check out these photos! #photocarousel', uploadIds: [imageId1, imageId2, imageId3], // 2-35 images privacy: 'PUBLIC_TO_EVERYONE', autoAddMusic: true, // TikTok adds trending audio } } });
n8n / Make / Zapier Integration
Searching for "tiktok api upload video n8n" or automation tool integration?
bundle.social's REST API works with any HTTP-capable automation tool:
n8n
- Use an HTTP Request node
- Set method to
POST - URL:
https://api.bundle.social/api/v1/post - Add header:
x-api-key: YOUR_API_KEY - Send the JSON body as shown above
Make (Integromat)
Check our GitHub examples for ready-made Make blueprints for TikTok posting.
TikTok API Price: What Does It Cost?
TikTok's API: Free, but you spend 40-80 hours building it and weeks getting approved.
bundle.social API:
- Free tier available for testing
- Paid plans for production use
- No approval process-start posting immediately
ROI: Skip the weeks of development and maintenance. Focus on your product.
Why Use bundle.social Instead of Direct TikTok API?
| Challenge | Direct TikTok API | bundle.social API |
|---|---|---|
| Setup Time | 40-80 hours | 5 minutes |
| App Approval | 1-4 weeks | Not required |
| OAuth Management | You build it | We handle it |
| Token Refresh | You maintain it | Automatic |
| Status Polling | You implement it | We do it |
| Rate Limits | You handle them | Built-in protection |
| Multi-platform | Separate integrations | One API for 14+ platforms |
Getting Started
- Sign up at bundle.social
- Get your API key from the dashboard
- Connect your TikTok account (one-click OAuth)
- Start posting with our API
Summary
| Topic | Key Takeaway |
|---|---|
| The Problem | TikTok's API requires OAuth, polling, approval, and maintenance |
| The Solution | Use bundle.social's unified API |
| Upload Flow | Upload file → Create post → Done |
| Multi-platform | Post to TikTok + 13 other platforms with one request |
| Time Saved | Skip 40-80 hours of integration work |
Questions about TikTok API automation? Check our TikTok platform docs or DM us. We're here to help.