X (Twitter) API · post · schedule · analyze

The X (Twitter) API built for developers

Post tweets, threads, images and video to X with one API call — no chunked media upload, no OAuth 2.0 token dance, no reply-chain bookkeeping. We handle the X plumbing so you ship in hours, not weeks.

TweetsThreadsMediaSchedulingAnalytics

✓ 5 minutes to first post ✓ 99.92% uptime ✓ Tweets, threads & media

bash
curl https://api.outstand.so/v1/posts/ \
  -H "Authorization: Bearer $OUTSTAND_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "content": "We just shipped it 🚀",
    "accounts": ["x"]
  }'

Text-only posts a tweet. Add up to 4 images or a video. Use containers[] to post a thread.

X's official API is powerful — and priced for pain

Posting to X means a developer account on a paid tier, an app with OAuth 2.0 PKCE, a separate chunked media-upload flow, and access tokens that expire every two hours. Threads are a manual chain of in_reply_to_tweet_id calls. Outstand turns all of it into a single request.

Paid developer tier, an app, and OAuth 2.0 PKCE setup
Connect once via OAuth — we manage the app and tokens, or bring your own
Media is a separate INIT → APPEND → FINALIZE chunked upload
Pass a media URL; we run the chunked upload and attach the media
Threads are a manual chain of in_reply_to_tweet_id calls
Send a containers[] array; we post the thread in order
OAuth 2.0 access tokens expire every 2 hours
Automatic token refresh — you never see a 401
Strict per-app rate limits and frequent 429s
We queue, throttle and retry — you never see a 429

Everything X supports, through one endpoint

Every content type and capability available on X via Outstand today.

Tweets

Threads

Images (up to 4)

Video & GIFs

PublishingSchedulingAnalyticsMedia handlingComments

Plus alt text on images and reply threading. Polls and direct messages are not exposed via the posting endpoint.

Copy, paste, ship

The same accounts array also fans out to Instagram, LinkedIn, TikTok and more — one request, many platforms.

Post a thread

bash
curl https://api.outstand.so/v1/posts/ \
  -H "Authorization: Bearer $OUTSTAND_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "accounts": ["x"],
    "containers": [
      { "content": "A thread on how we cut p99 latency 60% 🧵" },
      { "content": "1/ First we profiled the hot path…" },
      { "content": "2/ Then we cached the expensive join." }
    ]
  }'

Post with images (up to 4)

bash
curl https://api.outstand.so/v1/posts/ \
  -H "Authorization: Bearer $OUTSTAND_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "content": "Launch day in photos 📸",
    "accounts": ["x"],
    "media": [
      { "url": "https://media.outstand.so/1.jpg", "filename": "1.jpg" },
      { "url": "https://media.outstand.so/2.jpg", "filename": "2.jpg" }
    ]
  }'

Post a video

bash
curl https://api.outstand.so/v1/posts/ \
  -H "Authorization: Bearer $OUTSTAND_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "content": "Demo of the new flow 🎬",
    "accounts": ["x"],
    "media": [{ "url": "https://media.outstand.so/demo.mp4", "filename": "demo.mp4" }]
  }'

Schedule a tweet (up to 30 days out)

bash
curl https://api.outstand.so/v1/posts/ \
  -H "Authorization: Bearer $OUTSTAND_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "content": "Going live Friday ⏰", "accounts": ["x"], "scheduledAt": "2026-07-03T16:00:00Z" }'

Read analytics

bash
curl https://api.outstand.so/v1/posts/{id}/analytics \
  -H "Authorization: Bearer $OUTSTAND_API_KEY"
# → impressions, likes, reposts, replies, quotes, bookmarks, profile_clicks

Read & reply to replies

bash
# Read the comments on a published post
curl "https://api.outstand.so/v1/posts/{id}/replies?network=x" \
  -H "Authorization: Bearer $OUTSTAND_API_KEY"

# Reply to a comment (or comment on your own post)
curl https://api.outstand.so/v1/posts/{id}/replies \
  -H "Authorization: Bearer $OUTSTAND_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "content": "Appreciate it! 🙏", "account_username": "yourbrand" }'

Live in three steps

From signup to your first published tweet in about five minutes.

1

Connect X

Your user authorizes via OAuth 2.0. We store and refresh the token. Use our Managed Keys, or bring your own X app for white-label.

2

Call POST /v1/posts/

Send text and media with accounts: ["x"]. Use containers[] for a thread, or add scheduledAt to schedule.

3

We do the X API work

Chunked media upload, reply chaining, retries and rate-limit handling — returned as a unified response with the published post ID.

More than a X wrapper

One integration that grows with everything you ship next.

One API, 10+ platforms

One request publishes to X and 10 more networks. Same JSON shape everywhere — learn one API, ship them all.

Managed Keys or BYOK

Skip the X developer portal and tier pricing — use our Managed Keys, or bring your own X app for white-label OAuth under your brand.

Built for scale

Intelligent rate limiting, automatic token refresh, webhook events and media processing.

Honest pricing

$19/mo includes 3,000 posts, then from $0.007/post. No seats, no annual lock-in.

What you can build

Same endpoints, same data shapes — pick what you ship.

Social schedulers

Let your users queue and auto-publish X content from your app.

AI agents

Give Claude or GPT a tool to post to X. MCP server included.

Analytics dashboards

Pull X reach and engagement alongside every other platform.

Agencies & white-label

Run X posting for clients under your own brand and app.

X API FAQ

The questions developers ask before they build.

Does X (Twitter) have an official API?

Yes — the X API v2 lets approved apps post tweets, upload media, read metrics and manage replies. Access is tiered and paid. Outstand is a managed layer on top of it, so you skip the setup and tier management.

Can I post tweets via API?

Yes. Send POST /v1/posts/ with accounts: ["x"] and your text. Add up to 4 images or a video in the media array and Outstand uploads and attaches them for you.

Can I post a thread via the API?

Yes. Send a containers[] array — the first container is the root tweet and each following container is posted as a reply, in order, to build the thread.

Can I schedule tweets via the API?

Yes. Add a scheduledAt ISO-8601 timestamp (up to 30 days ahead) and Outstand publishes the tweet automatically — no cron or queue on your side.

What are the X API rate limits?

X applies per-app and per-user rate limits that vary by access tier, and returns 429s when exceeded. Outstand queues and throttles requests under the hood, so you never handle a 429 yourself.

Can I read and reply to replies via the API?

Yes. Read the replies on a post with GET /v1/posts/{id}/replies?network=x and post a reply with POST /v1/posts/{id}/replies.

Can I delete a tweet via the API?

Yes. X supports deleting posts via the API, and Outstand exposes it through DELETE /v1/posts/{id}/remote.

Ship X posting today

Grab an API key and post your first tweet in the next five minutes. 3,000 posts included, then from $0.005/post.