Skip to content

X (Twitter) "rate limit exceeded": every limit and how to stay under

What X's rate limit exceeded error means for users and developers, X's documented API limits per endpoint as of Oct 17, 2026, and how to stay under them.

Piyushh · October 17, 2026 · 7 min read

"Rate limit exceeded" on X means you've sent more requests than X allows in a time window, and X will refuse the rest until that window resets. Developers see it from the X API as HTTP 429 with error code 88, usually for 15 minutes. App users see it when an account action such as posting or following goes past X's daily limits. Every limit below comes from X's own pages, checked on October 17, 2026.

The fix depends on which side you're on, so this post covers each in turn: the account limits that hit people using X, then the per-endpoint API limits, the headers that tell you when you're clear, and code that handles a 429 properly.

Twitter rate limit exceeded: user or developer?

You see itWhereWhat it meansHow long
An error after posting, replying or following a lotThe X app or websiteYou hit an account limitUntil the daily or semi-hourly window passes
429 Too Many Requests, "code": 88Your code, calling the X APIYou exceeded one endpoint's limitUntil x-rate-limit-reset, usually 15 minutes
"Rate limit exceeded" from another toolAn app built on XThat app hit its own X API limitAsk the app, it depends on their plan

The last row comes up often. We searched X for posts containing "rate limit exceeded" on October 17, and most of the 20 most recent were about other services, AI coding tools in particular. In August one app developer, @ottoscreator, posted an example of the third kind: "Otto is currently experiencing an X API rate limit, so automated posts may be temporarily paused" (post). When a tool you use shows the error, the cause is usually that tool's X quota and not your account.

X account limits for people using the app

X's help page About X limits (checked October 17, 2026) lists the "current technical limits for accounts":

ActionLimit X lists
Posts50 original posts and 200 replies per day for unverified accounts, broken into semi-hourly intervals
Post updates overall2,400 per day, also split into semi-hourly intervals
Following400 per day, plus ratio limits once you follow 5,000 accounts
Changes to account email4 per hour
Direct messagesA daily cap, listed on the same page

Three details on that page explain a lot of confusing errors:

  • The limits count every device and app. "These limits include actions from all devices, including web, mobile, phone, API, etc." Any third-party app connected to your account spends from the same budget.
  • They can shrink. "These limits may be temporarily reduced during periods of heavy site usage," and X posts updates on its status site.
  • The error tells you which limit you hit. X says it will "let you know with an error message telling you which limit you've hit," and that you can try again once the time limit has passed.

For follow limits, X points to a separate troubleshooting article. It also warns that "there are additional rules prohibiting aggressive following behavior," so an account that follows right up to the technical cap can still get flagged.

The 2023 reading limits

