Skip to main content

Upload Video

Upload video to various social media platforms using this endpoint.

Endpoint

POST /api/upload

Headers

NameValueDescription
AuthorizationApikey your-api-key-hereYour API key for authentication

Common Parameters

NameTypeRequiredDescription
userStringYesUser identifier
platform[]ArrayYesPlatform(s) to upload to (e.g., "tiktok", "instagram", "linkedin", "youtube", "facebook", "twitter", "threads", "pinterest")
videoFileYesThe video file to upload (can be a file upload or a video URL)
titleStringYesDefault title of the video
scheduled_dateString (ISO-8601)NoOptional date/time (ISO-8601) to schedule publishing, e.g., "2024-12-31T23:45:00Z". Must be in the future (≤ 365 days). Omit for immediate upload.

Platform-Specific Titles

The title parameter serves as a fallback. To set a custom title for a particular platform, use the optional [platform]_title parameter. If provided, it will override the main title for that platform.

Example Optional Parameters:

  • instagram_title: "Check out my latest reel on Instagram! #reels"
  • facebook_title: "Excited to share this new video with my Facebook friends and family."
  • tiktok_title: "New TikTok video just dropped! 🔥"
  • linkedin_title: "A professional insight on the latest industry trends, discussed in this video."
  • x_title: "New video out now! 📢"
  • youtube_title: "My new YouTube video is live!"
  • pinterest_title: "An inspiring video pin."

Platform-Specific Parameters

TikTok

For more information about Tiktok API parameters, visit the Tiktok API documentation.

NameTypeRequiredDescriptionDefault
tiktok_titleStringNoSpecific title for the TikTok post. Fallbacks to title.title
privacy_levelStringNoPrivacy setting ("PUBLIC_TO_EVERYONE", "MUTUAL_FOLLOW_FRIENDS", "FOLLOWER_OF_CREATOR", "SELF_ONLY")"PUBLIC_TO_EVERYONE"
disable_duetBooleanNoDisable duet featurefalse
disable_commentBooleanNoDisable commentsfalse
disable_stitchBooleanNoDisable stitch featurefalse
cover_timestampIntegerNoTimestamp in milliseconds for video cover1000
brand_content_toggleBooleanNoEnable branded contentfalse
brand_organicBooleanNoEnable organic branded contentfalse
branded_contentBooleanNoEnable branded content with disclosurefalse
brand_organic_toggleBooleanNoEnable organic branded content togglefalse
is_aigcBooleanNoIndicates if content is AI-generatedfalse

Instagram

For more information about Instagram API parameters, visit the Instagram Graph API documentation.

NameTypeRequiredDescriptionDefault
instagram_titleStringNoSpecific title for the Instagram post. Fallbacks to title.title
media_typeStringNoType of media ("REELS" or "STORIES")"REELS"
share_to_feedBooleanNoWhether to share to feedtrue
collaboratorsStringNoComma-separated list of collaborator usernames-
cover_urlStringNoURL for custom video cover-
audio_nameStringNoName of the audio track-
user_tagsStringNoComma-separated list of user tags-
location_idStringNoInstagram location ID-
thumb_offsetStringNoTimestamp offset for video thumbnail-

LinkedIn

For more information about LinkedIn API parameters, visit the LinkedIn Marketing API documentation.

NameTypeRequiredDescriptionDefault
linkedin_titleStringNoSpecific title for the LinkedIn post. Fallbacks to title.title
descriptionStringNoThe user generated commentary for the postTitle param
visibilityStringYesVisibility setting ("CONNECTIONS", "PUBLIC", "LOGGED_IN", "CONTAINER")"PUBLIC"
target_linkedin_page_idStringNoLinkedIn page ID to upload videos to an organization"107579166"

YouTube

For more information about YouTube API parameters, visit the YouTube Data API documentation.

NameTypeRequiredDescriptionDefault
youtube_titleStringNoSpecific title for the YouTube video. Fallbacks to title.title
descriptionStringNoDescription of the videoTitle param
tagsArrayNoArray of tags[]
categoryIdStringNoVideo category"22"
privacyStatusStringNoPrivacy setting ("public", "unlisted", "private")"public"
embeddableBooleanNoWhether video is embeddabletrue
licenseStringNoVideo license ("youtube", "creativeCommon")"youtube"
publicStatsViewableBooleanNoWhether public stats are viewabletrue
madeForKidsBooleanNoWhether video is made for kidsfalse
thumbnailFileNoCustom thumbnail image to set after upload. Accepts a multipart image file or a public URL. Formats: JPG/PNG/GIF/BMP. Max 2 MB. If both thumbnail (file) and thumbnail_url are provided, the file takes precedence.-
thumbnail_urlString (URL)NoAlternative to provide the thumbnail as a public URL.-

Facebook

For more information about Facebook API parameters, visit the Facebook Graph API documentation.

