WEIR

推特 API 速率限制 2026:各接口限额表和 429 解决办法

X(推特)API 速率限制按接口计算,多数每 15 分钟重置。这里有 2026 年各接口限额表、应用和用户令牌的区别、x-rate-limit 响应头,以及测过的 Python 重试代码。


发布于 · 更新于 · 阅读约 7 分钟 · Read in English · 日本語で読む

封面图:每 15 分钟能请求几次

推特 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
15 分钟X 最常见的速率限制窗口
450应用令牌每 15 分钟的最近搜索次数
300 万每月可读推文数,超过就要企业版

推特 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 数据,读这一节时请记住这一点。它没有按接口划分的窗口,所有调用共用每分钟一个额度,按返回的结果收费。

额度随累计购买金额提高:

Weir 各档位每分钟请求数,2026 年 10 月
免费30
第 1 档,累计买满 $5120
第 2 档,累计买满 $100300
第 3 档,累计买满 $500600

工作量大的调用算得更多。一次搜索算 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 不返回数据,所以免费,只是耽误你的时间。

参考来源

以下均为英文页面: