# X (Twitter) API Pricing 2026: What Posting Costs

> X now sells its API as pay per use credits. A post costs $0.015, or $0.20 with a link. Prices, rate limits, access steps and what breaks, checked November 2026.

Author: Socialync Team | Published: 2026-11-13 | Source: https://www.socialync.io/blog/x-api-pricing-and-posting-2026

---

X sells its API on a pay per use basis. You buy credits, and each call spends some of them. Creating a post costs **$0.015**. Creating a post that contains a URL costs **$0.200**. There are no subscriptions on the pricing page we read.

That is the whole answer for most people searching "twitter api pricing". The rest of this page covers what else costs money, the rate limits on posting, how to get access, and the failures we hit sending posts to X for Socialync users.

Every price and limit below comes from X's own documentation, checked on 9 November 2026. X says prices can change, so confirm the rate in the [Developer Console](https://console.x.com) before you build a budget on it.

## What the X API costs in 2026

You may find older guides that list Free, Basic and Pro subscriptions. The [X API pay-per-usage pricing page](https://docs.x.com/x-api/getting-started/pricing) we read describes none of them. It says: "The X API uses pay-per-usage pricing. No subscriptions."

Here is how it works:

- You **buy credits up front** in the Developer Console.
- Credits are **deducted as you make requests**.
- Each endpoint has its own price.
- There is no contract and no minimum spend.

The prices that matter if you post:

| Action | Price |
|---|---|
| Post: Create | $0.015 per request |
| Post: Create (with URL) | $0.200 per request |
| Post: Create (summoned) | $0.010 per request |
| Media Metadata | $0.005 per request |
| Post: Read | $0.005 per resource |
| User: Read | $0.010 per resource |
| Owned reads (your own posts, followers, mentions) | $0.001 per resource |

The pricing page does not list a price for the media upload endpoints themselves. If you post video, check the console before you assume media is free.

### What posting costs in dollars

The link price is the number to watch. A post with a URL costs about 13 times a plain one.

| Posts a month | Plain | Every post has a URL |
|---|---|---|
| 90 (three a day) | $1.35 | $18 |
| 300 (ten a day) | $4.50 | $60 |
| 1,000 | $15 | $200 |

If you post links, put the cost in your model before you ship. You can also put the link in a reply. [Links in captions versus first comment](https://www.socialync.io/blog/links-in-captions-vs-first-comment-2026) covers the reach side of that choice. The API docs do not say how a reply with a link is priced, so test it with a small balance first.

### Free credits

New accounts that pay can earn credits. X's [free credit page](https://docs.x.com/x-api/getting-started/free-credits) lists two one time incentives:

- **$20** after an account with its first eligible card completes its first credit purchase.
- A match of your first auto recharge, **up to $50**.

That is up to $70 in total. These credits expire 3 months after X grants them. Prepaid cards do not qualify, and X says the incentives are still rolling out. Do not plan a product around them.

You will not find a permanent free tier on the pages we read. If an older tutorial says you can post for free every month, check it against the pricing page first.

### How credits behave

The pricing page spells out four things that catch people:

- A balance can go **slightly negative**. Requests are then blocked until you add credits to cover it.
- **Auto recharge** triggers when your balance drops below a threshold you set. It fires at most once every 5 minutes and pauses at zero or negative balance.
- You can set a **spending limit** per billing cycle. When you reach it, requests are blocked until the next cycle.
- Reads are **deduplicated** over a 24 hour UTC window. Writes are charged per request.

When your credits run out, X answers HTTP 402. Every post from every user of your app fails until someone tops up. We have seen this on our own X developer account, and it is the one failure on this page you control completely. Set auto recharge higher than five minutes of your peak spend.

## How to get access

Access takes a few minutes. X's [getting access page](https://docs.x.com/x-api/getting-started/getting-access) lists three steps:

1. Sign in at console.x.com with an X account, accept the Developer Agreement and describe how you will use the API.
2. Create an app. The console generates your credentials.
3. Save the credentials. They are shown once.

For posting on behalf of other people, use **OAuth 2.0 with user context**. X recommends it over OAuth 1.0a because it has fine grained scopes. The scopes Socialync requests for posting with media are `tweet.read`, `tweet.write`, `users.read`, `media.write` and `offline.access`. Without `offline.access` you get no refresh token, and the user has to sign in again when the access token expires.

## X API rate limits for posting

X's [rate limit page](https://docs.x.com/x-api/fundamentals/rate-limits) lists limits per endpoint. For posting:

| Endpoint | Per app | Per user |
|---|---|---|
| POST /2/tweets | 10,000 per 24 hours | 100 per 15 minutes |
| DELETE /2/tweets/:id | none listed | 50 per 15 minutes |
| POST /2/media/upload/initialize | 180,000 per 24 hours | 1,875 per 15 minutes |
| POST /2/media/upload/:id/append | 180,000 per 24 hours | 1,875 per 15 minutes |
| POST /2/media/upload/:id/finalize | 180,000 per 24 hours | 1,875 per 15 minutes |

X applies per user limits to user tokens and per app limits to app only Bearer tokens. Exceeding a limit returns a 429 until the window resets. Read the `x-rate-limit-remaining` and `x-rate-limit-reset` headers on each response instead of guessing.

For a normal posting workload 100 posts per user per 15 minutes is far above what one account sends. Plan for content rules and credits first.

## How X counts characters

A post can hold 280 characters, but X counts by weight. The [counting characters page](https://docs.x.com/fundamentals/counting-characters) gives the rules:

- Latin letters, punctuation and common symbols weigh **1**.
- Emojis weigh **2**, however complex the sequence.
- CJK characters and other Unicode weigh **2**.
- Every URL weighs **23**, whatever its real length.
- Text is normalized to NFC before counting.

X publishes the open source `twitter-text` library for this. Use it. Counting `.length` in JavaScript gives you the wrong answer for any caption with an emoji, a bullet or a link.

## What breaks when you post to X

This section is what we know from running the X integration for Socialync users. Nothing here is theory.

### A post under 280 that X rejects

Socialync once counted characters by code point. A 277 character caption with bullet points and one emoji weighs 281 on X, and X answered 403 "You are not permitted to perform this action". That error text says nothing about length. 37 posts from 9 accounts failed this way in 15 days to 6 October 2026, and every one of those accounts posted fine when the text was shorter.

We now count the way X does. A later miss came from a `linktr.ee` link, which our count did not treat as a link, so a caption that read 280 to us was 285 to X.

### A bare domain in the text

X turns anything shaped like a domain into a link. Some of them it refuses. The answer is a 400 whose `detail` is always the same sentence, "One or more parameters to your request was invalid." The real reason sits one level down in `errors[].message`: "The Tweet contains an invalid URL."

If your code reads only `detail`, you will tell users nothing useful. One account failed six times in a week on a bare "yourbusiness.com" in its caption before we surfaced the nested message.

### A success with no post ID

Once, X answered with a 2xx and no post ID. The post was live. Our retry then hit X's duplicate content refusal, and the post showed as failed while the tweet sat on the account. Treat a 2xx without an ID as "probably published" and check the account before you retry.

### Video over two minutes

X refuses long video with a 403 for accounts without the matching entitlement. X's docs and developer forum threads say the `tweet_video` category caps at 140 seconds. In a live test in July 2026, a 150 second video posted through `tweet_video` and returned 201. The cap appeared to follow the account's X Premium status. We did not switch long video to `amplify_video`, because that category has reported processing failures. Test with a real account before you promise anyone a length.

### Media chunks

Video and large images go through the v2 upload flow: initialize, append in chunks, finalize, then poll until processing succeeds. X's append endpoint rejected 8 MB chunks with HTTP 413 in our test on 11 April 2026. 4 MB chunks work. The real limit is not in the docs, so treat 4 MB as the tested value.

## Build against X directly, or not

Building direct makes sense when X is the only platform you post to and you want full control. You need an app, OAuth 2.0 with refresh handling, a credit balance with auto recharge, weighted character counting, chunked media upload, and error handling for the cases above.

If you post to X as one of several platforms, the work repeats for every platform. [How to schedule tweets on X](https://www.socialync.io/blog/how-to-schedule-tweets) covers the no code route, and the [X Articles guide](https://www.socialync.io/blog/x-twitter-articles-strategy-2026) covers long form.

## Posting to X through Socialync

Socialync connects your X account once and posts to X alongside TikTok, Instagram, YouTube, Facebook, LinkedIn, Threads, Bluesky and Pinterest. It pays X's per call price, so X needs a paid plan. Plans start at $20 a month for 5 connected accounts. Socialync caps immediate posts to X at 10 a day per connected account, which the [limits page](https://www.socialync.io/limits) explains.

You can also drive it from an AI assistant. Socialync runs an MCP server at https://mcp.socialync.io/mcp, included on every plan. See the [MCP server page](https://www.socialync.io/features/mcp) and the [recipes](https://www.socialync.io/recipes) for prompts you can paste into Claude or ChatGPT. You can also call Socialync from code. The [Socialync API](https://www.socialync.io/developers/api) publishes, schedules and drafts posts to X and the other networks with one API key, and it is included on every plan. X needs a paid plan.

[Start free at socialync.io](https://www.socialync.io/signup). The free plan gives you 5 posts a month with no card.

## X API pricing FAQ

### How much does the X API cost?

X uses pay per use credits. Creating a post costs $0.015 and creating a post with a URL costs $0.200. Reading a post costs $0.005 per resource. There are no subscriptions on the pricing page we read on 9 November 2026.

### Is there a free X API tier?

The pages we read describe no permanent free tier. They describe a one time $20 credit for new accounts that buy credits and a match of your first auto recharge up to $50. Those credits expire after 3 months.

### How much does it cost to post a tweet through the API?

$0.015 for a plain post, $0.200 for a post with a URL, according to X's pricing page. Ten plain posts a day for a month costs $4.50.

### What are the X API rate limits for posting?

POST /2/tweets allows 100 requests per 15 minutes per user and 10,000 per 24 hours per app. Exceeding a limit returns a 429 until the window resets.

### Can I post to X from an AI assistant?

Yes. Socialync's MCP server posts to X from Claude, ChatGPT and other MCP clients. X needs a paid Socialync plan, and every post is approved by you in chat first.
