Документация API go2llm

404 на /v1/responses в Codex CLI: причина в wire_api

Актуальный статус на 2026-09-14: этот 404 у go2llm больше не воспроизводится. Endpoint POST /v1/responses опубликован, и через него прошёл живой прогон Codex CLI 0.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.

Связанные ошибки

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 — в документации.