X API Pricing Tiers and What You Actually Get (Free, Basic, Pro, Enterprise)
X API Pricing Tiers and What You Actually Get (Free, Basic, Pro, Enterprise)
You want the numbers, not the marketing. Here are the quotas, caps, and limits the X API actually enforces, straight from the official docs. I am not guessing. I am not hand-waving. Read the tables.
Core self-serve tiers (Free / Basic / Pro)
| Tier | Price (monthly) | Price (annual billing) | App IDs | Monthly reads (app-level) | Monthly posts (user-level) | Monthly posts (app-level) | Top-ups |
|---|---|---|---|---|---|---|---|
| Free | $0 | - | 1 | 100 | 500 | 500 | - |
| Basic | $200 | $175/mo (= $2,100/yr) | 2 | 15,000 | 3,000 | 50,000 | 2 |
| Pro | $5,000 | $4,500/mo (= $54,000/yr) | 3 | 1,000,000 | 288,000 | 300,000 | 2 |
Source: X Developer Platform pricing page. (X Developer)
Enterprise
| Tier | Publicly stated starting price | Monthly Post cap (consumption) | Notes |
|---|---|---|---|
| Enterprise | "starts at $50,000 / Month" | 50+ million Posts/month | Enterprise is positioned as "monthly subscription tiers" plus sales contact; detailed quotas/prices are negotiated. |
Sources: Enterprise interest form plus Post cap volumes. (X Developer)
Projects, Apps, Environments: limits that people miss
| Concept | Free | Basic | Pro | Notes |
|---|---|---|---|---|
| Apps per Project | 1 | up to 2 | up to 3 | Each Project can include 1/2/3 Apps depending on plan. (X Developer Platform) |
| Projects | (often 1 for self-serve) | (often 1 for self-serve) | (often 1 for self-serve) | The docs describe plan limits around 1 Project plus multiple Apps; details are in the developer portal/docs. (X Developer) |
| Environments | 1 | unique env per App (e.g., Dev/Prod/Staging) | unique env per App (e.g., Dev/Prod/Staging) | Mentioned in platform documentation for app setup/plan structure. (X Developer) |
Monthly Post cap (read consumption) and what counts toward it
This is the "you pulled too much content" limiter. It applies at the Project level, so all Apps in the Project share it. (X Developer Platform)
Post cap volumes by access tier
| Access tier | Monthly Post cap |
|---|---|
| Free | 100 Posts/month |
| Basic | 15,000 Posts/month |
| Pro | 1,000,000 Posts/month |
| Enterprise | 50+ million Posts/month |
Source: Post caps page. (X Developer Platform)
Endpoints that count toward the Post cap (the "limited v2 endpoints" list)
Posts returned from these categories count toward the cap:
- Posts lookup
- Recent search
- Full-archive search
- Filtered stream
- User timelines
- Likes, bookmarks, and list posts lookups
- Spaces lookup
Also: the cap is deduplicated daily. The same Post returned multiple times in a day counts once. (X Developer Platform)
Feature/access differences that affect pricing decisions
Full-archive search (historic back to 2006) is not for Basic/Free
The docs explicitly say full-archive search is Pro and Enterprise only. (X Developer Platform)
Access-level notes (v2 vs v1.1, streams)
X documents that v2 endpoints exist across tiers, with limited v1.1 for self-serve, and streaming/full-archive features tied to higher tiers. (X Developer Platform)
Hard limits on actions (separate from monthly posting caps)
These are app-level action ceilings (v1.1 plus v2 combined), independent of your monthly posting allotment:
| Action | Limit (app-level) | Window |
|---|---|---|
| Posts + reposts (combined) | 300 | per 3 hours |
| Likes | 1,000 | per 24 hours |
| Follows | 1,000 | per 24 hours |
| Direct Messages | 15,000 | per 24 hours |
Source: X API v2 support page. (X Developer)
Request rate limits by endpoint (Free / Basic / Pro)
Notation:
- U = per user
- A = per app
- Time windows: 15m, 24h, 1s (per second)
These are from X's Rate limits table for paid plans. (X Developer Platform)
Posts: write actions and interactions
| Endpoint | Pro | Basic | Free |
|---|---|---|---|
POST /2/tweets |
100/15m U; 10,000/24h A | 100/24h U; 1,667/24h A | 17/24h U; 17/24h A |
DELETE /2/tweets/:id |
50/15m U | 5/15m U | 17/24h U; 17/24h A |
PUT /2/tweets/:tweet_id/hidden |
50/15m U | 5/15m U | 1/15m U |
POST /2/users/:id/likes |
1,000/24h U | 200/24h U | 1/15m U |
DELETE /2/users/:id/likes/:tweet_id |
50/15m U | 5/15m U | 17/24h U |
POST /2/users/:id/retweets |
50/15m U | 5/15m U | 1/15m U |
DELETE /2/users/:id/retweets/:tweet_id |
50/15m U | 5/15m U | 1/15m U |
Source: Rate limits table (Posts/manage/likes/retweets/hide). (X Developer Platform)
Posts: lookup, timelines, counts, search, stream
| Endpoint | Pro | Basic | Free |
|---|---|---|---|
GET /2/tweets |
900/15m U; 450/15m A | 15/15m U; 15/15m A | 1/15m U; 1/15m A |
GET /2/tweets/:id |
900/15m U; 450/15m A | 15/15m U; 15/15m A | 1/15m U; 1/15m A |
GET /2/tweets/:id/liking_users |
75/15m U; 75/15m A | 5/15m U; 25/15m A | 1/15m U; 1/15m A |
GET /2/tweets/:id/quote_tweets |
75/15m U; 75/15m A | 5/15m U; 5/15m A | 1/15m U; 1/15m A |
GET /2/tweets/:id/retweeted_by |
75/15m U; 75/15m A | 5/15m U; 5/15m A | 1/15m U; 1/15m A |
GET /2/tweets/counts/recent |
300/15m A | 5/15m A | 1/15m A |
GET /2/tweets/counts/all |
300/15m A | - | - |
GET /2/tweets/search/recent |
300/15m U; 450/15m A | 60/15m U; 60/15m A | 1/15m U; 1/15m A |
GET /2/tweets/search/all |
1/s U; 1/s A | - | - |
GET /2/tweets/search/stream |
50/15m A | - | - |
GET /2/tweets/search/stream/rules |
450/15m A | - | - |
POST /2/tweets/search/stream/rules |
100/15m A | - | - |
GET /2/users/:id/liked_tweets |
75/15m U; 75/15m A | 5/15m U; 5/15m A | 1/15m U; 1/15m A |
GET /2/users/:id/mentions |
300/15m U; 450/15m A | 10/15m U; 15/15m A | 1/15m U; 1/15m A |
GET /2/users/:id/timelines/reverse_chronological |
180/15m U | 5/15m U | 1/15m U |
GET /2/users/:id/tweets |
900/15m U; 1,500/15m A | 5/15m U; 10/15m A | 1/15m U; 1/15m A |
GET /2/users/reposts_of_me |
75/15m U | 75/15m U | 1/15m U |
Source: Rate limits table (Posts lookup/search/timelines/stream). (X Developer Platform)
Important sanity check: full-archive search is documented as Pro/Enterprise only. (X Developer Platform)
Users (lookup/search/follows/mutes)
| Endpoint | Pro | Basic | Free |
|---|---|---|---|
GET /2/users |
900/15m U; 300/15m A | 100/24h U; 500/24h A | 1/24h U; 1/24h A |
GET /2/users/:id |
900/15m U; 300/15m A | 100/24h U; 500/24h A | 1/24h U; 1/24h A |
GET /2/users/by |
900/15m U; 300/15m A | 100/24h U; 500/24h A | 1/24h U; 1/24h A |
GET /2/users/by/username/:username |
900/15m U; 300/15m A | 100/24h U; 500/24h A | 3/15m U; 3/15m A |
GET /2/users/me |
75/15m U; 75/15m A | 1/24h U | - |
GET /2/users/search |
300/15m U | 1/15m U | - |
GET /2/users/:id/blocking |
15/15m U | 5/15m U | 1/15m U |
GET /2/users/:id/muting |
15/15m U | 100/24h U | 1/24h U |
POST /2/users/:id/following |
50/15m U | 5/15m U | 1/15m U |
DELETE /2/users/:source_user_id/following/:target_user_id |
50/15m U | 5/15m U | 1/15m U |
POST /2/users/:id/muting |
50/15m U | 5/15m U | 1/15m U |
DELETE /2/users/:source_user_id/muting/:target_user_id |
50/15m U | 5/15m U | 1/15m U |
Source: Rate limits table (Users). (X Developer Platform)
Spaces
| Endpoint | Pro | Basic | Free |
|---|---|---|---|
GET /2/spaces |
300/15m U; 300/15m A | 5/15m U; 25/15m A | 1/15m U; 1/15m A |
GET /2/spaces/:id |
300/15m U; 300/15m A | 5/15m U; 25/15m A | 1/15m U; 1/15m A |
GET /2/spaces/:id/buyers |
75/15m U; 75/15m A | 5/15m U; 25/15m A | 1/15m U; 1/15m A |
GET /2/spaces/:id/tweets |
300/15m U; 300/15m A | 5/15m U; 25/15m A | 1/15m U; 1/15m A |
GET /2/spaces/by/creator_ids |
300/15m U; 1/s A | 5/15m U; 25/s A | 1/s U; 1/15m A |
GET /2/spaces/search |
300/15m U; 300/15m A | 5/15m U; 25/15m A | 1/15m U; 1/15m A |
Source: Rate limits table (Spaces). (X Developer Platform)
Direct Messages
| Endpoint | Pro | Basic | Free |
|---|---|---|---|
GET /2/dm_events |
15/15m U | - | - |
GET /2/dm_events/:id |
15/15m U | - | - |
GET /2/dm_conversations/:dm_conversation_id/dm_events |
15/15m U | 1/24h U | - |
GET /2/dm_conversations/with/:participant_id/dm_events |
15/15m U | 1/15m U | - |
POST /2/dm_conversations |
15/15m U; 1,440/24h A | 1/24h U; 1/24h A | - |
POST /2/dm_conversations/:dm_conversation_id/messages |
15/15m U; 1,440/24h A | 1/24h U; 1/24h A | - |
POST /2/dm_conversations/with/:participant_id/messages |
1,440/24h U; 1,440/24h A | 1/24h U; 1/24h A | - |
DELETE /2/dm_events/:id |
1,500/24h U; 4,000/24h A | 200/15m U; 2,500/24h A | - |
Source: Rate limits table (DMs). (X Developer Platform)
Lists
| Endpoint | Pro | Basic | Free |
|---|---|---|---|
DELETE /2/lists/:id |
300/15m U | 5/15m U | 1/15m U |
DELETE /2/lists/:id/members/:user_id |
300/15m U | 5/15m U | 1/15m U |
DELETE /2/users/:id/followed_lists/:list_id |
50/15m U | 5/15m U | 1/15m U |
DELETE /2/users/:id/pinned_lists/:list_id |
50/15m U | 5/15m U | 1/15m U |
GET /2/lists/:id |
75/15m U; 75/15m A | 5/15m U; 5/15m A | 1/15m U; 1/15m A |
GET /2/lists/:id/members |
900/15m U; 900/15m A | 5/15m U; 25/15m A | 1/15m U; 1/15m A |
GET /2/lists/:id/tweets |
900/15m U; 900/15m A | 5/15m U; 25/15m A | - |
GET /2/users/:id/list_memberships |
75/15m U; 75/15m A | 5/15m U; 25/15m A | 1/15m U; 1/15m A |
GET /2/users/:id/owned_lists |
15/15m U; 15/15m A | 100/24h U; 500/24h A | 1/24h U; 1/24h A |
GET /2/users/:id/pinned_lists |
15/15m U; 15/15m A | 100/24h U; 500/24h A | 1/24h U; 1/24h A |
POST /2/lists |
300/15m U | 100/24h U | 1/24h U |
POST /2/lists/:id/members |
300/15m U | 5/15m U | 1/15m U |
POST /2/users/:id/followed_lists |
50/15m U | 5/15m U | 1/15m U |
POST /2/users/:id/pinned_lists |
50/15m U | 5/15m U | 1/15m U |
PUT /2/lists/:id |
300/15m U | 5/15m U | 1/15m U |
Source: Rate limits table (Lists). (X Developer Platform)
Bookmarks
| Endpoint | Pro | Basic | Free |
|---|---|---|---|
GET /2/users/:id/bookmarks |
180/15m U | 10/15m U | 1/15m U |
POST /2/users/:id/bookmarks |
50/15m U | 5/15m U | 1/15m U |
DELETE /2/users/:id/bookmarks/:tweet_id |
50/15m U | 5/15m U | 1/15m U |
GET /2/users/:id/bookmarks/folders |
50/15m U; 50/15m A | 5/15m U; 5/15m A | 1/15m U; 1/15m A |
GET /2/users/:id/bookmarks/folders/:folder_id |
50/15m U; 50/15m A | 5/15m U; 5/15m A | 1/15m U; 1/15m A |
Source: Rate limits table (Bookmarks). (X Developer Platform)
Compliance, usage, trends, communities
| Endpoint | Pro | Basic | Free |
|---|---|---|---|
GET /2/compliance/jobs |
150/15m A | 5/15m A | 1/15m A |
GET /2/compliance/jobs/:job_id |
150/15m A | 5/15m A | 1/15m A |
POST /2/compliance/jobs |
150/15m A | 15/15m A | 1/15m A |
GET /2/usage/tweets |
50/15m A | 50/15m A | 1/15m A |
GET /2/trends/by/woeid/:id |
75/15m A | 15/15m A | - |
GET /2/users/personalized_trends |
10/15m U; 200/15m A | 1/15m U; 20/15m A | 1/15m U; 1/24h A |
GET /2/communities/:id |
300/15m U; 300/15m A | 1/15m U; 25/15m A | 1/15m U; 1/15m A |
GET /2/communities/search |
18/15m U; 300/15m A | 1/15m U; 25/15m A | 1/15m U; 1/15m A |
Sources: Rate limits table (Compliance/Usage/Trends/Communities). (X Developer Platform)
Effective cost at the cap (simple math, nothing magical)
If you actually hit caps, this is what you are paying per allowed unit. This is not what X bills you per request. It is just price divided by maximum included quota.
| Plan | $/1k reads at cap | $/1k app-level posts at cap |
|---|---|---|
| Basic ($200/mo) | $200 / 15k = $13.33 per 1k reads | $200 / 50k = $4.00 per 1k posts |
| Pro ($5,000/mo) | $5,000 / 1,000k = $5.00 per 1k reads | $5,000 / 300k = $16.67 per 1k posts |
Caps and pricing used here come from the official plan page. (X Developer)
What's not publicly quantified (so you will not find it in the reference)
- Top-up pricing/size: the plans say "2 top ups" for Basic/Pro, but public docs do not spell out price per top-up or how many reads/writes you buy per top-up on the public pages we can access. (X Developer)
- Enterprise exact quotas: public pages give "starts at $50k/month" and "50+ million Posts/month" post cap, but the actual SKUs, add-ons, and contract terms are sales-driven. (X Developer)
Bottom line
The plan names are noise. The caps and rate limits are the product. If you are building on the X API, design around the Post cap and per-endpoint limits, not the marketing tier.
If you are comparing API costs across platforms, see my breakdown of direct provider image and video generation pricing here: /blog/direct-provider-pricing-image-video-generation-apis.