NameTypeRequiredDescriptionDefault
facebook_titleStringNoSpecific title for the Facebook post. Fallbacks to title.title
facebook_page_idStringYesFacebook Page ID where the video will be posted-
facebook_media_typeStringNoType of media ("REELS" or "STORIES")"REELS"
descriptionStringNoDescription of the videoTitle param
video_stateStringNoDesired state of the video ("DRAFT", "PUBLISHED", "SCHEDULED")"PUBLISHED"

Threads

For more information about Threads API parameters, visit the Threads API documentation.

NameTypeRequiredDescriptionDefault
threads_titleStringNoSpecific title for the Threads post. Fallbacks to title.title
descriptionStringNoThe user generated commentary for the postTitle param

X (Twitter)

For more information about X API parameters, visit the X API Post Creation documentation.

NameTypeRequiredDescriptionDefault
x_titleStringNoSpecific title for the tweet. Fallbacks to title.title
x_long_text_as_postBooleanNoWhen true, publishes long text as a single post. Otherwise, creates a thread.false
tagged_user_idsArrayNoArray of user IDs to tag[]
reply_settingsStringNoWho can reply ("following", "mentionedUsers", "everyone")"following"
nullcastBooleanNoWhether to publish without broadcastingfalse
place_idStringNoLocation place ID-
poll_durationIntegerNoPoll duration in minutes1440
poll_optionsArrayNoArray of poll options[]
poll_reply_settingsStringNoWho can reply to poll ("following", "mentionedUsers", "everyone")"following"

How X (Twitter) Thread Creation Works (Advanced Logic)

Note: The following describes the default thread creation logic. To override this and post long text as a single post, set the x_long_text_as_post parameter to true.

The system is engineered to create well-formatted, natural-looking threads on X (formerly Twitter). Instead of simply splitting text at every line break, it intelligently groups paragraphs to create more readable tweets.

Here's the step-by-step logic:

Intelligent Paragraph Grouping (Primary Method):

The function first identifies distinct paragraphs (any text separated by a blank line). It then combines as many of these paragraphs as possible into a single tweet, filling it up to the 280-character limit without exceeding it. The double newline (\n\n) between combined paragraphs is preserved for formatting. This results in fewer, more substantial tweets that flow naturally, just as if a person had written them.

Handling Exceptionally Long Paragraphs:

If a single paragraph is, by itself, longer than the 280-character limit, a more granular splitting logic is automatically triggered for that paragraph only:

  • Split by Line Break: The system first attempts to break the paragraph down by its individual line breaks (\n).
  • Split by Word: If any of those single lines are still too long, it will split them by words as a final resort.

Media Attachment:

For posts that include photos or videos, all media is attached only to the first tweet of the thread. The subsequent tweets in the thread will be text-only replies.

Pinterest

NameTypeRequiredDescriptionDefault
pinterest_titleStringNoSpecific title for the Pinterest Pin. Fallbacks to title.title
pinterest_board_idStringYesPinterest board ID to publish the video to.-
pinterest_linkStringNoDestination link for the video Pin.-
pinterest_cover_image_urlStringNoURL of an image to use as the video cover.-
pinterest_cover_image_content_typeStringNoContent type of the cover image (e.g., image/jpeg, image/png), used if pinterest_cover_image_data is provided.-
pinterest_cover_image_dataStringNoBase64 encoded cover image data, used if pinterest_cover_image_content_type is provided.-
pinterest_cover_image_key_frame_timeIntegerNoTime in milliseconds of the video frame to use as cover.-

Example Requests

Upload a Video to TikTok

curl \
-H 'Authorization: Apikey your-api-key-here' \
-F 'video=@/path/to/your/video.mp4' \
-F 'title="Your Video Title"' \
-F 'description="Your video description"' \
-F 'user="test"' \
-F 'platform[]=tiktok' \
-X POST https://api.upload-post.com/api/upload

Upload a Video to YouTube Using URL

curl \
-H 'Authorization: Apikey your-api-key-here' \
-F 'video="https://example.com/videos/myvideo.mp4"' \
-F 'title="Your Video Title"' \
-F 'description="Your video description"' \
-F 'user="test"' \
-F 'platform[]=youtube' \
-F 'tags[]=tutorial' \
-F 'tags[]=howto' \
-F 'categoryId="22"' \
-X POST https://api.upload-post.com/api/upload

Upload a Video to YouTube With Custom Thumbnail

curl \
-H 'Authorization: Apikey your-api-key-here' \
-F 'video=@/path/to/your/video.mp4' \
-F 'title="Your Video Title"' \
-F 'description="Your video description"' \
-F 'user="test"' \
-F 'platform[]=youtube' \
-F 'thumbnail_url="https://example.com/images/thumbnail-1280x720.jpg"' \
-X POST https://api.upload-post.com/api/upload

Upload to YouTube with thumbnail file

curl -X POST https://api.upload-post.com/api/upload \
-H "Authorization: Apikey <API_KEY>" \
-F "user=<profile_username>" \
-F "platform[]=youtube" \
-F "title=Demo video" \
-F "description=Description" \
-F "video=@/path/video.mp4;type=video/mp4" \
-F "thumbnail=@/path/thumbnail.jpg;type=image/jpeg"