# Twitter API rate limits explained: the official X API vs alternatives

> How X API rate limits work in 2026: 15-minute windows, per-app and per-user limits, 429 errors and backoff, and the published limits of alternatives.

HTML page: https://www.twittrapi.com/blog/twitter-api-rate-limits
Published 2026-10-10.

A rate limit caps how many requests you can send in a time window. On the official X API each endpoint has its own limit per 15 minutes, counted separately for your app and for each user token. Go over it and you get HTTP 429 until the window resets. Third-party APIs limit requests too, usually per second or per minute across all endpoints.

This post lists the official limits for the endpoints people use most, explains the headers and the 429 response, and puts the published limits of a few alternatives next to them. Everything was checked on 2026-10-10. We run TwittrAPI, one of the alternatives, so read that part with that in mind.

## How X API rate limits work

The [X rate limits page](https://docs.x.com/x-api/fundamentals/rate-limits) describes three rules:

- **Windows.** Limits reset every 15 minutes or every 24 hours. The tables on that page show 15-minute limits unless they say otherwise.
- **Per endpoint.** Each endpoint has its own limit. Using up your search limit does not touch your user lookup limit.
- **Per app or per user.** Requests made with an app-only Bearer Token count against the app's limit. Requests made with a user's OAuth 1.0a or OAuth 2.0 token count against that user's limit.

Enterprise customers get custom limits.

## Limits for common endpoints

These are the 15-minute limits from the same page:

| Endpoint | What it does | Per app | Per user |
| --- | --- | --- | --- |
| `GET /2/tweets` | Look up posts by ID | 3,500 | 5,000 |
| `GET /2/tweets/:id` | Look up one post | 450 | 900 |
| `GET /2/users/:id` | Look up one user by ID | 300 | 900 |
| `GET /2/users/by/username/:username` | Look up one user by username | 300 | 900 |
| `GET /2/tweets/search/recent` | Search recent posts | 450 | 300 |
| `GET /2/users/:id/tweets` | A user's posts | 10,000 | 900 |
| `GET /2/users/:id/followers` | A user's followers | 300 | 300 |

Two things stand out. User lookups are limited to 300 requests per 15 minutes on an app token, which is 20 a minute. Follower lists have the same 300 limit for both apps and users, so pulling the followers of many large accounts takes a long time even if you can afford it.

## Rate limits and the bill are separate

Since 2026 the X API is pay-per-usage: you buy credits, and each post read costs $0.005 and each user read $0.010, according to the [X API pricing page](https://docs.x.com/x-api/getting-started/pricing). Rate limits do not change with how much you spend. A larger balance does not give you more requests per window.

There is also a usage cap on top of the rate limits. Pay-per-usage stops at 3 million post reads per monthly billing cycle, and above that you need Enterprise. The pricing page also says a resource you fetch more than once within the same UTC day is only billed once.

The two limits interact. Recent search returns at most 100 posts per request, so 450 requests in a window can return up to 45,000 posts, which costs up to $225 at the post read rate. Run that every 15 minutes and you reach the 3 million cap in well under a day. [X API pricing in 2026](https://www.twittrapi.com/blog/x-api-pricing-2026) has more worked examples.

## Headers and the 429 response

Every response from the X API carries three headers:

| Header | Meaning |
| --- | --- |
| `x-rate-limit-limit` | Requests allowed in the window |
| `x-rate-limit-remaining` | Requests left in the current window |
| `x-rate-limit-reset` | Unix time when the window resets |

When you run out, the API returns HTTP 429 with error code 88 and the message "Rate limit exceeded". The fix X recommends is to read `x-rate-limit-reset` and wait until that time. If you have no reset time, back off exponentially. X's own sample code waits at least 60 seconds before it tries again.

A small Python helper that does this:

```python
import random
import time

import requests

def get_with_backoff(url, headers, max_tries=5):
    for attempt in range(max_tries):
        resp = requests.get(url, headers=headers, timeout=30)
        if resp.status_code != 429:
            return resp

        reset = resp.headers.get("x-rate-limit-reset")
        retry_after = resp.headers.get("retry-after")
        if reset:
            wait = max(int(reset) - time.time(), 1)
        elif retry_after:
            wait = int(retry_after)
        else:
            wait = min(60 * 2**attempt, 900)
        time.sleep(wait + random.uniform(0, 1))
    raise RuntimeError("still rate limited after retries")
```

It also handles `Retry-After`, which several third-party APIs send instead of a reset timestamp. The small random delay stops several workers from retrying at the same moment.

## Published limits of the alternatives

Third-party APIs for public X data set their own limits. They are usually counted per account across all endpoints, not per endpoint. These are the figures each provider publishes.

### twitterapi.io: by account status

The [twitterapi.io QPS limits page](https://twitterapi.io/qps-limits) says accounts that have never paid are limited to 0.2 requests per second, one request every 5 seconds. A one-time credit purchase raises that to 20 requests per second. Subscriptions range from 20 per second on the lower plans to 500 per second on Business. Going over returns 429 with a `Retry-After` header, and the page says the account is not blocked.

Other twitterapi.io pages give different numbers. Its [documentation introduction](https://docs.twitterapi.io/introduction) mentions up to 200 QPS per client. We quote the dedicated limits page and suggest you confirm with them.

### SocialData: 120 requests per minute

[SocialData's rate limits page](https://docs.socialdata.tools/getting-started/rate-limits/) sets 120 requests per minute per user, shared across all endpoints, and says higher limits are available for free by email. Its [errors page](https://docs.socialdata.tools/getting-started/errors/) says a 429 means you went over and recommends exponential backoff. A 402 means your balance is too low, which is a different problem from a rate limit.

### RapidAPI: plan quota plus a per-minute window

Any API sold on RapidAPI, including ours, can have two kinds of limit. RapidAPI's [response headers documentation](https://docs.rapidapi.com/v1.0/docs/response-headers) describes them:

- `x-ratelimit-requests-limit` and `x-ratelimit-requests-remaining` track your plan quota, which resets daily or monthly depending on the plan.
- `x-ratelimit-limit` and `x-ratelimit-remaining` track a 60-second window. When it runs out you get 429. These only appear when the API has such a limit.

The quota is what you paid for. The per-minute window is what returns 429 when you send too fast.

### TwittrAPI

On RapidAPI and JojAPI, the limits for each plan are shown on the marketplace listing. For direct accounts, the limits depend on the account; ask support if you need more throughput. Going over returns HTTP 429. Our [rate limits documentation](https://www.twittrapi.com/docs/helpful-infos/rate-limits) covers backoff, and the official Python and Node.js SDKs retry 429 responses for you. Direct accounts can book higher tiers, up to 1,000 requests per second self-serve, on the [pricing page](https://www.twittrapi.com/pricing#rate-limits); [TwittrAPI for teams](https://www.twittrapi.com/enterprise) covers more than that.

We charge per call, from $0.065 per 1,000 calls on direct [pricing](https://www.twittrapi.com/pricing). Calls that fail with 400, 408, 409 or a 5xx error are refunded.

## Side by side

| | X official API | twitterapi.io | SocialData | TwittrAPI |
| --- | --- | --- | --- | --- |
| Unit of the limit | Requests per endpoint per 15 min (or 24 h) | Requests per second, per account | Requests per minute, per user | Per plan on marketplaces, per account on direct |
| Example | 300 user lookups / 15 min per app | 20/s after any purchase | 120/min | See the listing, or ask support |
| Over the limit | 429, code 88 | 429 with `Retry-After` | 429 | 429 |
| Monthly cap | 3M post reads on pay-per-usage | Not stated on the limits page | Not stated | Plan quota on marketplaces; prepaid balance on direct |

Figure: requests per second you can switch on yourself: TwittrAPI 30 to 1,000 requests/s, twitterapi.io 20 to 500 requests/s, SocialData 2 requests/s, X API userByUsername 0.3/s (300 per 15 min), X API userPosts 11.1/s (10000 per 15 min), X API recentSearch 0.5/s (450 per 15 min). Published limits as of October 2026.

## Staying under the limits

Most 429s come from a handful of habits. These help on every API above:

1. **Cache what does not change.** Profiles and old posts change slowly. Store them and refetch on a schedule.
2. **Use batch endpoints.** `GET /2/tweets` takes many IDs and has the highest lookup limit in the table. Some third-party APIs have similar bulk lookups.
3. **Spread requests out.** A steady rate below the limit beats bursts followed by waiting.
4. **Read the headers.** Slow down when the remaining count gets low instead of waiting for the 429.
5. **Back off on 429, then resume.** Never retry in a tight loop. That keeps you limited for longer.

If you are considering scraping x.com directly to get around API limits, X has its own limits there too. [How to scrape Twitter (X) data in 2026](https://www.twittrapi.com/blog/how-to-scrape-twitter-x-data) explains what you run into.

## Frequently asked questions

### What is the X API rate limit?

There is no single number. Each endpoint has its own limit per 15-minute window, counted separately per app and per user. For example, user lookup by username allows 300 requests per 15 minutes per app and 900 per user.

### How long does an X API rate limit last?

Until the current window resets, which is 15 minutes or 24 hours depending on the endpoint. The `x-rate-limit-reset` header tells you the exact time.

### What does error 429 with code 88 mean?

You sent more requests than the endpoint allows in the current window. Wait until the time in `x-rate-limit-reset`, then continue.

### Does paying more raise X API rate limits?

Not on pay-per-usage. Your balance pays for requests, but the limits per window stay the same. Enterprise customers get custom limits.

### Do third-party Twitter APIs have rate limits?

Yes. They are usually set per account per second or per minute. twitterapi.io, SocialData and RapidAPI plans each publish theirs. For a TwittrAPI key, check the marketplace listing or ask support for a direct account. [The cheapest Twitter API in 2026](https://www.twittrapi.com/blog/cheapest-twitter-api-2026) compares their prices, and you can try ours with $0.10 of test credit from [/start](https://www.twittrapi.com/start).

## Sources

- [X API rate limits (docs.x.com)](https://docs.x.com/x-api/fundamentals/rate-limits)
- [X API pricing (docs.x.com)](https://docs.x.com/x-api/getting-started/pricing)
- [twitterapi.io QPS limits](https://twitterapi.io/qps-limits)
- [twitterapi.io documentation introduction](https://docs.twitterapi.io/introduction)
- [SocialData rate limits](https://docs.socialdata.tools/getting-started/rate-limits/)
- [SocialData errors](https://docs.socialdata.tools/getting-started/errors/)
- [RapidAPI response headers](https://docs.rapidapi.com/v1.0/docs/response-headers)
