It is match night and you keep pulling the X feed down for new posts. Suddenly nothing loads and a single line stays on the screen: "Rate limit exceeded". Your account has not been suspended and the app is not broken. X counted the requests coming from you, and the count went over what it allows for the moment. A developer sees the same sentence in a different place: the API returns it with HTTP 429 and error "code": 88.
The first half of this post is for the person who sees the notice on a phone or in a browser: what it means, why it appears, how long it lasts and what to do. The second half is for developers using the X API: the 429 response, the x-rate-limit-* headers, the 15-minute window, the access and pricing model in force on 7 October 2026 and a tested backoff example. At the end we look at the one narrow case where a proxy matters, when the limit is tied to an IP address you share with many other people.
What does "rate limit exceeded" mean?
A rate limit is the cap a service puts on how many requests it accepts from one user, account, app or IP address within a period. On X everything is a request: pulling the feed down asks for new posts, tapping a profile asks for that profile's posts, liking and following write an action to the server. Each kind of action has its own counter, and when a counter is full that action gets a "limit exceeded" answer for a short while.
That is why the notice usually hits one place only. The home feed may stop loading while notifications keep arriving, or the follow button may fail while you can still post. The general mechanism, what the counter is tied to and how fixed windows and token buckets count, is covered in our 429 Too Many Requests post; here we stay with the parts specific to X.
It helps to separate this notice from the other messages X shows. "Your account is suspended" is a rules decision and does not pass on its own. "This post is withheld in your country" is about a legal request and hides that one post; how it works is in our country withholding post. "Rate limit exceeded" is neither: a counter is full and it will reset when the period ends.
Which limits does X have?
X's help center publishes daily action limits per account. According to the X limits page, an account can publish at most 2,400 posts a day, and that number is split into half-hour intervals, so you can hit a half-hour ceiling before the daily one is used up. Five hundred direct messages and 400 follow actions a day are technical caps. The page also says these numbers are technical limits only, and that behaviour such as aggressive following is separately forbidden by the rules.
Reading is a different story. X does not publish a current figure for how many posts an account can view per day. Such figures were announced once: on 1 July 2023, Elon Musk announced reading limits he called "temporary", aimed at data scraping, and raised them during the day to 10,000 posts per day for verified accounts, 1,000 for unverified accounts and 500 for new accounts; Axios's report that day also recorded the "Rate limit exceeded" notice users were seeing. No official update has been published since, and today X does not tell you which threshold you hit in the app. The widely repeated claim that a Premium subscription raises the reading limit is one we could not confirm on X's official pages, so we do not state it here.
Why does the notice appear?
The counter fills through four routes. Most people have two of them at once.
- Fast scrolling and refreshing. Every pull on the feed, every profile and every search is a separate request. Refreshing again and again when a page does not load fills the counter faster.
- Third-party apps connected to your account. Follower analytics, auto-posting tools, "who unfollowed me" services and some older clients pull data on your behalf in the background. Even if you never touch your phone, their requests fill your counter.
- Sharing one IP address with many people. On campus, office and school networks, hundreds of devices reach the internet through one address (this is called NAT). A free or crowded VPN server works the same way. When X keeps some counters per address, everyone behind that address writes into the same bucket, and you can hit the limit without doing anything.
- Temporary restrictions on X's side. During platform-wide measures like the 2023 reading limits, the notice appears for large numbers of users at the same time. The only thing you can do then is wait.
How long does it last?
In the app, X does not give you a time; the notice says to try again in a few moments. In line with the half-hour intervals mentioned in the help center, in most cases the feed comes back on its own after 15 to 30 minutes. If you hit a daily limit, for example by using up the 400 follow actions, the counter resets the next day.
On the API the time is exact. Most endpoints use a 15-minute window, and the moment the window closes is written in the x-rate-limit-reset header of every response as a Unix timestamp. Some actions also have a 24-hour ceiling, such as 10,000 requests per app per day on the endpoint that creates posts.
What should you do?
The steps run from the easiest to the most involved.
- Wait and stop refreshing. Close the app and do something else for 15 to 30 minutes. Refreshing during that time does not reset the counter, it fills it.
- Review connected apps. Go to Settings and privacy › Security and account access › Apps and sessions › Connected apps. Remove access for anything you do not recognise, do not use, or that belongs to the "follower analytics" family. X's help center says plainly that a connected app can, depending on its permissions, read your posts and act on your account's behalf; these apps are what fills the counter most of the time.
- Clean up sessions. In the same menu, the Sessions tab lets you log out of devices you do not recognise. An app on an old phone or tablet may still be pulling data in the background.
- Log out and back in, clear the cache. In a browser, clear the site data; on iOS reinstall the app, on Android use Settings › Apps › X › Storage to clear the cache. This does not reset the counter, but it fixes the "still not loading" problem that sometimes remains after the notice has passed.
- Change networks. If the notice appears on school or office Wi-Fi and not on mobile data, the counter is tied to the IP address, which you share with dozens of people. If you use a VPN, turn it off and try again; a crowded VPN exit is a shared address too.
- Start slowly on a new account. Dozens of follows and likes in a row during the first days fill the counters and also draw X's automation checks.
The list of things not to do is short: opening a second and third account to carry on, installing extensions that promise to bypass the limit, and third-party clients that promise "unlimited reading". These break the X Rules and can turn a temporary notice into a lasting account problem.
Cause and fix by symptom
| Symptom | Likely cause | What to do |
|---|---|---|
| Feed stopped, notifications still arrive | Scrolling and refresh counter is full | Wait 15 to 30 minutes |
| Notice appears without touching the phone | A connected app pulls data in the background | Disconnect the apps |
| Appears on Wi-Fi, not on mobile data | Shared IP (NAT, VPN) | Change networks, turn off the VPN |
| Follow or DM button does not work | Daily action limit reached | Wait for the next day |
| Everyone is complaining at once | Platform-wide restriction | Wait; nothing else to do |
| Notice passed, page still blank | Stale session data | Log out and in, clear the cache |
For developers: 429 and the x-rate-limit headers
When a rate limit is exceeded on the X API, the response arrives with HTTP 429 and error 88 in the body. According to the rate limits document, limits are defined per endpoint, mostly on 15-minute windows, and split by authentication type: requests made with a user token (OAuth 1.0a or OAuth 2.0) have one counter per user, while app-only requests made with a Bearer Token share one counter for the whole app.
Every response carries three headers:
HTTP/2 429
x-rate-limit-limit: 900
x-rate-limit-remaining: 0
x-rate-limit-reset: 1791367200
{"errors":[{"code":88,"message":"Rate limit exceeded"}]}x-rate-limit-limit is the total allowance in the window, x-rate-limit-remaining what is left, and x-rate-limit-reset the moment the window closes, in Unix seconds. The headers come with 200 responses too; a well-behaved client watches remaining and slows down before it ever sees a 429. A few common endpoints (7 October 2026, X documentation):
| Endpoint | Per app | Per user |
|---|---|---|
GET /2/tweets | 3,500 / 15 min | 5,000 / 15 min |
GET /2/tweets/search/recent | 450 / 15 min | 300 / 15 min |
GET /2/users/:id/tweets | 10,000 / 15 min | 900 / 15 min |
POST /2/tweets | 10,000 / 24 h | 100 / 15 min |
POST /2/users/:id/following | none | 50 / 15 min |
GET /2/dm_events | none | 15 / 15 min |
The four habits the document recommends are also the way to never meet the limit: cache responses, use the filtered stream for real-time data instead of polling, watch remaining, and spread requests across the window.
X API access and pricing in 2026
On 6 February 2026, X announced on its developer forum that the API was moving to pay-per-use pricing; the announcement said the model was aimed at indie builders and small teams, that recently active accounts on the free tier would be moved over with a one-time voucher, and that public utility apps posting emergency updates would keep free access.
As of 7 October 2026, X's pricing document describes a single model: no subscriptions, you buy credits in the Developer Console and every request is deducted from them. The unit prices in the document are 0.005 dollars per post read, 0.015 dollars per post created, 0.20 dollars for a post that contains a link and 0.01 dollars per user profile read; endpoints that read your own account's data ("Owned Reads") cost 0.001 dollars per resource. The same resource requested a second time within 24 hours is not charged again. Pay-per-use plans are capped at 3 million post reads a month; anything above needs an Enterprise contract. The document says prices can change and that the current figures are in the Developer Console. Tiers named Free, Basic and Pro no longer appear in the documentation; we found no official page stating when legacy subscribers were moved, so we do not give those dates.
The distinction that matters to a developer is this: rate limits and billing are separate systems. You can stay within the limits and still spend credits, or hit a 429 without spending anything. A 429 is free, because only successful responses that return data are billed; it still costs you time, because the window is spent.
Backoff example: Python
The function below checks x-rate-limit-reset first when it gets a 429 and waits for the window to close; if the header is missing or in the past, it falls back to exponential backoff (5, 10, 20, 40 seconds, capped at 15 minutes). Attempts are limited: if the fifth attempt still returns 429, the response is handed back as is, so the caller can postpone the job. We ran it against a local mock server returning the same headers: two 429s with reset, one 429 without the header, then a 200; the total wait was 27 seconds.
import time
import requests
def x_get(url, headers, max_tries=5):
for attempt in range(max_tries):
r = requests.get(url, headers=headers, timeout=30)
if r.status_code != 429:
return r
# X writes the moment the window closes as Unix seconds
reset = int(r.headers.get("x-rate-limit-reset", "0"))
wait = reset - time.time()
if wait <= 0: # no header: exponential backoff
wait = min(5 * 2 ** attempt, 900)
time.sleep(wait + 1) # one second for clock skew
return rTwo notes. First, the wait belongs to one endpoint, but it should apply to every request going out with the same user token; loading other endpoints while one is closed only fills the window faster. Second, the server's clock and yours can differ by a few seconds; the one-second margin in the example is for that, and you can raise it.
Shared IP addresses and the narrow role of a proxy
This section looks at one case only: the notice appears because you share an IP address with many people. On office, school, dormitory and crowded VPN networks, the counter X keeps per address is a bucket shared by everyone, and it can fill even when your own requests are few. The fix is an address that is yours, fixed and not shared with anyone. A ISP Proxy is exactly that: a fixed address registered to an internet service provider, looking like a home connection and used by you alone. The counter then counts only your requests.
Social media teams use this approach as standard practice: an agency that manages client accounts with permission gives each account its own browser profile and its own fixed address, so one account's busy day does not fill the counter of the others, and each account logs in from the same place every day. How accounts are run under X's written rules, and how many accounts the platform allows, is in our multiple social media accounts post. For a team working in the field, a Mobile Proxy does the same job; an address leaving a carrier network is the same kind as the one a user on a phone has.
The list of things a proxy cannot do is longer. If the counter is tied to your account, which is true of most scrolling and action limits, changing the address changes nothing; a request from the new address lands on the same account's counter. Using proxies to spread one account's limit over several addresses, to rotate through many accounts, or to get around X's login requirement breaks the X Rules and its automation rules; this post has no method for it and our products are not sold for it. The proxy's role is one sentence: replace a shared address with your own, so the counter sees only your use.
Common mistakes
- Refreshing after the notice. Every refresh is a new request; the counter opens later.
- Assuming the account is suspended and opening a support ticket. Suspension comes as a separate message shown on the profile page; a rate limit passes in 15 to 30 minutes.
- Never looking at connected apps. A "follower analytics" tool authorised years ago may still be pulling data on your behalf.
- Carrying on from a second account. Switching accounts on the same device and address does not reset the counter; it raises automation suspicion.
- Retrying a 429 at a fixed interval on the API. A retry every five seconds keeps the window closed rather than open; read
x-rate-limit-reset. - Confusing a rate limit with running out of credits. They are separate systems; a 429 is free, while an empty balance stops requests until you add credits.
Decision guide
| Your situation | What to do |
|---|---|
| First notice, one device, home network | Wait 15 to 30 minutes |
| Notice appears often and without your input | Clean up connected apps and sessions |
| Notice only on office, school or VPN networks | Change networks; for work, a fixed address of your own |
| Hit the follow or DM limit | Daily limit; wait for the next day and slow down |
| Developer, the API returns 429 | Wait for x-rate-limit-reset, spread requests across the window |
| Developer, requests fail on credits | Check the balance and spending limit in the Developer Console |
| Team managing authorised accounts | One browser profile and one fixed address per account |
Frequently asked questions
How long does rate limit exceeded last on X?
In the app it usually passes on its own within 15 to 30 minutes; X does not give users an exact time. If you hit a daily action limit, the counter resets the next day. On the API the time is exact and written in the x-rate-limit-reset header; most endpoints use a 15-minute window.
Does rate limit exceeded mean my account is suspended?
No. Suspension is a rules decision, appears as a separate message on your profile and does not pass on its own. A rate limit is a full counter; it opens when you wait and leaves no mark on your account.
I did nothing, so why did I get a rate limit notice?
There are two likely causes. A third-party app connected to your account may be pulling data on your behalf in the background; check Settings and privacy › Security and account access › Apps and sessions. Or you are on a shared network such as an office, a school or a VPN, and other people on the same address filled the counter X keeps per address.
Does turning off the VPN fix the X rate limit error?
If the counter is tied to the IP address, yes; a crowded VPN exit is one address shared by hundreds of users. If the counter is tied to your account, turning the VPN off changes nothing and you need to wait. The practical way to tell them apart is to switch to mobile data and try.
What should I do when the X API returns 429?
Read the x-rate-limit-reset value in the response and wait until that moment; if the header is missing, use exponential backoff and cap the number of attempts. Slow down your other requests going out with the same token too. To avoid the limit altogether, cache responses and watch x-rate-limit-remaining.
Does a proxy fix the X rate limit error?
Only in one case: when the counter is tied to an IP address you share with many people, a fixed address of your own reduces the counter to your own use. If the counter is tied to your account, a proxy changes nothing. Spreading one account's limit over several addresses or using many accounts to get past the limit breaks the X Rules.
Summary
"Rate limit exceeded" is a temporary notice that X saw more requests from you than it allows in a short window; it is not a penalty and it passes when you wait. The counter is usually filled by fast scrolling, background apps connected to your account, or shared networks such as offices and schools; wait, disconnect the apps and change networks if needed. Developers see the same limit as HTTP 429 with x-rate-limit-* headers, wait according to x-rate-limit-reset, and keep in mind that under the credit-based pricing of 2026 rate limits and billing are separate systems. For teams whose problem is a shared address, what a fixed address of your own provides is on our X proxy page.




