OpenAI-совместимый API

Модели Qubu подключаются к любому клиенту, который умеет говорить с OpenAI: SDK, Cursor, Cline, Continue, LangChain. Меняются только два значения — адрес и ключ.

Base URLhttps://qubu.ai/api/v1
Формат ключаAuthorization: Bearer quai_…
Оплататокены Qubu, списываются с владельца ключа

1. Получить ключ

Ключ выпускается в разделе API-ключей. Нужен scope playground — без него все эндпоинты ниже ответят 403.

2. Узнать, какие модели доступны

Значение model — это id из ответа. Клиенты вроде Cursor и Cline дёргают этот эндпоинт сами при подключении провайдера.

curl https://qubu.ai/api/v1/models \
  -H "Authorization: Bearer $QUBU_API_KEY"

3. Первый запрос

curl https://qubu.ai/api/v1/chat/completions \
  -H "Authorization: Bearer $QUBU_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "<id из /v1/models>",
    "messages": [{ "role": "user", "content": "Привет!" }]
  }'

Поток включается полем stream: true — ответ придёт как text/event-stream. Какие ещё поля поддерживает конкретная модель (tools, web search, structured outputs, vision) — видно в capabilities из /v1/models.

Python
from openai import OpenAI

client = OpenAI(
    base_url="https://qubu.ai/api/v1",
    api_key="quai_...",
)

response = client.chat.completions.create(
    model="<id из /v1/models>",
    messages=[{"role": "user", "content": "Привет!"}],
)
print(response.choices[0].message.content)
TypeScript
import OpenAI from 'openai'

const client = new OpenAI({
    baseURL: 'https://qubu.ai/api/v1',
    apiKey: process.env.QUBU_API_KEY,
})

const response = await client.chat.completions.create({
    model: '<id из /v1/models>',
    messages: [{ role: 'user', content: 'Привет!' }],
})

4. Подключить в редакторе

Cursor — Settings → Models → Override OpenAI Base URL. Cline — API Provider: OpenAI Compatible. В обоих случаях поля одни и те же:
Base URLhttps://qubu.ai/api/v1
API Keyquai_…
Model IDid из /v1/models
Continue — ~/.continue/config.json
{
  "models": [
    {
      "title": "Qubu",
      "provider": "openai",
      "apiBase": "https://qubu.ai/api/v1",
      "apiKey": "quai_...",
      "model": "<id из /v1/models>"
    }
  ]
}
Всё остальное (opencode, LangChain, curl-скрипты) — через переменные окружения
export OPENAI_BASE_URL="https://qubu.ai/api/v1"
export OPENAI_API_KEY="quai_..."

Эмбеддинги

Тот же ключ, тот же конверт OpenAI. До 100 текстов за запрос.

curl https://qubu.ai/api/v1/embeddings \
  -H "Authorization: Bearer $QUBU_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "input": ["первый текст", "второй текст"] }'

Лимиты и оплата

Ключ без подтверждённого аккаунта60 запросов/мин · 500/сутки
Обычный ключ1 000 запросов/мин · 50 000/сутки
Premium (partner)5 000 запросов/мин · 500 000/сутки

При превышении приходит 429 с полем retryAfter. Токены списываются с баланса владельца ключа: под запрос ставится холд, после ответа возвращается разница. Пустой баланс — 402.

Полная спецификация: /api-docs и openapi.json.

Где обрабатываются данные

У каждой модели в /v1/models есть поле processing_region. Значение outside_ru означает, что запрос уходит зарубежному вендору и содержимое промпта покидает пределы РФ. Проверяйте его до того, как отправите персональные данные.
МоделиДатасетыАкселераторЖурналыФорумОбучение
Модели
AI-решения
Разработчикам
Обучение
Сообщество
Заказать решение
Мероприятия
Другое

Войти
Модели
AI-решения
Разработчикам
ДатасетыНоутбуки
Обучение
Сообщество
ЖурналыQubu HubФорум
Заказать решение
ИнтеграторыСоревнованияРазместить задачу
Мероприятия
Другое
РейтингПриватные клубы
Войти