404 на /v1/responses в Codex CLI: причина в wire_api
Актуальный статус на 2026-09-14: этот404у go2llm больше не воспроизводится. EndpointPOST /v1/responsesопубликован, и через него прошёл живой прогон Codex CLI0.151.0—codex execпрочитал файл тестового проекта, исполнил инструменты и внёс правку. Готовый конфиг~/.codex/config.tomlи границы проверки — на странице Codex API. Разбор ниже сохранён как есть: он объясняет механикуwire_apiи остаётся верным для любого стороннего провайдера, у которого/v1/responsesнет.
Codex CLI отдаёт 404 на кастомном провайдере, потому что обращается к endpoint /v1/responses — формату OpenAI Responses API. Актуальные версии Codex CLI поддерживают для model_providers только wire_api = "responses", а значение wire_api = "chat" сам Codex отклоняет с ошибкой «no longer supported». Если у провайдера endpoint /v1/responses не опубликован, Codex CLI к нему не подключается. Это проверено живым запросом. У go2llm так было до 2026-09-14 — теперь endpoint есть, см. врезку выше.
Страница составлена 2026-09-11, обновлена 2026-09-14.
Как выглядит ошибка
При настройке go2llm как кастомного провайдера Codex CLI завершает запрос ошибкой уровня маршрута — 404 на POST /v1/responses. Тело ответа go2llm на несуществующий маршрут:
{
"error": {
"type": "model_not_found",
"code": "model_not_found",
"message": "model is not in the published catalog",
"request_id": "gw_0b74a3e12c9d4f58ae0176b3c82d5e4f"
}
}
Попытка обойти это, переключив протокол на Chat Completions, упирается во вторую стену — Codex CLI сам отказывается стартовать:
# ~/.codex/config.toml
[model_providers.go2llm]
name = "go2llm"
base_url = "https://go2llm.tech/v1"
env_key = "GO2LLM_API_KEY"
wire_api = "chat" # Codex CLI: "no longer supported"
То есть неработающих путей два: wire_api = "responses" даёт 404 от go2llm, wire_api = "chat" отклоняется самим Codex CLI. Обхода на стороне конфига не существует.
Причины
1. Codex CLI жёстко требует Responses API
Актуальные версии Codex CLI для кастомных провайдеров в секции model_providers файла ~/.codex/config.toml поддерживают единственное значение wire_api = "responses". Это формат OpenAI Responses API — другой протокол, а не вариант Chat Completions: у него другой путь, другая структура тела и другой формат событий стрима.
2. Режим chat в Codex CLI отключён
Значение wire_api = "chat" в актуальных версиях Codex CLI отклоняется с сообщением «no longer supported». Это решение самого Codex CLI, а не ограничение провайдера: даже полностью совместимый с OpenAI Chat Completions шлюз через этот режим подключить нельзя.
3. У провайдера нет endpoint /v1/responses
Обращение к /v1/responses у провайдера, который его не публикует, попадает в несуществующий маршрут и возвращает 404. У go2llm так было до 2026-09-14: публиковались POST /v1/messages (Anthropic Messages), POST /v1/chat/completions (OpenAI Chat Completions) и POST /v1/images/generations. С 2026-09-14 POST /v1/responses опубликован и проверен живым прогоном Codex CLI — настройка на странице Codex API. Embeddings, image edits, video и audio по-прежнему не опубликованы.
4. 404 здесь не про ключ и не про баланс
Разработчики обычно начинают отладку с перевыпуска ключа — это тупик. Запрос к /v1/responses возвращает 404 при любом ключе, включая валидный, и не списывает с баланса ничего: go2llm резервирует стоимость только после того, как маршрут и модель разрешены. Если бы дело было в ключе, ответ был бы 401 no-key — разбор на странице про 401.
5. Смена base_url сама по себе не помогает
Codex CLI дописывает /responses к базовому адресу, поэтому получаются /responses или /v1/responses. Если маршрута нет — не поможет ни один из вариантов. Если он есть, важно закончить base_url на /v1: без него Codex постучится в https://go2llm.tech/responses и снова получит 404.
Как починить по шагам
Шаг 0. Для go2llm с 2026-09-14 починка есть прямо в Codex CLI: base_url = "https://go2llm.tech/v1", wire_api = "responses", ключ через env_key. Полный конфиг и границы проверки — на странице Codex API. Шаги ниже остаются рабочими альтернативами и нужны, если провайдер Responses API не публикует.
Шаг 1. Claude Code — проверено живым запросом, протокол Anthropic Messages. Base URL указывается без /v1, потому что Anthropic SDK добавляет его сам:
export ANTHROPIC_BASE_URL=https://go2llm.tech
export ANTHROPIC_AUTH_TOKEN=YOUR_API_KEY
export ANTHROPIC_MODEL=claude-sonnet-5
claude
Используйте именно ANTHROPIC_AUTH_TOKEN, а не ANTHROPIC_API_KEY: при наличии сохранённого логина в Claude Code вторая переменная может уступить ему, и запрос уйдёт мимо go2llm с ошибкой 401.
Шаг 2. OpenCode — проверено живым запросом, протокол OpenAI Chat Completions. Конфигурация в opencode.json:
{
"provider": {
"go2llm": {
"npm": "@ai-sdk/openai-compatible",
"name": "go2llm",
"options": { "baseURL": "https://go2llm.tech/v1" },
"models": { "claude-sonnet-5": {}, "gpt-5.6-sol": {} }
}
}
}
opencode run "Отрефакторь функцию parse_config" -m go2llm/claude-sonnet-5
Шаг 3. Любой клиент со своим base URL. Cline, RooCode, Continue.dev и Aider работают по OpenAI Chat Completions, если клиент позволяет задать base URL — по документации это так, вручную go2llm их не тестировал. Kilo Code — тот же статус: по документации работает, живой проверки не было. Для Cursor инструкции нет: Cursor мы живым запросом не проверяли и не утверждаем ни что он работает, ни что не работает.
Шаг 4. Проверьте выбранный клиент одним curl до настройки. Если эта команда возвращает 200, протокол Chat Completions у go2llm работает и проблема, если она останется, будет на стороне клиента:
curl -s -o /dev/null -w "%{http_code}\n" https://go2llm.tech/v1/chat/completions \
-H "Authorization: Bearer $GO2LLM_API_KEY" \
-H "content-type: application/json" \
-d '{"model":"gpt-5.6-sol","max_tokens":32,"messages":[{"role":"user","content":"Ответь одним словом: работает"}]}'
Как избежать этого в будущем
Перед подключением любого CLI-агента к стороннему шлюзу проверяйте не «совместим ли он с OpenAI», а какой именно wire-протокол он использует. Chat Completions и Responses API — разные протоколы с разными путями, поэтому формулировка «OpenAI-совместимый» без уточнения протокола ничего не говорит о том, подключится клиент или нет. У Codex CLI это responses, у OpenCode — chat, у Claude Code — Anthropic Messages.
Для кодинг-агентов считайте стоимость по профилю нагрузки, а не по цене input: у агента вход занимает около 10% расхода, выход 5%, чтение кэша 85%. Поэтому решающая цифра — цена cache read. У claude-sonnet-5 на go2llm это $0.033 за 1M против официальных $0.20, у claude-opus-5 — $0.05 против $0.50, у kimi-k2.7-code — $0.019 против $0.19. Полный прайс — на странице тарифов.
У go2llm endpoint /v1/responses опубликован 2026-09-14 — с тех пор Codex CLI подключается напрямую, см. Codex API. У другого провайдера сначала проверьте, есть ли у него этот маршрут, — 404 по этой странице означает ровно его отсутствие. Текущий список опубликованных моделей go2llm всегда можно получить без ключа: GET https://go2llm.tech/v1/models.
Связанные ошибки
- 400 stateful_responses_unsupported — следующая ошибка на этом же маршруте после публикации
/v1/responses:previous_response_idиstore: trueне поддерживаются, вся история отправляется вinput. - 404 model_not_found — 404 на уровне модели, а не маршрута.
- 401 authentication_error — почему Claude Code требует
ANTHROPIC_AUTH_TOKEN. - 502 и 503: как правильно ретраить — ошибки маршрутизации, которые ретраить можно.
- Справочник всех кодов и docs/errors.
FAQ
Можно ли заставить Codex CLI работать с go2llm через wire_api = "chat"? Нет, и теперь это не нужно. Актуальные версии Codex CLI отклоняют значение wire_api = "chat" с сообщением «no longer supported» ещё до отправки запроса. Ставьте wire_api = "responses" — у go2llm этот маршрут опубликован.
Поможет ли локальный прокси, транслирующий Responses API в Chat Completions? Для go2llm он больше не нужен: /v1/responses — это и есть такой адаптер, только на нашей стороне, и он проверен живым прогоном Codex CLI. Для провайдера без Responses API свой прокси теоретически закрывает разницу протоколов, но корректность трансляции tool calls и стрима придётся проверять самостоятельно.
Какой CLI ближе всего к Codex CLI по опыту работы? Claude Code: тот же формат работы «агент в терминале с доступом к репозиторию», подключается к go2llm через ANTHROPIC_BASE_URL и ANTHROPIC_AUTH_TOKEN, использует нативный протокол Anthropic Messages без промежуточной конвертации.
Списываются ли деньги за 404-запросы Codex CLI? Нет. go2llm резервирует стоимость только после разрешения маршрута и модели, поэтому 404 не затрагивает баланс. Фактическая стоимость успешного запроса приходит в usage.cost_usd.
Получить ключ и сделать первый запрос за 3 минуты → go2llm.tech. Настройка Claude Code и OpenCode — в документации.