Many guides about this error date from July 1, 2023. That day Elon Musk announced temporary daily limits on how many posts people could read, starting at 6,000 for verified accounts and 600 for unverified ones, and raised them within hours (Hootsuite's summary). It's when "Rate limit exceeded" became a household phrase. X's current limits page doesn't list a reading limit.

The X API rate limits for developers

X's rate limits page (checked October 17, 2026) says limits apply per endpoint and per time window, "Usually 15 minutes or 24 hours." They come in two kinds:

  • Per-app limits apply when you call with a Bearer Token (app-only auth).
  • Per-user limits apply when you call with an OAuth 1.0a or OAuth 2.0 user token.

These are some of the limits developers hit most often, per 15 minutes unless noted:

EndpointPer appPer userNotes
GET /2/tweets/search/recent450300Up to 100 results per request
GET /2/tweets/search/all1/sec, 3001/secFull archive, up to 500 results
GET /2/tweets/:id450900One post
GET /2/tweets3,5005,000Batch post lookup
GET /2/users/:id/tweets10,000900A user's timeline
GET /2/users/:id/mentions450300
GET /2/users/by/username/:username300900Profile lookup
GET /2/users/:id/followers300300Same for following
GET /2/tweets/:id/liking_users7575Same for retweeted_by
POST /2/tweets10,000/24hrs100Creating posts
POST /2/users/:id/likesnone listed50, and 1,000/24hrsLiking

Every other endpoint is on the page too, and it notes that the Developer Console shows these limits as well.

What a 429 from X looks like

Go over a limit and X returns HTTP 429 with this body, quoted from its docs:

{
  "errors": [{
    "code": 88,
    "message": "Rate limit exceeded"
  }]
}

According to the docs, requests keep failing "until the window resets." Every response, whether it succeeded or failed, carries three headers:

HeaderMeaning
x-rate-limit-limitMaximum requests allowed in the window
x-rate-limit-remainingRequests left in this window
x-rate-limit-resetUnix timestamp when the window resets

x-rate-limit-reset is a timestamp, not a count of seconds. Reddit's equivalent header counts seconds, so if your code talks to both, handle the two separately.

Rate limits and billing are separate

X now bills self-serve developers pay-per-use, and the rate limits page says plainly that billing and rate limits are separate: "You can be within rate limits but still incur usage costs, or hit rate limits without additional cost." Paying more won't raise your limit, since "Enterprise customers have custom rate limits." Prices are on X's pricing page, and our post is the X API free? covers what changed in 2026.

How to stay under the X API rate limit

X's own best practices are short: cache responses, use streaming for real-time data instead of polling, monitor headers, and spread requests across the window. In practice:

  1. Read the headers on every call. When x-rate-limit-remaining reaches 0, sleep until x-rate-limit-reset instead of firing the next request to find out.
  2. Pick the endpoint with the bigger budget. Batch lookup (GET /2/tweets) allows 3,500 calls per 15 minutes per app, against 450 for single lookups, and each call takes up to 100 ids.
  3. Pull only what's new. For timelines and search, pass since_id with the newest id you already have rather than re-reading old results.
  4. For live keyword tracking, stream instead of polling. Filtered stream connections have their own limits, listed on the same page.
  5. Know whose budget you're spending. A user-token call counts against that user and an app-token call against the app. The numbers differ, sometimes by a lot: 10,000 against 900 for user timelines.

Don't try to get around limits by rotating accounts or tokens. The limits exist to protect the platform, and X's developer guidelines are the rules your app is judged by, so read them before you spread one workload across several apps.

Handling a 429 in Python

This follows the recovery strategy in X's docs (wait for x-rate-limit-reset, back off if needed):

import time
import requests

def x_get(url, token, params=None, max_tries=5):
    headers = {"Authorization": f"Bearer {token}"}
    for attempt in range(max_tries):
        r = requests.get(url, headers=headers, params=params, timeout=30)
        if r.status_code == 429:
            reset = int(r.headers.get("x-rate-limit-reset", 0))  # Unix timestamp
            time.sleep(max(reset - time.time(), 2 ** attempt, 1))
            continue
        r.raise_for_status()
        if r.headers.get("x-rate-limit-remaining") == "0":
            reset = int(r.headers.get("x-rate-limit-reset", 0))
            time.sleep(max(reset - time.time(), 0))
        return r.json()
    raise RuntimeError("Still rate limited after retries")

If you use Tweepy, its client takes wait_on_rate_limit=True, which sleeps through the window for you.

Reading X without managing X's limits

If you only need to read X (profiles, timelines, search, replies, followers) and don't want to manage an app, tokens and per-endpoint windows, a hosted API can handle that part. ChatterAPI serves X reads through one key and a credit balance, and most reads cost 3 credits per call. It's independent and not affiliated with X.

There is still one limit you need to know about: requests per second per account. It's 2 on signup credits and 10 to 50 on paid plans, all listed in the rate limits docs. A call over the limit fails with rate_limited and a retry-after header in seconds, and you aren't charged for it.

Here is the search we ran on October 17, 2026 while researching this post:

curl "https://api.chatterapi.com/v1/x/tweets/search?q=%22rate+limit%22+%22X+API%22+-filter%3Areplies&sort=latest" \
  -H "Authorization: Bearer $CHATTERAPI_KEY"

The response, trimmed to the one post quoted above:

{
  "data": [
    {
      "id": "2086619298731286693",
      "text": "Hey guys, dev here 👋\n\nOtto is currently experiencing an X API rate limit, so automated posts may be temporarily paused.\n\nEverything is running normally on our end and posting will resume once the limit is lifted. Thanks for your patience.",
      "url": "https://x.com/ottoscreator/status/2086619298731286693",
      "createdAt": "2026-08-10T01:03:02.000Z",
      "likes": 12,
      "replies": 12,
      "views": 610,
      "author": { "handle": "ottoscreator", "name": "Otto's Creator" }
    }
  ],
  "page": { "nextCursor": "AdhNHcRoAvXn…", "hasMore": true },
  "credits": { "charged": 3, "remaining": 590 },
  "requestId": "req_01M56E2SW066263X1XNV",
  "cached": false
}

The X API docs list every X endpoint with its credit cost, and the X API page explains what's covered. If you want to try a search without writing code, the free X tweet search tool runs the same query in a browser.

Next step

If the X API is returning 429s, add the header check above first. That alone usually fixes it. For read-only work where you'd rather not run an X app at all, sign up with Google to get 100 free credits without entering a card, then run the search above with your own query. Plans start at $19 a month for 25,000 credits.

FAQ

What does rate limit exceeded mean on Twitter?
It means you made more requests or actions than X allows in a time window. In the X API it comes back as HTTP 429 with error code 88 and the message Rate limit exceeded, and requests keep failing until the window resets, usually after 15 minutes. In the app it means you hit an account limit on posting, following or messaging.
How long does the Twitter rate limit last?
For the API, until the time in the x-rate-limit-reset header, a Unix timestamp. Most X API windows are 15 minutes, and some are 24 hours, according to X's rate limits page checked on October 17, 2026. Account limits in the app are daily, broken into semi-hourly intervals for posts.
What is the X API rate limit for search?
X's docs list recent search, GET /2/tweets/search/recent, at 450 requests per 15 minutes per app and 300 per user, with up to 100 results per request. Full-archive search is 1 request per second and 300 per 15 minutes per app. Checked October 17, 2026.
Does paying for the X API remove rate limits?
No. X's docs say rate limits and billing are separate: you can be within the rate limits and still be billed for usage, or hit a rate limit without any extra cost. Enterprise customers get custom limits.
How many posts can you make on X per day?
X's help center, checked October 17, 2026, lists 50 original posts and 200 replies per day for unverified accounts, and describes a 2,400 updates per day post limit broken into semi-hourly intervals. Following is capped at 400 per day.

More on X (Twitter) API

Make your first call on 100 free credits.

Sign up with Google, no card. One key for Reddit and X, over REST or MCP.