CODU AI / API REFERENCE

Создайте один раз.
Используйте любую модель.

Codu AI — это OpenAI-совместимый шлюз. Один базовый URL даёт вашему приложению доступ к сотням реальных провайдерных моделей со встроенными квотами на ключи, USD-биллингом и аналитикой использования.

GET /v1/modelsСписок доступных моделей
POST /v1/chat/completionsЧат и потоковые завершения
Подключение

Готовая настройка для вашего приложения

Создайте API-ключ в панели, выберите приложение и модель. Конфиг не содержит вашего ключа. API keys →

01 / OPENCODE

Подключите OpenCode

Выберите OpenCode V2 в конструкторе выше: он создаёт конфигурацию с актуальной моделью из каталога. Примеры ниже описывают прежний формат, совместимый с V1.

1. API-ключ

Создайте ключ на странице API keys и привяжите его в OpenCode:

/connect → Other → id: codu

Либо храните ключ в переменной окружения:

export CODU_API_KEY="sk-ai-..."

# Windows PowerShell
$env:CODU_API_KEY = "sk-ai-..."

2. Автоустановка

Скачайте скрипт под свою OS — он сам создаст конфиг (спросит ключ, сделает бэкап старого) и подтянет в него весь каталог моделей шлюза:

curl -fsSL https://codu.vu/install-codu-opencode.sh | bash -s -- sk-ai-...
# Windows PowerShell
Invoke-WebRequest https://codu.vu/install-codu-opencode.ps1 -OutFile install-codu.ps1
.\install-codu.ps1 -ApiKey sk-ai-...

3. Вручную

Глобальный конфиг лежит в ~/.config/opencode/opencode.json (Linux/macOS) или %USERPROFILE%\.config\opencode\opencode.json (Windows):

