Twitter API 错误码与 HTTP 状态码参考
排查 TwexAPI 的 Twitter/X API 错误:401 认证失败、403 访问受限、429 限流、invalid auth_token、重复推文、私信限额及安全重试。
TwexAPI 通过 HTTP 状态码报告 Twitter/X API 错误;部分响应还会包含上游 X 错误码。401 需要修正凭据,403 需要检查权限或账号状态,429 需要等待限流解除。重试前应先检查响应体。
本页帮助你排查 Twitter API 错误码、invalid auth_token、重复推文和私信限额。下列路径与当前 API 文档 保持一致。MCP 错误、分页恢复和 SDK 示例请参阅 错误处理。
下列消息和上游错误码是排障示例;不同接口的响应结构和 HTTP 状态码映射可能不同。请结合接口 Schema 与实际响应判断。
快速定位 Twitter API 错误
- HTTP 401 /
Invalid auth_token:同时检查 TwexAPI API Key 和写接口使用的 X 会话凭据。参阅 身份认证。 - HTTP 403:根据消息检查额度、私密推文、账号限制或 Premium 要求。重复相同请求不会恢复访问权限。
- HTTP 429 /
Too Many Requests:遵守Retry-After或retry_after,区分请求限流和 X 账号每日限额。参阅 速率限制。 - HTTP 500 / 502 / 503:临时读取错误可以按有上限的退避策略重试。写操作重试前,先确认是否已经执行成功。
- X 错误码 187、344 或 502:这些是上游 X 错误码,与 HTTP 状态码不同。查看 X 错误码表 和 重试常见问题。
错误响应格式
保存 HTTP 状态码和完整 JSON 响应体。TwexAPI 响应可能包含 code 和 msg,参数校验错误使用 detail:
{
"code": 500,
"msg": "Internal server error"
}
{
"detail": [
{
"loc": ["body", "cookie"],
"msg": "Field required",
"type": "missing"
}
]
}
如果响应包含上游附加信息,也请一并保留:
error:错误消息(如果返回)。不要假设所有接口都使用这个字段。twitter_error_code:X 错误码(如果返回),与 HTTP 状态码不同。例如 X 错误码502表示私信限额。retry_after:需要等待的秒数(如果返回)。同时遵守 HTTPRetry-After响应头。
不要要求可选字段一定存在,也不要只按错误消息的精确文本分支。HTTP 状态码非 2xx 时,即使响应体内的 code 不同,也应视为失败。
所有接口的常见错误
任何请求都应检查下列情况;具体错误消息可能不同。
| 状态码 | 消息 | 含义 | 处理方式 |
|---|---|---|---|
| 401 | Invalid or missing API key |
API Key 缺失或无效 | 检查 Authorization: Bearer <key> 请求头 |
| 400 | Missing required … param: <x> |
必填字段或参数缺失、无效 | 修正请求 |
| 429 | Please try again shortly.、Rate limit exceeded… 或 X 限额消息 |
请求过多、临时容量不足或 X 账号达到每日发推/私信限额;可能包含 twitter_error_code |
遵守 retry_after / Retry-After,每日限额需要等待更久 |
| 403 | 余额耗尽或访问被拒绝 | 额度不足或账号权限受限 | 检查余额和账号权限 |
| 422 | 参数校验错误(detail) |
请求字段不符合 Schema | 修正 detail 指出的字段,不要原样重试 |
| 500 | Internal server error |
临时服务错误 | 稍后重试 |
Twitter API HTTP 状态码
| 状态码 | 含义 |
|---|---|
| 200 | 成功 |
| 202 | 如果接口返回此状态,表示已接受,操作仍待处理 |
| 400 | 请求不正确:参数缺失或无效、代理 URL 无效、媒体过大 |
| 401 | 未授权:API Key 无效,或 auth_token 无效、过期 |
| 403 | 额度不足、目标账号私密或被封禁、操作账号受限、权限不足或需要 Premium |
| 404 | 用户、推文或资源不存在 |
| 409 | 冲突,例如重复推文 |
| 410 | 资源不可用,检查响应体是否说明账号被封禁 |
| 422 | 参数校验失败,检查 detail 并修正输入 |
| 423 | 如果 X 返回此状态,表示账号锁定或需要验证 |
| 429 | 请求过多或触发限额 |
| 500 / 502 / 503 | 临时服务端或上游错误,可以按退避策略重试 |
X(Twitter)错误码
当响应包含上游 X 错误码时,可参考下表。这些是 X 错误码,不是 HTTP 状态码;并非每个接口都会提供 twitter_error_code。
| 错误码 | 含义 | 处理方式 |
|---|---|---|
| 32 | 无法认证 | 更新通过 cookie 提交的 X 会话凭据 |
| 63 | 目标账号被封禁 | 使用可访问的账号,或等待访问恢复 |
| 64 | 操作账号被封禁 | 更换账号 |
| 131 | X 内部临时错误 | 重试 |
| 139 | 已点赞 | 确认当前状态,不要重复操作 |
| 144 | 找不到指定 ID 的推文 | 推文已删除,或 ID 不正确 |
| 187 | 重复推文 | 确认此前是否已发布;如果确实要发新推文,修改文本 |
| 226 | 请求被判断为自动化 | 重试时遵守下方写操作恢复规则 |
| 326 | 账号临时锁定 | 在 x.com/account/access 解锁后重试 |
| 327 | 已转推 | 确认当前状态,不要重复操作 |
| 344 | 发推暂时受限(网络/IP 限流) | 退避等待,检查所用代理,并在重试前确认写入结果 |
| 349 | 无法向该用户发送私信 | 对方不接受你的私信 |
| 399 | X 会话登录失败 | 检查 X 会话凭据 |
| 433 | 回复受限或需要 Premium | 推文限制了回复,或此操作需要 X Premium |
| 465 | 无法转推过期推文 | 推文太旧,无法转推 |
| 476 | 不允许发送私信请求 | 当前账号无法发送私信请求 |
| 502 | 达到每日私信请求限额 | 等待 24 小时,或使用限额更高的 X Premium 账号 |
读取推文与搜索
适用于 POST /twitter/{screen_name}/timeline/page、/twitter/tweets-replies/page 和 /twitter/advanced_search/page。
| 状态码 | 消息 | 处理方式 |
|---|---|---|
| 403 | This account's posts are not available. The account is protected (private), suspended, or no longer active. |
不要原样重试。需要先恢复访问权限;私密账号的推文仅批准的关注者可读,改为查询公开账号 |
| 403 | This account is suspended, so its posts are not available. |
目标账号被封禁,使用可访问的账号或等待访问恢复 |
| 502 | Upstream returned an unexpected response — please retry. |
上游错误,按有上限的退避策略重试,保留同一分页游标 |
发推与互动
创建推文
POST /twitter/tweets/create
提交 tweet_content,回复时提供 reply_tweet_id,并通过 cookie 提交 X 凭据。参阅 创建推文或回复。
| 状态码 | X 错误码 | 消息 | 处理方式 |
|---|---|---|---|
| 409 | 187 | Status is a duplicate. |
检查推文是否已发布;发新推文时修改文本 |
| 403 | 433 | The original Tweet author restricted who can reply… |
原推文不允许你回复 |
| 403 | 433 | 长文或长视频需要 Premium | 使用 Premium 账号,或缩短内容 |
| 403 | n/a | 不是社区成员 | 先在 X 上加入社区 |
| 429 | 344 | 发推暂时受限(网络/IP 限流) | 退避等待,检查代理并确认是否已发布 |
| 502 | n/a | X returned an empty result(结果未确认) |
重试前读取账号时间线,确认写入结果 |
| 400 | n/a | File size exceeds… |
减小媒体文件 |
| 503 | 226 | This request looks automated |
退避等待,并在重试前检查写入结果 |
| 502 / 503 | n/a | 临时连接错误 | 重试前确认写入结果;若使用 proxy,检查代理是否正常 |
点赞 / 转推 / 收藏
POST /twitter/tweets/{tweet_id}/like · /twitter/tweets/{tweet_id}/retweet · /twitter/tweets/{tweet_id}/bookmark
DELETE /twitter/tweets/{tweet_id}/like · /twitter/tweets/{tweet_id}/retweet · /twitter/tweets/{tweet_id}/bookmark
| 状态码 | X 错误码 | 消息 | 处理方式 |
|---|---|---|---|
| 403 | n/a | User is suspended, deactivated or offboarded |
账号不可用,切换账号 |
| 401 | 32 | Could not authenticate you |
更新通过 cookie 提交的 X 会话凭据 |
| 403 | 465 | not permitted to retweet an outdated Tweet |
推文太旧,无法转推 |
| 依接口而定 | 139 / 327 | 已点赞 / 已转推 | 确认当前状态,不要重复操作 |
| 429 | n/a | 触发限额 | 降低频率,稍后重试 |
| 502 / 503 | n/a | 临时连接错误 | 确认当前状态后再重试 |
删除推文
POST /twitter/tweets/delete-batch
删除单条推文时传入 target_id。省略该字段会选择批量删除;处理错误时务必保留原请求字段。
| 状态码 | 消息 | 处理方式 |
|---|---|---|
| 404 | No status found with that ID |
已删除或 ID 不正确 |
| 403 | 不是作者 | 只能删除自己的推文 |
| 401 | auth_token 无效 |
更新 X 会话凭据 |
关注 / 取消关注
POST /twitter/user/follow · DELETE /twitter/user/follow
| 状态码 | 消息 | 处理方式 |
|---|---|---|
| 404 | User not found |
检查用户名或 ID |
| 403 | 操作受限 | 当前账号或目标账号不允许此操作 |
| 401 | auth_token 无效 |
更新 X 会话凭据 |
| 429 | 关注限额 | 等待后再重试 |
更新资料 / 头像 / 横幅
POST /twitter/profile
使用 profile_image、profile_banner 提交图片 URL,使用 cookie 提交 X 凭据。
| 状态码 | 消息 | 处理方式 |
|---|---|---|
| 401 | Invalid auth_token - could not fetch credentials |
更新 X 会话凭据 |
| 400 | 图片过大或格式错误 | 修正图片 |
媒体附件
创建推文或发送私信时直接附加媒体;当前 API 文档没有独立媒体上传路径。创建推文的 media_urls 支持最多四张图片,或一个 GIF,或一个视频。GIF/视频不能与其他媒体混用。遇到 URL 无法访问、格式不支持或文件过大时,先修正媒体,再重试。字段与约束以接口 Schema 为准。
私信
POST /v3/twitter/send-dm · /v3/twitter/dm-history · /v3/twitter/conversations
检查私信权限使用 POST /v2/dm/status。参阅 发送私信。
| 状态码 | X 错误码 | 消息 | 处理方式 |
|---|---|---|---|
| 429 | 502 | You've hit your daily message request limit. Subscribe to Premium for higher limits. |
等待 24 小时,或使用 Premium 账号 |
| 403 | 476 | Sender is not verified to send message requests |
当前账号无法发送私信请求 |
| 403 | 349 | Cannot send messages to this user |
对方不接受你的私信 |
| 401 | 32 | Could not authenticate you |
更新 X 会话凭据 |
| 404 | n/a | 会话或用户不存在 | 检查接收方 |
读取数据
POST /v2/tweet/detail · /twitter/tweets/lookup · /twitter/users/by_ids · /v3/twitter/users/followers · /v3/twitter/users/following · /twitter/tweets/thread_by_id · /twitter/tweets/{tweet_id}/replies/page
GET /twitter/{screen_name}/about · /twitter/search-user/{keyword}/{target_count}
| 状态码 | 消息 | 处理方式 |
|---|---|---|
| 404 | Tweet not found: <id> |
推文被删除、受保护或 ID 不正确 |
| 404 | Could not resolve userId for @<handle> |
用户名不存在、已改名或账号被封禁 |
| 404 | Could not find user with ID: <id> |
检查用户 ID |
| 400 | Missing required query param: <x> |
提供必填参数 |
| 429 | 触发限额 | 遵守 retry_after / Retry-After 后重试 |
文章
POST /x/article · GET /x/article/{tweet_id}/markdown
写接口:POST /x/articles/draft · PUT /x/articles/{article_id}/cover · /x/articles/{article_id}/title · /x/articles/{article_id}/content · POST /x/articles/{article_id}/publish 或 /x/articles/publish。
下表的 Premium 要求适用于发布文章。优先使用 分步发布流程,保存 article_id,仅重试失败步骤。
| 状态码 | 消息 | 处理方式 |
|---|---|---|
| 403 | 需要 Premium | 发布文章需要 X Premium 账号 |
| 404 | 文章不存在 | 检查文章 ID |
| 401 | auth_token 无效 |
更新 X 会话凭据 |
| 400 | 内容无效 | 修正文章正文 |
重试指南
| 遇到的情况 | 是否重试 | 说明 |
|---|---|---|
| 429 | ✅ 等待指定时间后 | 同时遵守每日账号限额与请求速率限制 |
| 422 | ❌ | 修正校验响应中指出的字段 |
| 500 / 502 / 503 | ✅ | 临时错误,退避后重试 |
| X 错误码 226 | 检查写入结果后再判断 | 退避等待,并检查账号限制 |
| 401 | ❌ | 修正 API Key 或更新 X 会话凭据 |
| 403(封禁/锁定) | ❌ | 更换账号或先解锁 |
| 404 | ❌ | 检查 ID 或用户名 |
| 400 / 409 | ❌ | 修正参数、媒体大小或重复文本 |
建议: 对 429 和临时 5xx 使用带随机抖动、有次数上限的退避策略。对于 400/401/403/404/409/422,先修正输入、凭据或账号权限。
Twitter API 错误码与重试常见问题
Twitter API 为什么返回 401 或 invalid auth_token?
HTTP 401 可能表示 TwexAPI API Key 缺失或无效。写接口的 Invalid auth_token 或 X 错误码 32 也可能表示 X 会话已过期。先修正 Bearer 请求头,或更新通过 cookie 提交的 X 凭据,再重试。
Twitter API 错误 403 和 429 有什么区别?
HTTP 403 表示访问问题,例如额度不足、内容私密、账号受限或操作需要 Premium。HTTP 429 表示请求或账号触发限额。遇到 403 应修正访问条件;遇到 429 应等待对应限额恢复。
Twitter API 429 Too Many Requests 怎么解决?
如果响应提供 Retry-After 或 retry_after,先等待指定时间,再降低并发并使用有上限的退避策略。每日发推或私信限额需要等待重置,短暂延迟未必有效。读取分页数据时,保留并重试失败页的同一游标。
Twitter 错误码 187 是什么意思?
X 错误码 187 表示推文内容重复。先检查此前的写操作是否已经发布了推文。如果确实要发另一条推文,应修改 tweet_content,不要重复相同请求。
Twitter 错误码 344 是什么意思?
X 错误码 344 表示与网络或 IP 相关的临时发推限制。退避等待,检查你提供的代理,并在重试写操作前查看账号时间线。它属于 X 错误码,与 HTTP 状态码的含义不同。
Twitter API 返回 500、502 或 503 时应该重试吗?
临时读取错误可以采用有上限、带随机抖动的退避策略重试。写操作超时或返回 5xx 后,应先查询时间线、私信历史或互动状态。响应失败不能证明写操作没有执行。
TwexAPI 的 422 参数校验错误应该重试吗?
不要使用相同输入重试。TwexAPI 的 HTTP 422 表示请求参数校验失败。检查 detail 中的字段、位置和类型,再根据接口 Schema 修正请求。
Twitter 错误码 502 与 HTTP 502 是一回事吗?
不是。X 错误码 502 表示每日私信请求限额,可能随 HTTP 429 返回。HTTP 502 表示上游响应失败。选择重试策略前,应同时检查 HTTP 状态码与响应提供的 twitter_error_code。