Claude Code「Request timed out」:API_TIMEOUT_MS とプロキシの対処法
Wokey Team · 2026-09-24
結論: Request timed out は、Claude Code が期限までに API からレスポンスを受け取れなかったことを意味します。期限はデフォルトで 10 分(API_TIMEOUT_MS=600000)です。ゲートウェイ経由の場合、よくある原因はモデルの遅さではありません。多くの場合、途中にある何かがストリーミングレスポンスを溜め込んでいるか、長く無通信の接続を切断しています。それはローカルのプロキシ、社内ネットワーク、あるいはゲートウェイ自体かもしれません。まず curl でストリームが少しずつ届くことを確認し、それからタイムアウトを延ばすかどうかを判断してください。
どの表示が出ているか
| メッセージ | 意味 |
|---|---|
スピナーの下の Waiting for API response · will retry in … · check your network |
20 秒間データがない。Claude Code はまだ待機中で、この時点ではエラーではない |
Retrying in Ns · attempt x/y |
自動リトライ中。デフォルトで最大 10 回 |
Request timed out |
API_TIMEOUT_MS 以内にレスポンスがなかった |
API Error: No response from API (waited …, then … on the retry) |
2 回の試行でレスポンスの最初のバイトが届かなかった |
| Wokey の JSON ボディ付きの HTTP 504 | Wokey が上流を待つ間にタイムアウトした |
| HTTP 408 | リクエストボディのアップロードが遅すぎたため、ゲートウェイが待つのをやめた |
最初の 4 つは Claude Code 自身から、最後の 2 つはサーバーから来ます。
Wokey のタイムアウトエラー
Wokey のタイムアウトエラーはすべて、標準エラー形式の 504 です。code でリクエストがどこで止まったかがわかります。
code |
意味 |
|---|---|
upstream_gateway_timeout |
上流自身のゲートウェイが、何も出力しないうちにタイムアウトした |
official_exit_first_byte_timeout |
上流が応答を開始しなかった(別のルートでのリトライに費やした時間を含む) |
provider_timeout |
上流への接続が結果を返さないまま切断またはタイムアウトした |
例:
{"error":{"code":"upstream_gateway_timeout","message":"Upstream gateway timed out before producing a response.","type":"invalid_request_error"}}
返答のストリーミングが始まった後にタイムアウトした場合は、HTTP 504 ではなくストリーム内の error イベントとして届きます。
モデルが長く考えているときなど、長時間出力がない場合、Wokey は接続を維持するためにストリームへ定期的に SSE コメントを書き込みます。
: wokey-transport-keepalive-v1
クライアントはコメント行を無視します。curl でテスト中にこれが見えたら、接続は生きていてモデルはまだ処理中です。
トラブルシューティングの手順
1. curl でストリームが少しずつ届くか確認する。
curl -N https://api.wokey.ai/v1/messages \
-H "Authorization: Bearer $ANTHROPIC_AUTH_TOKEN" \
-H "anthropic-version: 2023-06-01" \
-H "content-type: application/json" \
-d '{"model":"claude-sonnet-5","max_tokens":300,"stream":true,"messages":[{"role":"user","content":"Count from 1 to 60"}]}'
-N は curl 自身のバッファリングを無効にします。
event:とdata:の行が届くたびに流れていく: 経路全体は正常です。- 長く待った後にまとめて表示される: 途中の何かがレスポンスをバッファリングしており、その経路では Claude Code がタイムアウトしやすくなります。
2. ローカルのプロキシを確認する。 Claude Code は HTTPS_PROXY とシステムのプロキシ設定に従います。TUN モード、ルールベースのプロキシ、社内ゲートウェイは、いずれもストリーミングレスポンスをバッファリングしたり、アイドル接続を切断したりすることがあります。ネットワークから api.wokey.ai に直接到達できるなら、そのドメインをプロキシの対象外にして再試行してください。プロキシを使わざるを得ない場合は、別のノードと比較してください。
3. タイムアウトを延ばす。 経路に問題がなく、リクエストが本当に長い場合は、~/.claude/settings.json の env ブロックで上限を引き上げます。
{
"env": {
"API_TIMEOUT_MS": "1200000"
}
}
API_TIMEOUT_MSはリクエストごとのタイムアウトで、単位はミリ秒です。デフォルトは 600000(10 分)です。- ネットワーク上のプロキシがレスポンスを完了まで保留する場合、Claude Code のエラーメッセージは
CLAUDE_STREAM_FIRST_BYTE_TIMEOUT_MSも引き上げるよう勧めています。 - 途中で止まったストリームの検出は
CLAUDE_STREAM_IDLE_TIMEOUT_MSで制御します。5 分未満の値は 5 分に引き上げられ、最大は 30 分です。
4. コンテキストを小さくする。 コンテキストが大きいほどアップロードは遅くなり、最初のトークンも遅れます。/compact でセッションを要約するか、新しいセッションを始めてください。
5. 408 が出た場合。 408 は、アップロード中にリクエストボディが届かなくなり、ゲートウェイが待つのをあきらめたことを意味します。ほぼ、不安定なネットワークで非常に大きなコンテキストを送ったときにしか起きません。単純な再試行で通常は成功します。繰り返し起きる場合は、手順 2 のようにプロキシを確認し、/compact でリクエストを小さくしてください。
Codex のタイムアウト
Codex のストリームのアイドルタイムアウトはデフォルトで 300000 ms(5 分)です。これが発動すると idle timeout waiting for SSE または stream disconnected before completion が表示され、自動リトライ中は Reconnecting... n/max が表示されます。これらの設定はプロバイダーテーブルに書きます。
[model_providers.wokey]
name = "Wokey"
base_url = "https://api.wokey.ai"
env_key = "WOKEY_API_KEY"
wire_api = "responses"
stream_idle_timeout_ms = 600000
stream_max_retries = 10
stream_max_retries のデフォルトは 5、request_max_retries のデフォルトは 4 で、どちらも上限は 100 です。設定全体は Codex config.toml ガイドをご覧ください。
よくある質問
Claude Code のデフォルトのタイムアウトは?
1 リクエストあたり 10 分で、API_TIMEOUT_MS(デフォルト 600000)で設定されます。~/.claude/settings.json の env ブロックで、たとえば "API_TIMEOUT_MS": "1200000" のように引き上げてください。
ネットワークとモデルのどちらが原因か見分けるには?
curl -N で "stream":true のリクエストを送ってください。data: 行が 1 行ずつ届くなら経路は正常です。長く待った後にまとめて表示される場合は、途中の何かがレスポンスをバッファリングしており、その経路はタイムアウトしやすくなります。
Wokey が返す 504 はどういう意味ですか?
Wokey のタイムアウトはすべて 504 で、code でどこで止まったかがわかります。upstream_gateway_timeout は上流のゲートウェイがタイムアウトしたこと、official_exit_first_byte_timeout は上流が応答を開始しなかったこと、provider_timeout は上流への接続が切れたかタイムアウトしたことを意味します。
ストリーム内の wokey-transport-keepalive-v1 とは何ですか?
しばらく出力がないときに、中継機器による接続の切断を防ぐため Wokey が書き込む SSE コメントです。クライアントはこれを無視します。これが見えるなら、接続は生きていてモデルはまだ処理中です。
Codex のタイムアウトを変更するには?
config.toml のプロバイダーテーブルで stream_idle_timeout_ms(デフォルト 300000)と stream_max_retries(デフォルト 5)を設定してください。