export CODU_API_KEY="sk-ai-..."
mkdir -p ~/.config/opencode && cat > ~/.config/opencode/opencode.json <<'EOF'
{
  "$schema": "https://opencode.ai/config.json",
  "provider": {
    "codu": {
      "npm": "@ai-sdk/openai-compatible",
      "name": "Codu",
      "options": {
        "baseURL": "https://codu.vu/v1",
        "apiKey": "{env:CODU_API_KEY}"
      },
      "models": {
        "openai/gpt-4o": { "name": "GPT-4o" },
        "deepseek/deepseek-chat": { "name": "DeepSeek Chat" },
        "cr/claude-opus-5": { "name": "Claude Opus 5" }
      }
    }
  },
  "model": "codu/cr/claude-opus-5"
}
EOF
# Windows PowerShell
$env:CODU_API_KEY = "sk-ai-..."
New-Item -ItemType Directory -Force "$env:USERPROFILE\.config\opencode"
@'
{
  "$schema": "https://opencode.ai/config.json",
  "provider": {
    "codu": {
      "npm": "@ai-sdk/openai-compatible",
      "name": "Codu",
      "options": {
        "baseURL": "https://codu.vu/v1",
        "apiKey": "{env:CODU_API_KEY}"
      },
      "models": {
        "openai/gpt-4o": { "name": "GPT-4o" },
        "deepseek/deepseek-chat": { "name": "DeepSeek Chat" },
        "cr/claude-opus-5": { "name": "Claude Opus 5" }
      }
    }
  },
  "model": "codu/cr/claude-opus-5"
}
'@ | Set-Content "$env:USERPROFILE\.config\opencode\opencode.json" -Encoding utf8
ID моделей берите из каталога GET /v1/models — подходят любые id шлюза, включая cr/*. В baseURL указывайте только https://codu.vu/v1.

4. Выбор модели

Команда /models покажет провайдера codu и настроенные модели.

CODU CLI / TERMINAL AGENT

Работайте с проектом через codu CLI

codu — интерактивный агент в терминале. Он сам читает файлы проекта, вносит изменения, запускает команды и анализирует результаты проверок. Обсуждайте решение и уточняйте задачу в одной сессии: контекст сохраняется между сообщениями и после перезапуска.

1. Установка и API-ключ

Установите Node.js 20 или новее. Создайте ключ в разделе API keys и подключите его:

npm i -g codu-ai
codu auth sk-ai-...
cd my-project
codu

2. Первая задача

В открывшейся сессии напишите, например: «Разберись, как устроена авторизация, предложи план исправления ошибки и после согласования внеси правки». Затем можно попросить добавить тесты, проверить сборку или изменить решение, продолжая ту же переписку.

  • /models — каталог моделей с поиском; /model <id> — выбор по идентификатору.
  • Ctrl+P — настройки модели, Effort для доступных вариантов рассуждения и лимита шагов.
  • /new, /sessions, Tab — создание, восстановление и переключение сессий.
  • Следующую задачу можно отправить во время работы агента: она попадёт в очередь. Длинный контекст автоматически сжимается с сохранением цели и незавершённых действий.

3. Разрешения и конфигурация

Чтение и простые команды просмотра разрешены по умолчанию; изменения и остальные команды требуют подтверждения. Esc или Ctrl+C останавливают агента, но не отменяют уже выполненные действия. Флаг --yes пропускает запросы подтверждения.

Настройки и ключ хранятся в ~/.codu/config.json. codu config показывает конфигурацию со скрытым ключом. Доступны CODU_API_KEY, CODU_MODEL, CODU_BASE_URL и CODU_CONFIG; флаги имеют приоритет над окружением, а окружение — над файлом.

codu models
codu config
codu run "Найди причину падающего теста и исправь её" --max-steps 20

codu run выполняет одну задачу и выходит. Дополнительные флаги: --model <id>, --cwd <path>, --base-url <url>, --verbose; --max-steps 0 отключает лимит.

Не добавляйте ключ в репозиторий. Полное руководство по сессиям, контексту, управлению и плагинам — codu CLI.
CLAUDE CODE / GATEWAY SETUP

Настройка Claude Code

Claude Code работает с файлами и командами локального проекта. Для подключения через шлюз ему нужен Anthropic-совместимый /v1/messages, включая потоковые ответы и вызовы инструментов. Одного OpenAI-совместимого /chat/completions недостаточно.

Совместимость Codu с полным сценарием Claude Code пока не подтверждена. Ниже — настройки клиента и проверка Messages API; успешный простой запрос ещё не подтверждает работу всех инструментов Claude Code.

1. Установка

# macOS / Linux / WSL
curl -fsSL https://claude.ai/install.sh | bash

# Windows PowerShell
irm https://claude.ai/install.ps1 | iex

2. Адрес шлюза и ключ

Codu принимает Authorization: Bearer, поэтому используйте ANTHROPIC_AUTH_TOKEN. В ANTHROPIC_BASE_URL укажите адрес без /v1: клиент добавляет /v1/messages самостоятельно. Выберите точный ID модели Claude из каталога Codu.

export ANTHROPIC_BASE_URL="https://codu.vu"
export ANTHROPIC_AUTH_TOKEN="sk-ai-..."
export ANTHROPIC_MODEL="ID_МОДЕЛИ_CLAUDE"

# Windows PowerShell
$env:ANTHROPIC_BASE_URL = "https://codu.vu"
$env:ANTHROPIC_AUTH_TOKEN = "sk-ai-..."
$env:ANTHROPIC_MODEL = "ID_МОДЕЛИ_CLAUDE"

3. Проверка подключения

curl "$ANTHROPIC_BASE_URL/v1/messages" \
  -H "Authorization: Bearer $ANTHROPIC_AUTH_TOKEN" \
  -H "anthropic-version: 2023-06-01" \
  -H "Content-Type: application/json" \
  -d "{\"model\":\"$ANTHROPIC_MODEL\",\"max_tokens\":32,\"messages\":[{\"role\":\"user\",\"content\":\"Hello\"}]}"

Ожидается ответ Messages API с массивом content, а не OpenAI choices или HTML. Если формат верный, запустите Claude Code из того же терминала:

cd my-project
claude
/status

В /status проверьте адрес шлюза и источник токена. /model выбирает модель, /resume открывает предыдущую сессию, /compact сжимает контекст. При 401 проверьте ключ и Bearer-аутентификацию; при 404 или неверном формате ответа нужна совместимость Messages API на стороне шлюза.

Переменные действуют в текущем терминале. Для постоянных настроек используйте env в личном ~/.claude/settings.json (Windows: %USERPROFILE%\.claude\settings.json), сохранив остальные настройки файла. Не помещайте ключ в общий конфиг проекта.

Официальная инструкция Claude Code для шлюзов →

02 / БЫСТРЫЙ СТАРТ

Выполните первый запрос

Замените плейсхолдеры своими значениями. Базовый URL для продакшн-трафика — https://codu.vu — больше никакой настройки не требуется.

curl "https://codu.vu/v1/chat/completions" \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "deepseek/deepseek-chat",
    "messages": [
      { "role": "user", "content": "Hello from Codu" }
    ]
  }'
Создайте API ключ в разделе API keys и экспортируйте его как API_KEY. Полный ключ показывается только один раз.
03 / АУТЕНТИФИКАЦИЯ

API keys

Аутентифицируйте каждый запрос ключом workspace в стандартном Bearer-заголовке. Ключи хранятся в виде хэша; новый ключ генерируется как безопасное случайное значение.

Authorization: Bearer sk-ai-xxxxxxxxxxxxxxxx

Управление ключами

Вы можете создавать любое количество ключей в панели, давать каждому имя и необязательный USD-лимит. Квота общая для всех запросов с этим ключом — когда она исчерпана, шлюз возвращает 402 quota_exceeded.

Никогда не встраивайте API ключи в браузерный код, мобильные приложения или публичные репозитории. Вызывайте шлюз с бэкенда и храните ключ в переменных окружения.
04 / CODEX И VS CODE

Подключите Codex

Codex работает с Codu через Responses API и может читать и изменять файлы рабочего пространства через локальные инструменты VS Code.

Конфигурация

Ключ можно указать через auth.json в той же папке конфигурации Codex:

{
  "OPENAI_API_KEY": "sk-ai-..."
}
Добавьте auth.json в .gitignore.
model_provider = "codu"
model = "gpt-5.6-luna"

[model_providers.codu]
name = "codu"
base_url = "https://codu.vu/v1"
wire_api = "responses"
requires_openai_auth = true

API-ключ

Создайте ключ на странице API keys и передайте его Codex через переменную окружения. Не добавляйте ключ в TOML или исходный код.

export OPENAI_API_KEY="sk-ai-..."

# Windows PowerShell
$env:OPENAI_API_KEY = "sk-ai-..."
В base_url указывайте только https://codu.vu/v1. Не добавляйте /responses вручную.

Возможности

  • Нативные Responses API и потоковые ответы.
  • Чтение, поиск и редактирование файлов через локальные инструменты Codex.
  • Запуск команд в рабочем пространстве VS Code.
  • Изображения и файловые вложения.
05 / МОДЕЛИ

Каталог доступных моделей

Запросите каталог, чтобы получить список реальных провайдерных моделей, доступных через шлюз.

curl "https://codu.vu/v1/models" \
  -H "Authorization: Bearer $API_KEY"

Используйте точный id из ответа как model в запросах. Актуальные тарифы доступны в каталоге панели.

Цены и бесплатные модели

Вход и выход тарифицируются отдельно за миллион токенов; у некоторых моделей применяется цена за запрос. Модели без настроенного тарифа скрыты. Бесплатные модели обозначены явно — free/* и yjs/*, их стоимость $0.

06 / ЧАТ-ЗАПРОСЫ

Чат-запросы

Отправьте список сообщений с ролями system, user или assistant. Ответ следует формату OpenAI choices с использованием токенов в usage.

const response = await fetch("https://codu.vu/v1/chat/completions", {
  method: "POST",
  headers: {
    "Authorization": `Bearer ${API_KEY}`,
    "Content-Type": "application/json"
  },
  body: JSON.stringify({
    model: "deepseek/deepseek-chat",
    messages: [
      { role: "system", content: "Be concise." },
      { role: "user", content: "Explain embeddings." }
    ],
    max_tokens: 2048
  })
});

OpenAI SDK

Используйте официальные SDK — просто укажите им базовый URL шлюза.

import OpenAI from "openai";

const client = new OpenAI({
  baseURL: "https://codu.vu/v1",
  apiKey: process.env.API_KEY
});

const completion = await client.chat.completions.create({
  model: "deepseek/deepseek-chat",
  messages: [{ role: "user", content: "Hello" }]
});
console.log(completion.choices[0].message.content);
07 / ПОТОКОВАЯ ПЕРЕДАЧА

Потоковая передача токенов

Установите stream: true, чтобы получать Server-Sent Events. Каждая строка data: несёт дельту; добавляйте choices[0].delta.content по мере поступления. Поток завершается строкой data: [DONE].

const body = {
  model: "deepseek/deepseek-chat",
  stream: true,
  messages: [{ role: "user", content: "Write a haiku." }]
};

data: {"choices":[{"delta":{"content":"A"}}]}
data: {"choices":[{"delta":{"content":" gentle"}}]}
data: {"choices":[{"delta":{"content":" rain"}}]}
data: [DONE]

Использование токенов сообщается в поле usage финального события, а также записывается в аналитику панели.

08 / БИЛЛИНГ И ЛИМИТЫ

Баланс и квоты

Баланс в USD общий для сайта, API и Telegram-бота. В начале платного запроса сумма резервируется, после завершения рассчитывается списание. Если модель не сообщила токены или запрос прерван, используется оценка обработанного объёма. Остановка не отменяет оплату уже обработанной части.

  • 402 insufficient_balance — недостаточно доступного баланса.
  • 402 quota_exceeded — исчерпан лимит API-ключа.
  • Бесплатные модели явно обозначены free/* и yjs/*. Отсутствие тарифа не означает бесплатный доступ.
  • Пополнение через СБП или криптовалюту. Комиссия, сумма к оплате и зачисление показаны перед оплатой.

История запросов, токенов, резервов и списаний →

09 / ОШИБКИ

Обработка ошибок

Ошибки используют OpenAI-совместимую форму { "error": { "message": string, "code"?: string } }. Неожиданные сбои моделей возвращаются как общий 502; детали логируются только на стороне шлюза.

СтатусЗначение
401Требуется аутентификация — API ключ отсутствует или неверен.
402 · insufficient_balanceБаланс workspace ниже расчётной стоимости запроса.
402 · quota_exceededUSD-квота API ключа израсходована.
404Модель или endpoint не найден (возвращается модельным шлюзом).
429 · rate_limitedСлишком много запросов за короткое время — сбавьте темп и повторите.
502Модельный шлюз недоступен или упал во время запроса.