エラーと対処
Echo Token Station が返すエラー本文の形式と、状況ごとの HTTP ステータス、エラー本文、対処(動画生成を含む)をまとめています。
Echo の API は、リクエストを処理できなかったとき、HTTP ステータス(結果を表す 3 桁の番号)と JSON のエラー本文を返します。
まず確かめること
- 接続先 URL:OpenAI 形式は
https://token.echohub.io/v1、Anthropic 形式はhttps://token.echohub.ioです。呼び出し先のパスに/v1がないと、キーが正しくても 404 になります(JSON ではなく、Web サイトの HTML ページが返ります) - API キー:コンソールの「APIキー」で、停止していないか、利用上限が残っているかを確認します
- 残高:コンソールの「残高とチャージ」で確認します
- モデル ID:モデル一覧の ID と一致しているかを確認します
エラー本文の形式
呼び出したエンドポイントの形式に合わせて、2 つの形式で返します。
| エンドポイント | 形式 |
|---|---|
/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 ではなく、Web サイトの HTML ページが返ります) | 接続先 URL を直す |
呼び出し先のパスに /v1 が 2 回入っている | 404 | Invalid URL (POST /v1/v1/…) | 接続先 URL を直す |
| 対応していないエンドポイントを呼んだ | 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) | リクエストを直す |
| 入力がモデルのコンテキスト長(一度に扱えるトークン数)を超えた | 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(1 回の呼び出しを見分ける番号)が付きます。レスポンスヘッダーの 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 |