推特 API 速率限制 2026:各接口限额表和 429 解决办法
X(推特)API 速率限制按接口计算,多数每 15 分钟重置。这里有 2026 年各接口限额表、应用和用户令牌的区别、x-rate-limit 响应头,以及测过的 Python 重试代码。
Tarun Khatri
发布于 · 更新于 · 阅读约 7 分钟 · Read in English · 日本語で読む
推特 API 速率限制,是每个接口在一个时间窗口里最多接受的请求次数,窗口通常是 15 分钟。
这篇写给反复收到 429 Too Many Requests 的开发者。你会看到 X(推特)现在的各接口限额、三个响应头的读法,和一段我们测过的重试代码。
一次调用就能看到某个接口还剩多少额度。X 把它算作一次用户读取,收 $0.010:
curl -s -D - -o /dev/null "https://api.x.com/2/users/by/username/XDevelopers" \
-H "Authorization: Bearer $X_BEARER_TOKEN" | grep -i x-rate-limit
推特 API 速率限制一览:每个接口每 15 分钟几次?
下面是大家最常问的读取接口,来自 X 的速率限制页,2026 年 10 月 26 日核对。数字都是每 15 分钟:
| 接口 | 每个应用 | 每个用户 |
|---|---|---|
| 最近搜索 | 450 | 300 |
| 全量历史搜索 | 300,且每秒 1 次 | 每秒 1 次 |
| 用户查询,按 ID 或用户名 | 300 | 900 |
| 用户推文时间线,按 ID | 10,000 | 900 |
| 提及时间线 | 450 | 300 |
| 粉丝或关注列表 | 300 | 300 |
| 推文批量查询,多个 ID | 3,500 | 5,000 |
这张表藏着一个坑。按用户名取时间线,每个应用只有 1,500 次,不是 10,000 次。所以先查一次数字 ID,之后一直用它。
按天计的限额大多在写操作上。一个应用每天最多发 10,000 条推文。每个用户每天最多点 1,000 个赞。
网上不少教程还在引用旧的免费版限额。截至 2026 年 10 月 26 日,X 的价格页已经不列免费套餐,读取按量计费,限额以上表为准。
Bearer Token 还是用户令牌:你用的是哪一列?
用哪一列,由令牌决定。X 的页面说,Bearer Token 走每个应用的限额,OAuth 1.0a 或 OAuth 2.0 用户令牌走每个用户的限额。
- Bearer Token:整个应用在每个接口上共用一份额度。
- 用户令牌:每个登录的用户各算各的。
两列没有哪一列总是更大。用户查询是每个用户给得多,用户推文时间线则是每个应用给得多。
x-rate-limit 响应头怎么看?
X API 的每个响应都带三个响应头。这是 X 文档里的例子:
x-rate-limit-limit: 900
x-rate-limit-remaining: 847
x-rate-limit-reset: 1705420800
x-rate-limit-limit是这个接口一个窗口的总额度。x-rate-limit-remaining是还剩多少。到 0 时,下一次调用就会收到 429。x-rate-limit-reset是窗口恢复的时间,Unix 时间戳,单位是秒。
要算等多久,用重置时间减去当前时间,再多留 1 秒。
429 不一定是速率限制:三种不同的“停”
X 拒绝请求有三种原因,只有一种会在窗口重置后解除:
- 速率限制,返回 429。窗口里调用太多,等到
x-rate-limit-reset就好。 - 每月用量上限,也是 429。X 的价格页规定,按量计费每个计费周期最多读 300 万条推文。X 的错误码页把这种 429 归为
usage-capped类型。 - 积分用完,返回 402。只有充值能解决,见我们的 X API 402 错误指南。
你自己设的消费上限是第四种。X 的价格页说,花到上限后,请求会被拦到下一个计费周期。
速率限制和计费也是两回事。X 的速率限制页说,你可能没超限,却照样产生用量费用。
429 Too Many Requests 怎么解决:等到重置时间再试
睡到重置时间,限制重试次数,碰到月度上限就停。这个函数在 remaining 归零时也会先暂停,所以大多数 429 根本不会出现:
import time, requests
def sleep_until_reset(r):
reset = int(r.headers.get("x-rate-limit-reset", time.time() + 60))
time.sleep(max(reset - time.time(), 0) + 1)
def x_get(url, headers, params=None, tries=4):
for _ in range(tries):
r = requests.get(url, headers=headers, params=params, timeout=30)
if r.status_code != 429:
if r.headers.get("x-rate-limit-remaining") == "0":
sleep_until_reset(r) # 下一次调用会收到 429
return r
if "usage-capped" in r.text:
raise RuntimeError("已到每月上限:等窗口重置也没用。")
sleep_until_reset(r)
return r
X 自己的示例每次至少等 60 秒。这段代码只等重置时间要求的那么久。
2026 年 10 月 22 日,我们用一个本地模拟服务器测了它,服务器返回 X 格式的响应头。窗口设成每 10 秒 3 次,所以测试跑得很快:
15:41:16 NASA 200 remaining 2
15:41:16 github 200 remaining 1
15:41:28 XDevelopers 200 remaining 0
15:41:28 Google 200 remaining 2
第三次调用用掉了最后的额度,所以 x_get 先睡到重置,再返回结果。
真的撞上 429 时,它等了 12 秒,然后拿到 200。换成 usage-capped 的响应,它马上停下。
用 Tweepy 的话,wait_on_rate_limit=True 也会睡到重置再试。但它的源码里没有重试次数上限,碰上月度上限会一直重试。其他状态码见推特 API 错误码速查。
X 文档没写清的四件事
2026 年 10 月 26 日,我们在 X 的文档里找了这些,没找到:
- 窗口怎么计数。X 只给重置时间,没说窗口是固定的还是滚动的。
- 月度上限的 429 带什么。X 没说那时
x-rate-limit-reset代表什么。 - 消费上限返回哪个状态码。价格页只描述了拦截,没写状态码。
- 企业版的数字。企业版限额是定制的,没有公开。
拿不准的时候,以你自己响应里的响应头为准。
Weir 的速率限制:每分钟一个额度,按结果计费
Weir 是我们做的只读 API,读公开的 X 和 Reddit 数据,读这一节时请记住这一点。它没有按接口划分的窗口,所有调用共用每分钟一个额度,按返回的结果收费。
额度随累计购买金额提高:
工作量大的调用算得更多。一次搜索算 2 次请求,所以免费档每分钟能搜 15 次。
每个计费的响应都带 ratelimit-limit、ratelimit-remaining 和 ratelimit-reset。429 还多一个 Retry-After,单位是秒:
import os, time, requests
HEADERS = {"Authorization": f"Bearer {os.environ['WEIR_API_KEY']}"}
def weir(method, path, tries=4, **kwargs):
for _ in range(tries):
r = requests.request(method, f"https://api.weirapp.io{path}",
headers=HEADERS, timeout=60, **kwargs)
if r.status_code != 429:
return r # 402 永远不该重试:停下,去充值
wait = int(r.headers.get("Retry-After", "5"))
print(f" 429, Retry-After {wait}s")
time.sleep(wait)
return r
同一天,我们用它向一个照搬 Weir 限流代码的模拟服务器发了 17 次搜索,按免费档每分钟 30 次算。前 15 次直接通过,然后:
16:00:15 15 200 0
429, Retry-After 49s
16:01:04 16 200 0
429, Retry-After 4s
16:01:08 17 200 0
每次等完再试都成功了。Weir 的窗口是滚动的一分钟,额度随早先的请求移出窗口逐步恢复,所以第二次只等了 4 秒。
在 Weir 上,被拒绝的调用不收钱。GET /v1/limits 也免费,返回你的档位和每分钟上限。每个状态码都在 Weir 错误文档(英文)里。
什么时候不适合用 Weir
- 你要发推、点赞或关注。Weir 只读,写操作要用 X 自己的 API。
- 需要和 X 本身签合同,或者用量超过每月上限,要上企业版。
- 读的是你自己的账号。截至 2026 年 10 月,X 对自有读取每条只收 $0.001。
- 单价是唯一的标准。TwitterAPI.io 标价每千条推文 $0.15,比 Weir 的小套餐便宜。
Weir 和 X 没有关联,访问方式可能变化。两者每千条推文的价格对比见推特 API 替代方案。
常见问题
X API 的速率限制是多少?
看接口和令牌。以最近搜索为例,应用令牌每 15 分钟 450 次,用户令牌是 300 次。用户查询则是每个应用 300 次、每个用户 900 次。每个接口的数字都列在 X 的速率限制页上。
推特 API 报 429 要等多久?
等到 x-rate-limit-reset 给出的时间,大多数读取接口不超过 15 分钟。有些限额按天算。月度用量上限按计费周期算,它的 429 不会在下一个窗口解除。
推特 API 限额是按应用还是按用户算?
两种都有。Bearer Token 消耗你的应用在这个接口上的额度,用户令牌消耗这个用户自己的额度。X 给每个接口都列了两个数字,而且常常不一样。
收到 429 会扣钱吗?
不会。X 的用量和计费页说,只有返回了数据的成功响应才计费。429 不返回数据,所以免费,只是耽误你的时间。
参考来源
以下均为英文页面:
- X API 速率限制(2026 年 10 月 26 日核对):https://docs.x.com/x-api/fundamentals/rate-limits
- X API 响应码与错误(2026 年 10 月 26 日核对):https://docs.x.com/x-api/fundamentals/response-codes-and-errors
- X API 用量与计费(2026 年 10 月 26 日核对):https://docs.x.com/x-api/fundamentals/post-cap
- X API 价格(2026 年 10 月 26 日核对):https://docs.x.com/x-api/getting-started/pricing
- X 按量计费开发者协议,第 III.D 节(2026 年 10 月 26 日核对):https://docs.x.com/developer-terms/ppu-agreement
- Tweepy 4.17.0 源码,client.py(2026 年 10 月 26 日核对):https://github.com/tweepy/tweepy/blob/v4.17.0/tweepy/client.py
- TwitterAPI.io 价格(2026 年 10 月 26 日核对):https://twitterapi.io/pricing
- Weir 错误与速率限制:https://docs.weirapp.io/errors
- Weir 计费与档位:https://docs.weirapp.io/billing
- 我们用本地模拟服务器测试 X 的响应头和 Weir 的限流器,2026 年 10 月 22 日