Last updated October 1, 2026
Short answer:“Rate limit exceeded” means your account, or an app using it, made more requests to X than X allows in a set period, so X has paused you until that period ends. In the app, stop refreshing and wait. For time-based limits, X says you can try again once the period has passed. For developers, it's an HTTP 429 from the X API, and the x-rate-limit-reset header tells you exactly when to retry.
This page has two parts: one for people seeing the error in the X app or on x.com, and one for developers hitting 429s from the API.
Every time X loads posts, opens a profile, sends a message or follows someone, your app makes a request to X's servers. X caps how many requests each account can make in a given window, to keep the service stable and to slow down scraping and spam. When you go over, X stops answering for a while and shows “rate limit exceeded”. A similar message, “Cannot retrieve posts at this time”, often appears for the same reason.
It's temporary and automatic. It isn't a suspension, a shadowban or a sign that someone reported you.
The usual causes, roughly from most to least common:
X's help center lists these technical limits. They count actions from every device and app combined: web, mobile and the API.
| Action | Limit | Notes |
|---|---|---|
| Direct Messages sent | 500 per day | |
| Posts (unverified accounts) | 50 original posts and 200 replies per day | Split into smaller half-hour limits |
| Follows | 400 per day | Separate rules also ban aggressive following |
| Following, after 5,000 accounts | Limited by account-specific ratios | |
| Account email changes | 4 per hour | |
| Reading posts | Not published | X introduced reading caps in July 2023 |
The reading caps are what most people hit. In July 2023 X announced temporary limits of 6,000 posts a day for verified accounts, 600 for unverified and 300 for new unverified accounts, and raised them within a day to 10,000, 1,000 and 500. X hasn't published current reading limits since, so treat those numbers as history, not as today's rules.
It depends on the limit, and X doesn't show a countdown. X's own guidance is that for time-based limits (messages, posts, email changes and API requests) you can try again once the period has passed, and that if you hit the post limit you should try again in a few hours. Daily limits reset after the day's window passes. If the error lasts well over a day, it's probably not a rate limit. Check whether your account is locked, or run it through the shadowban checker.
While you wait, you can still see any public profile and its latest posts in our free Twitter viewer, or read a whole thread in the thread reader. Neither needs an X login.
For developers, “rate limit exceeded” arrives as HTTP status 429. The official X API limits each endpoint per time window, usually 15 minutes or 24 hours, and returns three headers on every response:
| Header | Meaning |
|---|---|
x-rate-limit-limit | How many requests the window allows |
x-rate-limit-remaining | How many are left in the current window |
x-rate-limit-reset | Unix time, in seconds, when the window resets |
The X API is now pay-per-use, and X's documentation is explicit that rate limits and billing are separate. Paying for usage doesn't lift the per-window limits. The documented fix is to wait until the reset time, then retry:
const res = await fetch(url, { headers });
if (res.status === 429) {
const reset = Number(res.headers.get("x-rate-limit-reset")); // Unix seconds
const waitMs = Math.max(0, reset * 1000 - Date.now()) + 1000;
await new Promise((r) => setTimeout(r, waitMs));
// retry the same request; back off exponentially if it fails again
}x-rate-limit-remaining and slow down before you reach zero.since_id so each request returns only new posts.The other route is to stop drawing on your own X app's limits. twitr.sh is a pay-per-call X API: you don't register an X developer app or hold API keys, so your app's 15-minute windows never come into it. Each call is priced up front in an HTTP 402 response and paid in USDC. It isn't unlimited. twitr.sh has its own capacity limits, but they're checked before payment: if it's at capacity you get a 429 with a Retry-After header and aren't charged. Compare costs on the X API pricing page, or browse all tools.
A search call looks like this:
curl -X POST https://twitr.sh/api/tools/x_search \
-H 'content-type: application/json' \
-d '{"q":"from:nasa since:2026-01-01 until:2026-02-01","queryType":"Latest","resultsLimit":20}'
# → HTTP 402 Payment Required with the exact price
# ($0.0012 per returned tweet, so about $0.024 for 20)
# → pay with any x402 or MPP wallet and send the same request again
# → 200 with the posts
# (429 + Retry-After only if the service is at capacity, before any charge)resultsLimit caps the bill. Agents in Claude Code, Cursor or any MCP client can call the same search as the x_search tool. See x_search and x_timeline for the full inputs.
It means your account, or an app using your account, sent X more requests than it allows in a set period, so X is temporarily refusing more. It's a pause, not a ban. Once the time window passes, things work again.
It depends on which limit you hit, and X doesn't publish a timer for every one. X says that for time-based limits you can try again once the period has passed, and that after hitting the post limit you should try again in a few hours. For the official API, most windows are 15 minutes or 24 hours.
Stop refreshing and wait, because every refresh is another request. Then close extra tabs, disconnect third-party apps you don't use (Settings and privacy → Security and account access → Apps and sessions → Connected apps), turn off browser extensions that load X data, and try again later.
Common causes are heavy scrolling or refreshing, hitting an action limit such as follows or posts, third-party apps sharing your account's limits, browser extensions, and busy periods when X temporarily lowers limits.
X's help center lists 500 Direct Messages sent per day, 400 follows per day, 4 account email changes per hour, and for unverified accounts 50 original posts and 200 replies per day, split into smaller half-hour limits. X may lower these during heavy traffic.
No. A rate limit is a short, automatic pause on how many requests you can make. A suspension locks or hides the account, and a shadowban quietly limits who sees your posts. You can check for the last two with the free twitr.sh shadowban checker.
Not entirely. When X introduced reading limits in July 2023, verified accounts got higher limits than unverified ones. X hasn't published its current reading limits, and every account still has limits on actions like following and messaging.
429 Too Many Requests is the status the X API returns when your app goes over a rate limit. The response includes x-rate-limit-limit, x-rate-limit-remaining and x-rate-limit-reset headers. The reset header is the Unix time, in seconds, when the window resets.
No. X's documentation says rate limits and billing are separate: you can pay for usage and still be rate limited. Each endpoint keeps its own limit per 15-minute or 24-hour window.
Read x-rate-limit-reset and wait until then, back off exponentially on repeat 429s, cache results, batch lookups instead of fetching items one by one, and use since_id to fetch only new posts. Or call a pay-per-call API like twitr.sh, which uses no X developer app of yours, so your app's windows don't apply.
Yes, it has its own capacity limits, but they're checked before payment. If twitr.sh is at capacity it returns 429 with a Retry-After header and you aren't charged. Failed calls are never charged.