X (Twitter) Upload API Post Videos, Photos & Threads Programmatically
The X (Twitter) upload API without the OAuth headache. One REST endpoint for twitter video upload, photo posts and automatic threads — with scheduling, replies and Communities. URLs are stripped automatically so you are billed X’s $0.015 rate, not $0.200.
import { UploadPost } from 'upload-post';
const uploader = new UploadPost('your-api-key');
await uploader.upload('video.mp4', {
title: 'My tweet with video',
platforms: ['x']
}); X (Twitter) Upload API — Everything Included
A complete twitter uploader to automate your X content
Twitter Video Upload API
Upload videos to X (Twitter) with one REST call. Send a local file or a public video URL and we handle the chunked media upload and tweet creation for you.
Post Photos & Videos to Twitter
Publish native video tweets and image posts programmatically with the same endpoint. Add a title/caption and post to X in seconds.
Automatic Thread Creation
Long text is intelligently split into a natural-looking X thread: paragraphs are grouped up to 280 chars per tweet. Set x_long_text_as_post=true to post as one tweet instead.
Links Stripped → 13× Cheaper
X bills $0.200 per post that contains a URL vs $0.015 without. Upload-Post automatically strips URLs from every tweet so you are billed the $0.015 rate: 13× cheaper, on every X path.
Replies, Communities & Tagging
Reply to a tweet (reply_to_id), post to a Community (community_id), control reply_settings, tag users (tagged_user_ids) and add a first_comment after publishing.
Schedule & Queue
Schedule tweets with scheduled_date (ISO-8601) or drop them into your auto-publishing queue. URL stripping still applies to scheduled and retried X posts.
Upload a Video to X (Twitter) via API
One POST request to /api/upload — send a file or a public URL
curl -X POST https://api.upload-post.com/api/upload \
-H 'Authorization: Apikey your-api-key-here' \
-F 'user=my-profile' \
-F 'platform[]=twitter' \
-F 'video=@/path/to/video.mp4' \
-F 'title=New video out now!' \
-F 'x_long_text_as_post=false' \
-F 'reply_settings=following' {
"success": true,
"results": {
"twitter": {
"success": true,
"url": "https://x.com/i/status/1789...",
"post_id": "1789...",
"video_was_transcoded": true
}
},
"usage": { "count": 12, "limit": 100 }
}
Long uploads switch to background automatically — poll the
Upload Status
endpoint with your request_id. Full reference in the
Upload Video API docs.
Why your X posts cost 13× less
X bills $0.200 for every post that contains a URL, versus
$0.015 for a post without one — 13× more expensive. To keep your
x api post costs low, Upload-Post automatically strips every URL X would turn into a
clickable link — schemed URLs (https://, http://), www. hosts, shorteners
(t.co, bit.ly), bare hostnames with a path and IPs with a path — from the caption, title and
first_comment before sending the tweet.
Stripping runs on every X path: video, photo, text, scheduled and retried posts. Obfuscated forms like
example[.]com or hxxp:// are kept because X does not parse them as links — they
display as plain text and are billed at the normal $0.015 rate.
X (Twitter) API Parameters
The most-used fields for the twitter api upload video endpoint
| Parameter | Type | Required | Description |
|---|---|---|---|
| video | File / URL | Yes | The video file (multipart) or a public video URL to publish to X (Twitter). |
| title / x_title | String | No | The tweet text / caption. x_title overrides the global title for X only. |
| x_long_text_as_post | Boolean | No | true publishes long text as a single post. false (default) creates an automatic thread. |
| reply_settings | String | No | Who can reply: "following", "mentionedUsers", "subscribers" or "verified". |
| reply_to_id | String | No | ID of the tweet to reply to. Creates a reply to the specified tweet. |
| community_id | String | No | Community ID to post into. Pair with share_with_followers to also share with your followers. |
| tagged_user_ids | Array | No | User IDs to tag in the media (max 10 users). |
| first_comment / x_first_comment | String | No | Posted as a reply to the main post (or the last tweet of the thread). URLs are stripped here too. |
| scheduled_date | ISO-8601 | No | Future date/time to schedule the tweet (≤ 365 days ahead). |
See the complete parameter list in the API documentation.
Start Uploading to X in Minutes
Three steps to integrate the X (Twitter) upload API
Create your account
Sign up for Upload-Post and grab your API key from the dashboard.
Connect X (Twitter)
Authorize your X account once: we manage the OAuth and the Twitter API v2 access.
Upload programmatically
POST to /api/upload with platform[]=twitter and your video or photos. Done.
X (Twitter) Upload API — FAQ
Common questions about posting to X (Twitter) programmatically
Is there an API to upload videos to X (Twitter)?
Yes. Upload-Post exposes a Twitter video upload API through a single REST endpoint (POST /api/upload). You send your video file or a public URL with platform[]=twitter and we publish it to the connected X account. You avoid building your own X developer app, OAuth flow and chunked media upload — it is the simplest way to upload video to Twitter via API.
How do I post a video to Twitter via API?
Send a multipart POST request to https://api.upload-post.com/api/upload with your API key in the Authorization header, user (your profile), platform[]=twitter and the video field (a file or a public URL). Add a title for the tweet text. The API returns a per-platform result you can track with the Upload Status endpoint. A working curl and JavaScript example is shown above.
Can I post photos and videos to Twitter, not just video?
Yes. The X (Twitter) upload API supports both video and photo upload. Use this endpoint for video tweets, and the photo upload endpoint to post images to X — both go through the same Upload-Post API with platform[]=twitter.
How does automatic thread creation work?
By default, long text is turned into a natural-looking X thread. Upload-Post groups whole paragraphs into single tweets, filling each up to the 280-character limit instead of splitting at every line break, so the thread reads like a person wrote it. Paragraphs longer than 280 chars are split by line break, then by word as a last resort. For posts with media, all photos/videos attach to the first tweet and the rest are text-only replies. To publish long text as one post instead, set x_long_text_as_post=true.
Why are links removed from my tweets?
X bills $0.200 per post that contains a URL versus $0.015 for a post without — 13× more. To keep your X API costs low, Upload-Post automatically strips every URL X would turn into a clickable link (https://, http://, www. hosts, shorteners like t.co and bit.ly, bare hostnames with a path, and IPs with a path) from the caption, title and first_comment before sending the tweet. Stripping happens on every X path: video, photo, text, scheduled and retried. Obfuscated forms (example[.]com, hxxp://) are kept because X does not parse them as links.
Can I reply to a tweet or post to a Community?
Yes. Set reply_to_id to publish your post as a reply to a specific tweet, and community_id to post into a Community (pair it with share_with_followers to also share with your followers). You can also control reply_settings ("following", "mentionedUsers", "subscribers", "verified"), tag up to 10 users with tagged_user_ids, and add a first_comment that posts as a reply after publishing.
Can I schedule X (Twitter) posts with the API?
Yes. Add a scheduled_date (ISO-8601, up to 365 days in the future) to schedule the tweet, or use add_to_queue to drop it into your next available auto-publishing slot. URL stripping still applies to scheduled and retried X posts.
How much does the X (Twitter) upload API cost?
You can start free with no credit card — create an account, get a key and connect X. Because Upload-Post strips URLs from your tweets, your posts are billed at X’s $0.015 rate instead of $0.200, 13× cheaper. See the pricing page for current plans.
Ready to automate your X (Twitter) uploads?
Start posting videos, photos and threads to X programmatically today. No credit card required.
Create Free AccountPrefer an AI agent? Use the X Claude Code skill or the X MCP server.
This endpoint is part of one social media API that covers 22 networks. See every supported platform or compare it with the alternatives in best social media APIs 2026. Weighing the official X API? See the X API pricing breakdown.