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

OpenAI-совместимый API для GPT, Claude, Gemini и других моделей

OpenAI-совместимый API позволяет подключить существующее приложение к go2llm заменой базового адреса, ключа и model ID. Подход подходит для официальных OpenAI SDK и многих библиотек, которые используют формат Chat Completions.

Базовый адрес и endpoint

Используйте базовый URL:

https://go2llm.tech/v1

Запросы Chat Completions отправляются в POST /v1/chat/completions. Модель должна содержать chat.completions в списке endpoints, возвращаемом GET /v1/models.

Подключение через Python

from openai import OpenAI

client = OpenAI(
    api_key="YOUR_API_KEY",
    base_url="https://go2llm.tech/v1",
)

response = client.chat.completions.create(
    model="MODEL_ID_ИЗ_КАТАЛОГА",
    messages=[{"role": "user", "content": "Ответь: OK"}],
)

print(response.choices[0].message.content)

Не храните реальный ключ прямо в файле. В production передавайте его через переменную окружения или менеджер секретов.

Подключение через JavaScript и TypeScript

import OpenAI from "openai";

const client = new OpenAI({
  apiKey: process.env.GO2LLM_API_KEY,
  baseURL: "https://go2llm.tech/v1",
});

const response = await client.chat.completions.create({
  model: "MODEL_ID_ИЗ_КАТАЛОГА",
  messages: [{ role: "user", content: "Ответь: OK" }],
});

console.log(response.choices[0].message.content);

Серверный SDK использовать безопаснее, чем вызывать API прямо из браузера: иначе ключ станет доступен посетителям страницы.

Потоковые ответы

Для streaming передайте stream: true и обрабатывайте SSE-части по мере поступления. Поток нельзя автоматически повторить после того, как клиент получил первый валидный фрагмент: приложение должно корректно сохранять уже выданный текст и обрабатывать сетевой обрыв.

const stream = await client.chat.completions.create({
  model: "MODEL_ID_ИЗ_КАТАЛОГА",
  messages: [{ role: "user", content: "Кратко объясни SSE" }],
  stream: true,
});

for await (const chunk of stream) {
  process.stdout.write(chunk.choices[0]?.delta?.content ?? "");
}

Модели, возможности и цены

GET /v1/models возвращает точные model ID, входные и выходные модальности и поддерживаемые endpoints. GET /api/pricing содержит публичные цены. Для текста отдельно учитываются input, output и подтверждённое чтение кэша.

Один ключ может использовать разные опубликованные модели, но для production, разработки и CI рекомендуется создавать отдельные ключи с собственными лимитами. Актуальная информация находится на странице моделей и цен.

Чем OpenAI-совместимый формат отличается от Anthropic Messages

Chat Completions использует Authorization: Bearer, массив messages и /v1/chat/completions. Anthropic Messages обычно использует x-api-key, заголовок версии и /v1/messages. Форматы похожи по назначению, но не взаимозаменяемы на уровне тела запроса.

Для Claude Code используйте нативный Anthropic-совместимый endpoint и отдельную инструкцию. Для приложения на OpenAI SDK удобнее Chat Completions. Для coding-агентов вроде OpenCode или Kilo Code, которые тоже говорят по Chat Completions, — полный список инструментов и их статус.

Миграция существующего приложения

  1. Замените официальный base_url на https://go2llm.tech/v1.
  2. Передайте новый API-ключ через защищённую конфигурацию.
  3. Возьмите точный model ID из /v1/models.
  4. Проверьте обычный и потоковый запросы на небольшой нагрузке.
  5. Сверьте списание в usage.cost_usd и задайте лимит ключа.

Responses API (/v1/responses) опубликован и обслуживает те же модели, что chat.completions. А вот embeddings, audio и video — нет: если приложение зависит от них, сначала проверьте наличие endpoint в документации. Совместимость Chat Completions не означает автоматическую поддержку всех API OpenAI.

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

Нужно ли переписывать приложение?

Для стандартного Chat Completions клиента обычно достаточно заменить base URL, ключ и model ID. Нестандартные параметры нужно проверить по документации.

Можно ли переключать модели без нового ключа?

Да. Используйте другой опубликованный model ID с совместимым endpoint.

Как ограничить стоимость запросов?

Создайте отдельный ключ и задайте ему лимит. Фактическая стоимость успешного запроса возвращается в usage.cost_usd.

Где искать причины ошибок?

Проверьте HTTP-код, error.type, model ID, endpoint, баланс и квоту. Затем откройте справочник ошибок или обратитесь в поддержку без передачи секретов.