Skip to Content

TikTok Upload API

This section details how to upload videos and photos (carousels) to TikTok using the API.

Base URL

https://api.multi-upload-tool.com/api/v1

Authentication

All requests require an API Token in the header: x-api-key: YOUR_API_TOKEN


Requirements

TikTok Video Requirements

  • Supported Formats: MP4 (recommended), WebM, MOV
  • Supported Codecs: H.264 (recommended), H.265, VP8
  • Framerate: Minimum: 23 FPS, Maximum: 60 FPS
  • Picture Size: Minimum: 360 pixels (height and width), Maximum: 4096 pixels (height and width)
  • Duration: Maximum via API: 10 minutes. (Note: All TikTok creators can post 3-minute videos. Some creators have access to 5-minute or 10-minute videos. Users may trim videos in the TikTok app.)
  • Size: Maximum: 4GB

TikTok Photo Requirements

  • Formats: JPG, JPEG, WEBP.
  • Aspect Ratio: 9:16 required. Images that don’t match this ratio are automatically padded/resized to 1080x1920 pixels.
  • Max Images: Up to 35 images per carousel.

Validation & Limits

The following limits are enforced by our API:

ConstraintLimitNotes
Video file size4 GBEnforced by API. Files over 100 MB must use presigned uploads — a single request is capped at 100 MB by our edge.
Image file size20 MB per imageEnforced by API
Video caption/description2,200 charactersMax character length enforced
Photo title90 UTF-16 runesMax title length for carousel; longer values truncated
Photo caption/description2,200 charactersMax character length enforced
Photo carouselUp to 35 imagesPer TikTok API specification
Privacy levelsPUBLIC_TO_EVERYONE, MUTUAL_FOLLOW_FRIENDS, FOLLOWER_OF_CREATOR, SELF_ONLYIf requested level unavailable for creator account, falls back to SELF_ONLY
Caption requirementNon-emptyBoth video and photo posts require at least one non-whitespace character in caption

Recommended by TikTok (not enforced by us):

  • Video aspect ratio: 9:16 (vertical) is optimal; 16:9 or 1:1 supported
  • Video minimum duration: 3 seconds
  • Photo aspect ratio: 9:16 required by TikTok (auto-padded to 1080×1920 if needed)

Source: TikTok Content Posting API — Media Transfer Guide 


Upload Video

Upload a single video file to TikTok.

Endpoint

POST /upload

Content-Type

multipart/form-data

Parameters

Query Parameters

ParameterTypeRequiredDescription
asyncstringNoDefault "true". If "false", the API waits for upload completion. Passed as a query string value.

Body Parameters

ParameterTypeRequiredDescription
accountIdstringYesThe ID of the connected TikTok account.
videoFileYesThe video file (MP4, WebM).
titlestringYes*The caption of the post. *A title, description or caption is required.
descriptionstringNoFor a video, takes precedence over title as the caption. For a photo carousel, the post description (title is the carousel title).
schedule_datestringNoISO 8601 date string to schedule the post (e.g., 2025-12-25T10:00:00Z). Must be in the future and within 6 months.
privacy_levelstringNoPUBLIC_TO_EVERYONE (default), MUTUAL_FOLLOW_FRIENDS, FOLLOWER_OF_CREATOR, SELF_ONLY. If the requested level is not available for the creator, falls back to SELF_ONLY.
disable_commentboolean | stringNoDisable comments on the post. Accepts true/false or "true"/"false".
disable_duetboolean | stringNoDisable Duet feature.
disable_stitchboolean | stringNoDisable Stitch feature.
brand_content_toggleboolean | stringNoMark as branded content.
brand_organic_toggleboolean | stringNoMark as organic branded content.
is_aigcboolean | stringNoMark as AI-Generated Content (AIGC).
video_cover_timestamp_msnumberNoTimestamp (in ms) for the video cover image.
post_modestringNoDIRECT_POST (default) or MEDIA_UPLOAD: the video goes to the creator’s TikTok inbox instead of being published, and they finish the post in the app. TikTok allows at most 5 pending inbox posts per 24 hours.

Example Request

curl -X POST https://api.multi-upload-tool.com/api/v1/upload \ -H "x-api-key: YOUR_API_TOKEN" \ -F "accountId=cmf3k9x2a0001l408q7vbn2hd" \ -F "video=@/path/to/video.mp4" \ -F "title=My amazing video #tiktok" \ -F "privacy_level=PUBLIC_TO_EVERYONE" \ -F "is_aigc=false"

Example Response

{ "success": true, "message": "Upload queued successfully", "data": { "uploadId": 456, "status": "pending", "scheduledFor": null } }

Scheduled post: If schedule_date is provided, status will be "scheduled" and scheduledFor will contain the ISO date.


Upload multiple photos to create a TikTok carousel.

Endpoint

POST /upload

Content-Type

multipart/form-data

Parameters

Query Parameters

ParameterTypeRequiredDescription
asyncstringNoDefault "true". If "false", the API waits for upload completion.

Body Parameters

ParameterTypeRequiredDescription
accountIdstringYesThe ID of the connected TikTok account.
photoFile[]YesArray of image files (JPG, JPEG, WEBP). Images are automatically padded to 9:16 (1080x1920).
titlestringYesThe caption of the post.
descriptionstringNoAdditional description.
schedule_datestringNoISO 8601 date string to schedule the post. Must be in the future and within 6 months.
privacy_levelstringNoPUBLIC_TO_EVERYONE (default), MUTUAL_FOLLOW_FRIENDS, FOLLOWER_OF_CREATOR, SELF_ONLY.
disable_commentbooleanNoDisable comments on the post.
auto_add_musicbooleanNoAutomatically add music to the carousel.
photo_cover_indexnumberNoIndex of the image to be used as cover (1-based).
post_modestringNoDIRECT_POST (default) or MEDIA_UPLOAD: the photos go to the creator’s TikTok inbox instead of being published, and they finish the post in the app.

Example Request

curl -X POST https://api.multi-upload-tool.com/api/v1/upload \ -H "x-api-key: YOUR_API_TOKEN" \ -F "accountId=cmf3k9x2a0001l408q7vbn2hd" \ -F "photo=@/path/to/photo1.jpg" \ -F "photo=@/path/to/photo2.jpg" \ -F "title=My photo dump 📸" \ -F "auto_add_music=true"

Example Response

{ "success": true, "message": "Upload queued successfully", "data": { "uploadId": 457, "status": "pending", "jobId": "job_790" } }

Check Upload Status

Check the status of a queued or completed upload. See the Posts API for details on listing and filtering uploads.