---
title: "Twitter API 429、403、401 错误：原因与解决方法"
description: "解决 X (Twitter) API 的 429 Too Many Requests、403 Forbidden 和 401 Unauthorized 错误：每个状态码在官方 X API 和 TwexAPI 上分别代表什么、该看哪些响应头、什么时候可以重试。"
lastModified: "2026-10-19"
sidebar:
  label: "429、403、401 错误"
seo:
  title: "Twitter API 429、403、401 错误怎么解决"
search:
  tags: ["twitter 429 错误", "推特 api 429", "twitter api 403 forbidden", "twitter api 401 unauthorized", "Request failed with status code 401", "x-rate-limit-reset"]
---

**简短回答：** `429` 表示请求太多，需要等待；`403` 表示凭据有效，但没有权限做这件事；`401` 表示凭据缺失或错误。只有 `429` 等一等就能恢复。`403` 和 `401` 不改请求、凭据或权限，重试多少次都是同样的错误。

| 状态码 | 含义 | 先检查什么 | 能重试吗？ |
| :--- | :--- | :--- | :--- |
| **429 Too Many Requests** | 触发了速率限制、用量上限或账号每日上限 | `x-rate-limit-reset` 或 `Retry-After` 响应头 | ✅ 等到提示的时间后 |
| **403 Forbidden** | 已通过认证，但无权调用这个接口、执行这个操作或访问这个账号 | 应用权限、令牌类型、授权范围、Credits、目标账号 | ❌ 先解决权限问题 |
| **401 Unauthorized** | 凭据缺失、无效、过期或签名错误 | `Authorization` 头，以及用的是哪个 key 或 token | ❌ 先修正凭据 |

不管你是直接调 API，还是在工具里看到报错，处理方法都一样。`Request failed with status code 401`、`status code 429` 这类提示来自 HTTP 客户端（比如 n8n 和很多 Node.js 机器人使用的 axios），里面的状态码就是你调用的那个 API 返回的，含义相同。

## 先确认是哪个 API 返回的错误

同一个状态码，来源不同，原因也不同：

- **官方 X API**（`api.x.com` 或 `api.twitter.com`）：错误遵循 X 开发者平台关于应用、项目、OAuth 和限流窗口的规则。
- **TwexAPI**（`api.twexapi.io`）：错误与你的 TwexAPI key、Credits，以及写操作时提供的 X 会话有关。完整列表见 [TwexAPI 错误码参考](/zh/guides/error-reference)。
- **x.com 网页或 X App**：浏览时出现的 "Rate limit exceeded" 来自 X 对你账号的限制，和任何开发者 API 都无关。

## Twitter API 429 Too Many Requests

### 官方 X API

X 按接口限流，窗口通常是 15 分钟或 24 小时，并且按应用和按用户分别计算。每个响应都带有三个响应头：

| 响应头 | 含义 |
| :--- | :--- |
| `x-rate-limit-limit` | 当前窗口允许的请求数 |
| `x-rate-limit-remaining` | 当前窗口剩余的请求数 |
| `x-rate-limit-reset` | 窗口重置时间（Unix 时间戳） |

超出限制时，X 返回 HTTP `429`。旧的 v1.1 风格响应体会带错误码 `88` 和 `Rate limit exceeded`；新的 problem 响应使用 `rate-limit-exceeded` 类型。如果是账号用量达到上限而不是限流窗口用完，则返回 `usage-capped`。

解决方法：

1. **等到 `x-rate-limit-reset` 再请求。** 提前重试只会再拿到一个 `429`。
2. **盯住 `x-rate-limit-remaining`。** 在它归零之前就放慢速度，而不是等到报错。
3. **留意每日上限。** 发帖、点赞等部分写接口有按应用或按用户计算的 24 小时上限，等几分钟不会重置。
4. **做缓存，把请求分散开。** 不要反复拉取同一个资料或推文，也不要让所有任务都在整点同时启动。

在按量计费的 X API 上，限流和计费是分开的。请求没超限也照样计费，所以缓存既省配额也省钱。

### TwexAPI

