错误与处理
汇总 Echo Token Station 返回的错误正文的格式,以及各种情况下(含视频生成)的 HTTP 状态码、错误正文和处理方法。
Echo 的 API 无法处理请求时,会返回 HTTP 状态码(表示结果的 3 位数字)和 JSON 格式的错误正文。
先确认这几点
- 接入地址:OpenAI 格式是
https://token.echohub.io/v1,Anthropic 格式是https://token.echohub.io。调用路径里没有/v1时,即使密钥正确也会返回 404(返回的不是 JSON,是网站的 HTML 页面) - API 密钥:在控制台的「APIキー」(API 密钥)里确认密钥没有被停用、使用上限还有剩余
- 余额:在控制台的「残高とチャージ」(余额与充值)里确认
- 模型 ID:确认与模型一览里的 ID 一致
错误正文的格式
按调用的端点的格式,以两种格式返回。
| 端点 | 格式 |
|---|---|
/v1/messages(Anthropic 格式) | 与 Anthropic 的 API 相同的格式。error.type 里是错误的种类 |
其他(/v1/chat/completions、/v1/responses 等) | 与 OpenAI 的 API 相同的格式。error.code 里有时是错误的种类 |
Anthropic 格式的示例(密钥错误时):
{"type":"error","error":{"type":"authentication_error","message":"Invalid API key"}}OpenAI 格式的示例(余额不足时):
{"error":{"message":"Insufficient balance","type":"api_error","param":"","code":"insufficient_quota"}}- 请用 HTTP 状态码,以及
error.type(Anthropic 格式)或error.code(OpenAI 格式)判断错误的种类。message的文字可能会变,不要用它来做程序的分支 - 上游 API(实际运行模型的各厂商的 API)返回的错误,
message里有时会原样放入上游的文字 - 各项目的顺序因错误而异
| HTTP 状态码 | Anthropic 格式的 error.type | OpenAI 格式的 error.code(主要的) |
|---|---|---|
| 400 | invalid_request_error | 空字符串、invalid_request、上游的值(例:context_length_exceeded)、视频生成的 task_not_found、task_not_ready、task_failed、upstream_error |
| 401 | authentication_error | 空字符串 |
| 403 | permission_error | insufficient_quota(余额或使用上限不足) |
| 404 | not_found_error | 空字符串、视频生成的 task_not_found |
| 410 | — | artifact_gone(视频生成时,超过了提供方保留文件的期限) |
| 429 | rate_limit_error | rate_limit_exceeded |
| 500、502、503、504 | api_error | server_error、service_unavailable、model_not_found |
| 529 | overloaded_error | — |
OpenAI 格式的 error.type,在 Echo 自己返回的错误里主要是 api_error。原样返回上游的错误时,是上游的值。在视频生成的端点(/v1/videos)里,error.type 是与 HTTP 状态码对应的值(400 是 invalid_request_error,401 是 authentication_error,403 是 permission_error,404 和 410 是 not_found_error,500 以上是 api_error)。
各种情况的原因与处理
| 情况 | HTTP 状态码 | 错误正文的 message | 处理方法 |
|---|---|---|---|
调用路径里没有 /v1 | 404 | 无(返回的不是 JSON,是网站的 HTML 页面) | 改正接入地址 |
调用路径里有两个 /v1 | 404 | Invalid URL (POST /v1/v1/…) | 改正接入地址 |
| 调用了不支持的端点 | 404 | Invalid URL (POST /v1/…) | 在 API 参考确认支持情况 |
| 密钥错误、没有、已停用、已过期、已删除,或使用上限已用完 | 401 | Invalid API key | 在控制台确认密钥的状态和使用上限 |
| 余额不足 | 403 | Insufficient balance | 充值 |
| 这次请求的估算金额超过密钥剩余的使用上限 | 403 | This API key has reached its spending limit | 查看上限与速率限制 |
| 模型 ID 错误,或 Echo 不提供的模型 | 503 | The model {モデル ID} does not exist or is not available | 确认模型 ID |
| 请求无法作为 JSON 读取 | 400 | Invalid request: invalid JSON request body | 改正请求 |
| 请求正文超过 128 MB | 400 | Invalid request: request body exceeds 128 MB: request body too large | 减小请求 |
| 缺少必填项目 | 400 | 包含项目名的文字(例:field messages is required) | 改正请求 |
| 输入超过模型的上下文长度(一次能处理的 token 数) | 400 | 上游的文字(例:prompt is too long: 250000 tokens > 200000 maximum) | 减少输入 |
| 超过账号的速率限制 | 429 | Rate limit exceeded for your account, please retry after 60 seconds | 等待 Retry-After 头里的秒数(60 秒)后重发 |
| 同一 IP 地址的请求太多 | 429 | Too many requests from your IP address, please retry after the number of seconds in the Retry-After header | 等待 Retry-After 头里的秒数后重发 |
| 超过上游 API 的速率限制 | 429 | The model service is temporarily rate limited, please retry after 60 seconds | 等待 Retry-After 头里的秒数(60 秒)后重发 |
| 连不上上游 API | 500 | The model service is temporarily unavailable, please try again later | 稍等一会儿后重发 |
| 上游 API 返回错误 | 500 | 上游的文字(例:Internal server error) | 稍等一会儿后重发 |
| 上游 API 返回的不是 JSON | 502 | Anthropic 格式是 The model service returned an error (HTTP 502), please try again later,OpenAI 格式是 The model service returned an invalid response, please try again later | 稍等一会儿后重发 |
| 上游 API 暂时不可用,或上游 API 那边 Echo 的账号出了问题 | 503 | The model service is temporarily unavailable, please try again later | 稍等一会儿后重发。持续出现时请联系我们 |
| Echo 的服务器暂时停止或繁忙(维护等) | 503 | The service is temporarily unavailable, please try again later | 稍等一会儿后重发 |
| 上游 API 拥挤 | 529 | Overloaded(Anthropic 格式) | 稍等一会儿后重发 |
| 不属于以上任何一种、无法处理的请求 | 400、403 | The request could not be completed | 附上请求 ID 联系我们 |
视频生成的错误
视频生成(/v1/videos)特有的错误。步骤和各模型能用的取值见视频生成。
| 情况 | HTTP 状态码和 error.code | 错误正文的 message | 处理 |
|---|---|---|---|
| 时长、分辨率等取值在这个模型里不能用 | 400,invalid_request 或空字符串 | 写明原因的英文(例:MiniMax-H3 duration must be an integer between 4 and 15 seconds) | 修改取值 |
| 提供方不受理请求 | 400,upstream_error | The model service rejected the request, check the parameters and try again | 确认取值和图片等的 URL |
| 任务 ID 不对,或是别的账号的任务 | 400(获取文件时是 404),task_not_found | Task not found | 确认 ID |
| 完成前就获取文件 | 400,task_not_ready | The video is not ready yet | status 变成 completed 后再获取 |
| 获取失败任务的文件 | 400,task_failed | The video generation failed | 重新提交 |
| 超过了提供方保留文件的期限 | 410,artifact_gone | Artifact content is no longer available | 无法获取。请重新提交 |
在提交时返回的错误不收费。生成失败的任务,查询进度时 status 是 failed,价格已全额退还。
要重试的错误
| 重试 | 不重试 |
|---|---|
| 429、500、502、503(模型 ID 错误除外)、504、529 | 400、401、403、404、410 |
- 一边逐步延长等待时间,一边定好次数上限重试
- 有
Retry-After头时,至少等待那么多秒。账号速率限制和上游 API 速率限制导致的 429 带Retry-After: 60,按 IP 地址限制导致的 429 带要等待的秒数,503 带Retry-After: 5(上游 API 那边 Echo 的账号出问题造成的 503,有时是Retry-After: 60) - 模型 ID 错误也以 503 返回。OpenAI 格式里
error.code是model_not_found。Anthropic 格式里message包含does not exist or is not available - OpenAI 和 Anthropic 的 SDK 默认会对 429 和 500 以上的错误自动重试最多 2 次。模型 ID 错误时也会重试 2 次后才报错。Claude Code 会持续重试 1 分钟以上(Claude Code)
流式输出中途停止时
流式输出(一点一点接收回答的方式)会先返回 HTTP 200,再发送回答。之后上游 API 返回错误或连接断开时,会像下面这样收到(2026-09-27 时。修复预定:[ ])。
| 格式 | 中途上游 API 返回错误时 | 中途连接断开时 | 怎么确认回答完整收到 |
|---|---|---|---|
| Anthropic 格式 | 收不到错误,回答在中途结束 | 回答在中途结束 | 收到 message_stop,并且 message_delta 的 stop_reason 有值 |
| OpenAI 格式(Chat Completions) | 收到包含 error 的数据 | 没有收到 finish_reason 有值的数据,就以 data: [DONE] 结束 | 收到了 finish_reason 有值的数据 |
| OpenAI 格式(Responses API) | 未确认 | 未确认 | 收到了 response.completed |
没有完整收到时,请把同样的请求再发一次。连接断开时,也会收取断开前已生成部分的费用(价格与充值)。
联系我们时
Echo 的 API 处理过的响应,不论成功还是失败,都带有请求 ID(区分每一次调用的编号)。响应头的 X-Request-Id 和 request-id 里是同一个值。
| 使用的东西 | 请求 ID 的查看方法 |
|---|---|
| curl | 加上 -i 运行,看响应头里的 x-request-id |
| OpenAI 的 Python SDK | 响应的 _request_id |
| Anthropic 的 Python SDK | 响应的 _request_id |
请附上下面的信息,通过 https://echohub.io/contact 联系我们。联系表单在 Echo AI Hub 的页面上,会员网站公开后才能使用。
- 出错的时间(日本时间)
- 请求 ID
- 使用的模型 ID 和端点的路径
- 密钥的名称(请不要发送密钥本身)
- HTTP 状态码和错误正文
信息来源
| 内容 | 来源 | 确认日期 |
|---|---|---|
错误正文、HTTP 状态码、Retry-After、请求 ID 的响应头、没有 /v1 时的 404(2026-10-11 重新确认)、流式输出中途停止时的收到方式、SDK 的重试 | Echo 验证环境中的实测。使用统一了错误正文格式的中转设置,并用返回测试响应的服务器代替上游 API | 2026-09-27 |
速率限制的 429 的正文和 Retry-After、503 的 Retry-After、超过 128 MB 的请求的 400,用完上限、已停用、已过期、已删除的密钥返回 401 | Echo 验证环境中的实测(与正式环境相同的中转设置) | 2026-09-28 |
| 按 IP 地址的速率限制 | Echo 中转服务器的设置(2026-09-28 时) | 2026-09-28 |
OpenAI SDK 的自动重试和 _request_id | https://github.com/openai/openai-python | 2026-09-27 |
Anthropic SDK 的 _request_id(从 request-id 头读取) | https://github.com/anthropics/anthropic-sdk-python | 2026-09-27 |
| Anthropic 格式的错误种类 | https://platform.claude.com/docs/en/api/errors | 2026-09-27 |
| 视频生成的错误正文和 HTTP 状态码 | Echo 验证环境中的实测(与正式环境相同的中转设置。用返回测试响应的服务器代替提供方的 API) | 2026-10-01 |