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) Прошли две попытки, а первый байт ответа так и не пришёл
HTTP 504 с JSON-телом от Wokey Wokey не дождался ответа от апстрима
HTTP 408 Тело запроса загружалось слишком медленно, и шлюз перестал его ждать

Первые четыре сообщения выдаёт сам Claude Code, последние два приходят от сервера.

Ошибки тайм-аута 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. Увеличьте тайм-аут. Если путь проверен, а запросы действительно долгие, поднимите лимит в блоке env файла ~/.claude/settings.json:

{
  "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 мс (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. Полную настройку смотрите в руководстве по config.toml для Codex.

Частые вопросы

Какой таймаут в Claude Code по умолчанию?

Десять минут на запрос, задаётся через API_TIMEOUT_MS (по умолчанию 600000). Увеличить его можно в блоке env файла ~/.claude/settings.json, например "API_TIMEOUT_MS": "1200000".

Как понять, в чём проблема — в сети или в модели?

Отправьте запрос с "stream":true через curl -N. Если строки data: приходят по одной, с маршрутом всё в порядке. Если после долгого ожидания всё появляется разом, где-то посередине ответ буферизуется, и на таком маршруте легко словить таймаут.

Что означает 504 от Wokey?

Все таймауты Wokey возвращаются как 504, а code показывает, на каком этапе всё застряло: upstream_gateway_timeout — истёк таймаут шлюза апстрима, official_exit_first_byte_timeout — апстрим так и не начал отвечать, provider_timeout — соединение с апстримом оборвалось или истекло по таймауту.

Что за wokey-transport-keepalive-v1 в потоке?

Это SSE-комментарий, который Wokey отправляет, когда вывода долго нет, чтобы промежуточные узлы сети не обрывали соединение. Клиенты его игнорируют; если вы его видите, соединение живо и модель всё ещё работает.

Как изменить таймауты в Codex?

Задайте stream_idle_timeout_ms (по умолчанию 300000) и stream_max_retries (по умолчанию 5) в таблице провайдера в config.toml.