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

✓ Bring your own X app ✓ 99.92% uptime ✓ Tweets, threads & media

Building an agent instead of an app? The same account works with our X MCP server.

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": ["YOUR_X_ACCOUNT_ID"]
  }'

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. If the paid tier is what is stopping you, we worked out what the X API actually costs per post in 2026.

Paid developer tier, an app, and OAuth 2.0 PKCE setup
The paid tier and the app stay yours - Outstand ships no managed X app. We run the PKCE flow and refresh the tokens.
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": ["YOUR_X_ACCOUNT_ID"],
    "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": ["YOUR_X_ACCOUNT_ID"],
    "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": ["YOUR_X_ACCOUNT_ID"],
    "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": ["YOUR_X_ACCOUNT_ID"], "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

Register an X app once, then every tweet after that is one API call.

1

Register an X app, then connect

X is one of the four networks Outstand ships no managed app for, so you create an app in the X developer portal on the tier you need and add its client ID and secret to Outstand once. After that your user authorizes via OAuth 2.0 and we store and refresh the token.

2

Call POST /v1/posts/

Send text and media with accounts: ["YOUR_X_ACCOUNT_ID"]. 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, 12 platforms

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

Managed Keys or BYOK

X is BYOK-only on Outstand: we ship no managed X app, so you register your own in the X developer portal on whichever access tier you need, and bring its credentials here. The upside is that the app is yours - your brand on the OAuth screen and your own rate limits - and everything after the credentials is handled for you.

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, and you will need your own X app on a paid tier to use X through Outstand. What Outstand removes is everything after that: media upload, token refresh, reply chaining, rate limits, and 11 more networks behind the same endpoints.

Can I post tweets via API?

Yes. Send POST /v1/posts/ with accounts: ["YOUR_X_ACCOUNT_ID"] 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, add your X app credentials once, and post your first tweet. 3,000 posts included, then $0.007/post - dropping to $0.005 at volume.

One API, every network

The same request works on every other platform we support.