OpenAI-совместимый API
Модели Qubu подключаются к любому клиенту, который умеет говорить с OpenAI: SDK, Cursor, Cline, Continue, LangChain. Меняются только два значения — адрес и ключ.
https://qubu.ai/api/v1Authorization: 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.
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)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. Подключить в редакторе
https://qubu.ai/api/v1quai_…id из /v1/models~/.continue/config.json{
"models": [
{
"title": "Qubu",
"provider": "openai",
"apiBase": "https://qubu.ai/api/v1",
"apiKey": "quai_...",
"model": "<id из /v1/models>"
}
]
}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/сутки5 000 запросов/мин · 500 000/суткиПри превышении приходит 429 с полем retryAfter. Токены списываются с баланса владельца ключа: под запрос ставится холд, после ответа возвращается разница. Пустой баланс — 402.
Полная спецификация: /api-docs и openapi.json.
Где обрабатываются данные
/v1/models есть поле processing_region. Значение outside_ru означает, что запрос уходит зарубежному вендору и содержимое промпта покидает пределы РФ. Проверяйте его до того, как отправите персональные данные.