X enforces two independent ceilings on pay-per-use accounts: 15-minute rolling windows per endpoint and a 2 million post-read cap per month. Hitting either returns HTTP 429 even when credits remain. This page maps each limit, how it interacts with billing, and when a trend feed poll sidesteps both.
X bills pay-per-use accounts per resource, but billing and throttling are separate systems. A job can have thousands of dollars in prepaid credits and still stall on HTTP 429 when it outruns a 15-minute window. Another job can stay under every rolling limit and hit the 2,000,000 post-read monthly wall on day 18.
For dollar costs per endpoint, see X API pay-per-use endpoint costs. For the broader tier landscape, see X API pricing comparison.
Pay-per-use developers navigate two published limit types plus optional spending controls:
| Limit type | What it measures | Typical consequence |
|---|---|---|
| 15-minute rolling window | Requests or resources per endpoint per app or user | HTTP 429 until window resets |
| Monthly post-read cap | Total post resources fetched in billing cycle | Hard stop at 2,000,000 reads |
| Spending limit (optional) | Dollar spend per billing cycle | Requests blocked when cap reached |
Credits deduct on successful responses. Rate limits reject traffic before or after billing depending on endpoint behavior. Treat them as independent budgets.
X documents rate limits in 15-minute rolling windows per endpoint. Each endpoint family has its own counter. Exhausting the search window does not consume the timeline window.
Pay-per-use accounts see higher per-app ceilings than legacy Basic on several read paths. Third-party summaries from early 2026 cite roughly 3,500 tweet reads per 15 minutes per app and 450 recent-search requests per 15 minutes per app on pay-per-use. Legacy Basic capped recent search at 60 requests per 15 minutes.
Per-app limits (Bearer Token) and per-user limits (OAuth user context) run on separate counters. One power user hitting a per-user write cap does not block other users of the same application.
When a limit is exceeded, X returns HTTP 429 Too Many Requests. Responses include x-rate-limit-limit, x-rate-limit-remaining, and x-rate-limit-reset (UTC epoch seconds). Production schedulers should back off to the reset timestamp instead of tight retry loops, which burn credits on calls that will fail anyway.
| Header | Meaning |
|---|---|
x-rate-limit-limit | Maximum requests allowed in the current window |
x-rate-limit-remaining | Requests left before throttle |
x-rate-limit-reset | Unix timestamp when the window resets |
Pay-per-use plans hard-cap at 2,000,000 post reads per monthly billing cycle. User reads, trends reads, and owned-account reads may meter separately, but post reads are the ceiling most monitoring pipelines hit first.
At $0.005 per post read, 2,000,000 reads equal $10,000 in post-read charges alone. After the cap, further post reads require an Enterprise contract, typically quoted from around $42,000 per month. There is no self-serve overage purchase for post reads beyond 2 million.
A pipeline averaging 70,000 post reads per day reaches the cap in about 28 days. Polling-heavy architectures should model monthly totals, not just per-call cost.
New signups cannot access legacy Basic or Pro. Accounts that subscribed before the February 2026 pay-per-use switch may still operate under fixed monthly allowances until migrated.
| Tier | Monthly price | Post reads/month (allowance) | Recent search / 15 min | Full-archive search |
|---|---|---|---|---|
| Basic (legacy) | $200 | ~10,000 to 15,000 | 60 requests | Not available |
| Pro (legacy) | $5,000 | ~1,000,000 | 300 requests | Available |
| Pay-per-use | No floor | 2,000,000 hard cap | ~450 requests (reported) | Not available |
Legacy Pro also included filtered stream access. Pay-per-use self-serve does not expose streaming endpoints. Enterprise remains the path for firehose-scale ingestion.
Consider a keyword monitor that calls GET /2/tweets/search/recent every five minutes with max_results=100:
The same monitor at one-minute cadence sends 15 search calls per 15 minutes. Still under 450, but monthly reads climb toward 4.3 million, blowing past the cap even if credits are available.
Rate limits rarely bind low-frequency jobs. Monthly caps and credit totals bind aggressive ones.
Not every endpoint shares the same window size or limit class. Writes, user lookups, trends reads, and list operations each carry separate counters in X's developer documentation.
| Endpoint family | Billing unit | Rate limit notes |
|---|---|---|
Post reads (/2/tweets, search results) | $0.005 per post resource | Highest volume cap risk |
User reads (/2/users) | $0.010 per user resource | Separate per-user bucket on OAuth |
Trends reads (/2/trends/by/woeid/:id) | $0.010 per trends resource | Low volume, location-based |
| Post creates | $0.015 to $0.200 per request | Per-user write caps apply |
| Owned-account reads | $0.001 per resource | Discounted; still metered |
Trends reads cost more per call than post reads but return a ranked topic list in one response. For location-trend polling, the trends endpoint usually hits rate limits before post-read caps.
Three workload shapes do not need X developer credentials or X rate limit headers:
Trends MCP exposes live X trending topics via get_top_trends with type X (Twitter). One POST returns ranked [rank, topic] pairs. The free tier allows 100 requests per month with no X developer account. For polling patterns and quota planning, see monitoring X trending topics on a schedule.
The official X API remains necessary for tweet text, engagement metrics, user profiles, filtered streams, and write operations. Rate limits make the boundary visible: if the product only needs topic names on a schedule, per-post reads and their dual ceilings are the wrong tool.
FAQ