Upload Video
Upload video to various social media platforms using this endpoint.
Endpoint
POST /api/upload
Headers
Name | Value | Description |
---|---|---|
Authorization | Apikey your-api-key-here | Your API key for authentication |
Common Parameters
Name | Type | Required | Description |
---|---|---|---|
user | String | Yes | User identifier |
platform[] | Array | Yes | Platform(s) to upload to (e.g., "tiktok", "instagram", "linkedin", "youtube", "facebook", "twitter", "threads", "pinterest") |
video | File | Yes | The video file to upload (can be a file upload or a video URL) |
title | String | Yes | Default title of the video |
scheduled_date | String (ISO-8601) | No | Optional 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.
Name | Type | Required | Description | Default |
---|---|---|---|---|
tiktok_title | String | No | Specific title for the TikTok post. Fallbacks to title . | title |
privacy_level | String | No | Privacy setting ("PUBLIC_TO_EVERYONE", "MUTUAL_FOLLOW_FRIENDS", "FOLLOWER_OF_CREATOR", "SELF_ONLY") | "PUBLIC_TO_EVERYONE" |
disable_duet | Boolean | No | Disable duet feature | false |
disable_comment | Boolean | No | Disable comments | false |
disable_stitch | Boolean | No | Disable stitch feature | false |
cover_timestamp | Integer | No | Timestamp in milliseconds for video cover | 1000 |
brand_content_toggle | Boolean | No | Enable branded content | false |
brand_organic | Boolean | No | Enable organic branded content | false |
branded_content | Boolean | No | Enable branded content with disclosure | false |
brand_organic_toggle | Boolean | No | Enable organic branded content toggle | false |
is_aigc | Boolean | No | Indicates if content is AI-generated | false |
Instagram
For more information about Instagram API parameters, visit the Instagram Graph API documentation.
Name | Type | Required | Description | Default |
---|---|---|---|---|
instagram_title | String | No | Specific title for the Instagram post. Fallbacks to title . | title |
media_type | String | No | Type of media ("REELS" or "STORIES") | "REELS" |
share_to_feed | Boolean | No | Whether to share to feed | true |
collaborators | String | No | Comma-separated list of collaborator usernames | - |
cover_url | String | No | URL for custom video cover | - |
audio_name | String | No | Name of the audio track | - |
user_tags | String | No | Comma-separated list of user tags | - |
location_id | String | No | Instagram location ID | - |
thumb_offset | String | No | Timestamp offset for video thumbnail | - |
LinkedIn
For more information about LinkedIn API parameters, visit the LinkedIn Marketing API documentation.
Name | Type | Required | Description | Default |
---|---|---|---|---|
linkedin_title | String | No | Specific title for the LinkedIn post. Fallbacks to title . | title |
description | String | No | The user generated commentary for the post | Title param |
visibility | String | Yes | Visibility setting ("CONNECTIONS", "PUBLIC", "LOGGED_IN", "CONTAINER") | "PUBLIC" |
target_linkedin_page_id | String | No | LinkedIn page ID to upload videos to an organization | "107579166" |
YouTube
For more information about YouTube API parameters, visit the YouTube Data API documentation.
Name | Type | Required | Description | Default |
---|---|---|---|---|
youtube_title | String | No | Specific title for the YouTube video. Fallbacks to title . | title |
description | String | No | Description of the video | Title param |
tags | Array | No | Array of tags | [] |
categoryId | String | No | Video category | "22" |
privacyStatus | String | No | Privacy setting ("public", "unlisted", "private") | "public" |
embeddable | Boolean | No | Whether video is embeddable | true |
license | String | No | Video license ("youtube", "creativeCommon") | "youtube" |
publicStatsViewable | Boolean | No | Whether public stats are viewable | true |
madeForKids | Boolean | No | Whether video is made for kids | false |
thumbnail | File | No | Custom 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_url | String (URL) | No | Alternative to provide the thumbnail as a public URL. | - |
Facebook
For more information about Facebook API parameters, visit the Facebook Graph API documentation.
Name | Type | Required | Description | Default |
---|---|---|---|---|
facebook_title | String | No | Specific title for the Facebook post. Fallbacks to title . | title |
facebook_page_id | String | Yes | Facebook Page ID where the video will be posted | - |
facebook_media_type | String | No | Type of media ("REELS" or "STORIES") | "REELS" |
description | String | No | Description of the video | Title param |
video_state | String | No | Desired state of the video ("DRAFT", "PUBLISHED", "SCHEDULED") | "PUBLISHED" |
Threads
For more information about Threads API parameters, visit the Threads API documentation.
Name | Type | Required | Description | Default |
---|---|---|---|---|
threads_title | String | No | Specific title for the Threads post. Fallbacks to title . | title |
description | String | No | The user generated commentary for the post | Title param |
X (Twitter)
For more information about X API parameters, visit the X API Post Creation documentation.
Name | Type | Required | Description | Default |
---|---|---|---|---|
x_title | String | No | Specific title for the tweet. Fallbacks to title . | title |
x_long_text_as_post | Boolean | No | When true , publishes long text as a single post. Otherwise, creates a thread. | false |
tagged_user_ids | Array | No | Array of user IDs to tag | [] |
reply_settings | String | No | Who can reply ("following", "mentionedUsers", "everyone") | "following" |
nullcast | Boolean | No | Whether to publish without broadcasting | false |
place_id | String | No | Location place ID | - |
poll_duration | Integer | No | Poll duration in minutes | 1440 |
poll_options | Array | No | Array of poll options | [] |
poll_reply_settings | String | No | Who 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
Name | Type | Required | Description | Default |
---|---|---|---|---|
pinterest_title | String | No | Specific title for the Pinterest Pin. Fallbacks to title . | title |
pinterest_board_id | String | Yes | Pinterest board ID to publish the video to. | - |
pinterest_link | String | No | Destination link for the video Pin. | - |
pinterest_cover_image_url | String | No | URL of an image to use as the video cover. | - |
pinterest_cover_image_content_type | String | No | Content type of the cover image (e.g., image/jpeg, image/png), used if pinterest_cover_image_data is provided. | - |
pinterest_cover_image_data | String | No | Base64 encoded cover image data, used if pinterest_cover_image_content_type is provided. | - |
pinterest_cover_image_key_frame_time | Integer | No | Time 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"