Один ключ к сотням моделей. Формат запросов совместим с OpenAI — если у вас уже есть код под их SDK, достаточно поменять адрес и ключ.
Получите ключ в профиле, пополните баланс — и можно отправлять запросы.
| Базовый адрес | https://aichathub.ru/v1 |
|---|---|
| Формат | OpenAI Chat Completions |
| Авторизация | Authorization: Bearer sk-ach-… |
curl https://aichathub.ru/v1/chat/completions \
-H "Authorization: Bearer $AICHATHUB_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "openai/gpt-4o-mini",
"messages": [{"role": "user", "content": "Привет!"}]
}'
Ключ передаётся в заголовке Authorization. Поддерживается и X-API-Key.
from openai import OpenAI
client = OpenAI(
api_key="sk-ach-…",
base_url="https://aichathub.ru/v1",
)
r = client.chat.completions.create(
model="openai/gpt-4o-mini",
messages=[{"role": "user", "content": "Объясни рекурсию одним абзацем"}],
)
print(r.choices[0].message.content)
import OpenAI from "openai";
const client = new OpenAI({
apiKey: "sk-ach-…",
baseURL: "https://aichathub.ru/v1",
});
const r = await client.chat.completions.create({
model: "anthropic/claude-sonnet-5",
messages: [{ role: "user", content: "Привет!" }],
});
console.log(r.choices[0].message.content);
Передайте "stream": true — ответ придёт по частям в формате Server-Sent Events,
как у OpenAI. Списание считается по фактически сгенерированным токенам.
stream = client.chat.completions.create(
model="openai/gpt-4o-mini",
messages=[{"role": "user", "content": "Посчитай до 10"}],
stream=True,
)
for chunk in stream:
delta = chunk.choices[0].delta.content
if delta:
print(delta, end="", flush=True)
Актуальный перечень с ценами — на странице цен API. Программно доступны два способа:
GET /v1/models — формат OpenAI, нужен ключGET /api/public/models — цены в рублях, без авторизацииcurl https://aichathub.ru/api/public/models
Оплата — по факту за токены, без абонентской платы. Списывается только то, что израсходовано: отдельно за отправленные токены («запрос») и отдельно за сгенерированные («ответ»).
В ответе без стриминга мы добавляем служебное поле — сколько списано и сколько осталось:
"x_aichathub": { "charged_rub": 0.0123, "balance_rub": 987.65 }
Юридическим лицам доступна оплата по счёту с закрывающими документами — напишите в поддержку.
Формат ошибок совпадает с OpenAI, поэтому обработка в SDK работает без изменений.
| Код | Что означает |
|---|---|
401 | Ключ не передан, неверен или отозван |
402 | Недостаточно средств — пополните баланс |
404 | Модель не найдена или недоступна |
400 | Некорректный запрос (нет model или messages) |
502 | Ошибка на стороне провайдера модели |
402 приходит и до выполнения запроса, если он может стоить дороже,
чем есть на балансе. Оценка идёт по max_tokens — уменьшите его или пополните баланс.