TwexAPI 的 `429` 可能是请求被限速，也可能是写操作时触发了 X 账号的上限（例如 X 错误码 `344` 发帖限制，或 `502` 每日私信上限）。有 `Retry-After` 响应头或 `retry_after` 字段时按它等待。账号的每日上限要等到重置周期结束，短暂重试没有用。退避和分页安全恢复见 [速率限制](/zh/guides/rate-limits)。

### 浏览器里的 x.com 或 X App

X 会限制每个账号能加载的内容量。刷时间线时看到 "Rate limit exceeded"，先等一会儿再刷新，关掉多余的标签页和自动刷新插件，避开很多人共用的网络或 VPN 出口。如果只是想免登录看公开主页，可以用免费的 [Twitter 查看器](https://twexapi.io/twitter-viewer)。

## Twitter API 403 Forbidden

`403` 表示 X 或 TwexAPI 认出了你的凭据，但拒绝了这个请求。原样重试只会得到同样的 `403`。

### 官方 X API

| 原因 | 典型表现 | 解决方法 |
| :--- | :--- | :--- |
| **应用未加入项目或没有访问权限** | `client-forbidden` 问题类型；旧响应为错误码 `453`（"You currently have access to a subset of…"） | 使用挂在 Project 下的应用的密钥，并确认账号的访问级别包含该接口 |
| **令牌类型不对** | 用仅应用（app-only）Bearer Token 发帖、点赞、关注或发私信 | 改用用户上下文令牌：OAuth 1.0a 的 access token 和 secret，或 OAuth 2.0 用户令牌 |
| **缺少权限或授权范围** | 只读应用的用户令牌，或缺少 `tweet.write` 等 scope 的 OAuth 2.0 令牌 | 把应用权限改为 Read and write（需要私信再加 Direct Messages），然后**重新生成** access token 和 secret，或让用户重新授权 |
| **资源受保护或不可用** | `not-authorized-for-resource` 问题类型 | 目标账号已设为私密或内容受限；请求当前用户能看到的内容 |
| **重复或受限的操作** | 发帖内容重复、推文限制了回复、已经点过赞 | 修改内容，或先确认当前状态再重试 |

修改应用权限不会更新已经生成的令牌。改成 Read and write 后必须重新生成用户令牌，否则发帖还是会返回 `403`。

### TwexAPI

TwexAPI 返回 `403` 通常是以下几种情况：

- **Credits 用完了**：用 [Get Balance](/zh/api-reference/balance-endpoints/get-balance-api-balance-get) 查余额，在 [控制台](https://twexapi.io/dashboard) 充值。
- **目标账号私密或被封禁**：只有获批的关注者能看到它的帖子。请改为请求公开账号。
- **账号或操作受限**：写操作用的 X 账号被封禁或锁定、推文限制了回复（X 错误码 `433`），或该操作需要 X Premium。

每条报错信息及对应解决方法见 [错误码参考](/zh/guides/error-reference)。

## Twitter API 401 Unauthorized

`401` 表示请求没能证明你的身份。先修正凭据，原样重试永远不会成功。

### 官方 X API

- **请求头格式错误**：仅应用请求必须是 `Authorization: Bearer <token>`。漏了 `Bearer ` 前缀、多了引号、环境变量末尾带换行，都会返回 `401`。
- **凭据已重新生成或被吊销**：在开发者后台重新生成密钥后，旧密钥立即失效。所有保存了旧密钥的地方都要更新。
- **凭据组合不对**：OAuth 1.0a 需要 consumer key 和 secret，**再加上**用户的 access token 和 secret。混用两个应用的密钥，或在需要 token 的地方填了 API key，都会返回 `401`。
- **OAuth 1.0a 签名错误**：错误码 `32`（`Could not authenticate you`）通常是签名不对。检查参数的 URL 编码，并确认服务器时间准确；时间戳偏差会让签名失效。
- **OAuth 2.0 用户令牌过期**：用户访问令牌会过期。申请 `offline.access` scope，用 refresh token 换新令牌。

### TwexAPI

- **API key 缺失或错误**：请求头使用 `Authorization: Bearer YOUR_API_KEY`，key 从 [控制台](https://twexapi.io/dashboard) 获取。详见 [身份验证](/zh/authentication)。
- **写接口上的 X 会话过期**：发帖、点赞或私信时返回 `Invalid auth_token` 或 X 错误码 `32`，说明你在 `cookie` 里提供的 X 会话凭据过期了。更新它即可，你的 API key 没问题。

## 只重试能成功的请求

下面这个 Python 函数只重试 `429` 和临时性的 `5xx`，其他状态码直接返回。它同时支持 `Retry-After`（TwexAPI 和大多数 HTTP API）和 `x-rate-limit-reset`（官方 X API）：

```python
import random
import time

import requests


def request_with_retry(method, url, max_attempts=5, **kwargs):
    for attempt in range(max_attempts):
        response = requests.request(method, url, timeout=30, **kwargs)
        if response.status_code != 429 and response.status_code < 500:
            return response  # success, or a 4xx that waiting won't fix

        wait = None
        retry_after = response.headers.get("Retry-After", "")
        reset_at = response.headers.get("x-rate-limit-reset", "")
        if retry_after.isdigit():
            wait = int(retry_after)
        elif reset_at.isdigit():
            wait = max(0, int(reset_at) - time.time()) + 1
        if wait is None:
            wait = min(300, 5 * 2 ** attempt) + random.uniform(0, 1)

        time.sleep(wait)

    return response
```

分页读取时，遇到 `429` 后要用**同一个游标**重试，不要跳到下一页。写操作在重发之前，先确认帖子、点赞或私信是否已经成功；超时不代表操作失败。

## 如果真正的问题是官方限额

如果你的应用读数据时总是撞上 `429`，或者按次计费的账单涨得比数据量还快，可以比较一下按量计费的第三方 API。TwexAPI 读取推文约每 1,000 条 0.05 美元，只需 API key，无需配置 OAuth；官方 X API 每读取 1,000 条帖子收费 5 美元。详见 [TwexAPI 与官方 X API 对比](/zh/comparison/official-x-api) 和 [X API 价格计算器](https://twexapi.io/x-api-pricing)。TwexAPI 与 X Corp. 无关联，也未获其认可。

## Twitter API 429、403、401 常见问题

### Twitter API 的 429 要等多久？

等到 `x-rate-limit-reset` 指示的时间，通常在 15 分钟以内。发帖等有 24 小时上限的接口，要等到每日窗口重置。在 TwexAPI 上，按 `Retry-After` 或 `retry_after` 等待。

### 用 X API 发推为什么返回 403 Forbidden？

通常是因为令牌没有写权限：可能用的是仅应用 Bearer Token，或应用设置为只读，或用户令牌是在开启 Read and write 之前生成的。打开写权限，重新生成用户令牌，并用用户上下文认证发帖。

### n8n 里的 "Request failed with status code 401" 是什么意思？

说明 X API 或 TwexAPI 拒绝了该 HTTP 节点里的凭据。检查 `Authorization` 头是否为 `Bearer` 加有效的 key 或 token、凭据是否被重新生成过，以及写操作是否使用了用户上下文凭据。TwexAPI 的可用配置见 [n8n 指南](/zh/guides/n8n)。

### 403 和 429 有什么区别？

`429` 是请求太多，需要等待；`403` 是根本不允许发这个请求。`429` 等一等就好，`403` 需要改权限、授权范围、Credits 或请求的目标。

### Twitter 错误码 88 是什么意思？

X 错误码 `88` 表示 `Rate limit exceeded`，随 HTTP `429` 一起返回。等到 `x-rate-limit-reset` 之后再发下一个请求。

### Twitter 错误码 32 是什么意思？

X 错误码 `32` 表示 `Could not authenticate you`，随 HTTP `401` 一起返回。在官方 API 上通常是 OAuth 1.0a 签名或令牌有误；在 TwexAPI 的写接口上，表示你提供的 X 会话凭据已过期。

## 相关页面

- [Twitter API 错误码参考](/zh/guides/error-reference)：TwexAPI 的所有状态码和 X 错误码及解决方法
- [速率限制](/zh/guides/rate-limits)：退避、`Retry-After` 和分页安全恢复
- [错误处理](/zh/guides/error-handling)：MCP、SDK 和写操作的恢复
- [身份验证](/zh/authentication)：API key 和 X 会话凭据
