Skip to main content

错误结构

所有错误响应均为 JSON,Content-Type: application/json
部分端点会包含额外字段:
OAuth 端点遵循 RFC 6749 §5.2 错误码:invalid_requestinvalid_clientinvalid_grantunsupported_grant_typeinvalid_scope

状态码

读取 X-Billing-Verification

对于返回 JSON 的网关入口,X-Billing-Verification 通常与响应体中的计费 code 一致。Pro-MCP OAuth 流程有意采用两种响应结构:grant 握手端点以 TIER_VERIFICATION_UNAVAILABLE 表示可重试的校验故障,以 INSUFFICIENT_TIER 表示真正的权益不足;/oauth/authorize-pro 则返回 HTML。服务方确认付费覆盖期已经结束时,OAuth 预检查不会返回这两种拒绝,而会保留 OAuth 身份并签发受限、按额度计量的免费账户令牌。该响应头已列入 Access-Control-Expose-Headers,因此浏览器客户端可以跨域读取。请依据响应头而非仅依据状态码分支:这些入口返回的 503 也可能表示「必需的环境变量未配置」——那是不可重试的;其他 API handler 仍可能返回终态的 subscription_lapsed 当非 OAuth handler 返回 subscription_lapsed,或覆盖期在一次 Pro MCP 调用执行中途结束而返回该错误时,它是终态且不携带 Retry-After;正确动作是恢复订阅,而不是重试。若 OAuth grant 预检查已经确认该失效,调用方会改走受限免费账户路径。即使没有计费响应头,也应将 INSUFFICIENT_TIER 视为终态,并将 TIER_VERIFICATION_UNAVAILABLE 视为可重试。

生成式 RPC 的计费拒绝

生成式 RPC 处理程序会在各自原生的错误形态中保留同一项计费判定。summarizeArticle 在成功的 RPC 信封内报告错误,因此可重试的计费状态使用 status: SUMMARIZE_STATUS_ERRORerrorType: ServiceError,并在 statusDetail 中携带计费代码;由提供方确认的订阅失效则使用 errorType: AuthError。scenario、shipping-v2 与 forecast-simulation 处理程序改用生成的 ApiError 异常,因此可重试状态会返回 HTTP 503,同时携带 Retry-AfterX-Billing-Verification 与相同的响应体 code。已确认的免费调用方仍会收到原有的 Pro-required 403

常见错误字符串

重试策略

幂等读GET):对 429/5xx 使用指数退避重试(1 秒、2 秒、4 秒,上限 30 秒,共 5 次)。大多数 GET 响应在边缘已缓存,因此重试通常更快完成。 写入:切勿自动重试 4xx。对于写入时的 5xx,需甄别:POST /api/brief/share-urlPOST /api/v2/shipping/webhooks 是幂等的;POST /api/scenario/v1/run-scenario 幂等 — 每次调用都会入队一个新作业。对 run-scenario 重试 5xx 可能会使速率限制计数翻倍。 MCP:服务器在 JSON-RPC 结果中以 isError: true 和文本说明返回工具错误 — 这些并非 HTTP 错误。请在工具调用层进行处理。

调试

  • 每个 Edge 响应都包含 x-vercel-idx-worldmonitor-deploy 头 — 上报问题时请一并提供。
  • Sentry 告警会转发到 status.worldmonitor.app
  • GET /api/healthGET /api/seed-health 显示各 seed 的数据新鲜度;某个 seed 过期是出现意外空载荷的最常见根因。