Быстрый старт
Создайте отдельный ключ приложения в кабинете, сохраните его как серверную переменную окружения и выполните запрос.
export AI_PILOT_API_KEY="ap_live_..."
curl https://api.ai-pilot.by/v1/chat/completions \
-H "Authorization: Bearer $AI_PILOT_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "chatpilot",
"messages": [
{"role": "user", "content": "Назови три идеи для лендинга"}
]
}'GET /models. Не полагайтесь на пример как на вечный список доступных моделей.Авторизация
Каждый запрос к публичным маршрутам требует заголовок Authorization: Bearer <API_KEY>. Ключ связывается с владельцем, приложением, балансом и журналом использования.
Authorization: Bearer ap_live_xxxxxxxxxxxxxxОтвет 401 означает отсутствующий, неверный или отозванный ключ. Не передавайте ключ в query string.
Список моделей
/modelsВозвращает модели, которые доступны этому ключу в данный момент. Передавайте выбранный id в поле model.
curl https://api.ai-pilot.by/v1/models \
-H "Authorization: Bearer $AI_PILOT_API_KEY"Chat completions
/chat/completionsОсновной метод для диалога. Текущая версия принимает объект с моделью AI PILOT, сообщениями и параметрами генерации. Для безопасного повтора передавайте уникальный заголовок Idempotency-Key: повтор того же значения не вызовет модель и не спишет деньги повторно.
| Поле | Тип | Обязательно | Назначение |
|---|---|---|---|
model | string | да | ID из /models |
messages | array | да | История с ролями system, user, assistant |
stream | boolean | нет | stream=true включает потоковую выдачу SSE; stream=false возвращает один JSON |
temperature | number | нет | Вариативность ответа |
max_tokens | integer | нет | Верхняя граница ответа, не более 4096 |
JavaScript (сервер)
const response = await fetch(
"https://api.ai-pilot.by/v1/chat/completions",
{
method: "POST",
headers: {
Authorization: `Bearer ${process.env.AI_PILOT_API_KEY}`,
"Content-Type": "application/json",
"Idempotency-Key": crypto.randomUUID()
},
body: JSON.stringify({
model: "chatpilot",
messages: [{ role: "user", content: "Привет!" }]
})
}
);
if (!response.ok) throw new Error(await response.text());
const data = await response.json();
console.log(data.choices[0].message.content);Python
import os, requests
r = requests.post(
"https://api.ai-pilot.by/v1/chat/completions",
headers={
"Authorization": f"Bearer {os.environ['AI_PILOT_API_KEY']}",
"Idempotency-Key": "unique-request-id",
},
json={
"model": "chatpilot",
"messages": [{"role": "user", "content": "Привет!"}],
},
timeout=60,
)
r.raise_for_status()
print(r.json()["choices"][0]["message"]["content"])Потоковая выдача
Потоковая выдача работает для ключей ap_live_. Передайте stream=true и принимайте ответ с типом text/event-stream.
curl -N https://api.ai-pilot.by/v1/chat/completions \
-H "Authorization: Bearer $AI_PILOT_API_KEY" \
-H "Content-Type: application/json" \
-H "Accept: text/event-stream" \
-H "Idempotency-Key: unique-request-id" \
-d '{
"model": "chatpilot",
"messages": [{"role": "user", "content": "Привет!"}],
"stream": true
}'Каждый фрагмент приходит строкой data с объектом chat.completion.chunk. Поток заканчивается событием data: [DONE].
Использование
/usageВозвращает статистику текущего ключа за текущий месяц: количество запросов, токены, списанную сумму и доступный баланс. Используйте её для внутренней аналитики приложения и сверки расхода, но не как замену собственному журналу запросов.
{
"object": "usage.summary",
"period": "current_month",
"requests": 12,
"tokens": 8420,
"charged_eur": 0.0342,
"balance_eur": 4.9658
}Ошибки и повторы
| HTTP | Что означает | Что делать |
|---|---|---|
400 | Неверное тело или неподдерживаемый параметр | Проверить JSON и контракт |
401 | Ключ отсутствует или недействителен | Проверить Bearer и статус ключа |
402 | Недостаточно доступного баланса | Пополнить баланс или уменьшить запрос |
409 | Этот Idempotency-Key уже использован | Не повторять завершённую операцию; для нового запроса создать новый ключ |
422 | Тело запроса не прошло проверку | Проверить типы полей, сообщения и ограничения |
429 | Превышен лимит частоты | Повторить с exponential backoff |
5xx | Временная серверная ошибка | Повторить идемпотентно с jitter |
delay = min(base * 2 ** attempt + random_jitter, max_delay)Не повторяйте бесконечно. Для пользовательского интерфейса показывайте понятный статус и возможность отправить запрос заново.
Тарификация
API использует единый кошелёк AI PILOT и сохраняет метрики отдельно по ключу, модели AI PILOT и сервису. Стоимость определяется действующей клиентской ставкой, объёмом входных и выходных токенов и использованием платных инструментов.
Перед выполнением резервируется оценочная сумма. После ответа списывается стоимость фактического использования, а остаток резерва возвращается на доступный баланс.
Актуальные ставки доступны в кабинете и публичном каталоге API. Для сверки расходов используйте GET /usage и историю операций по ключу.
Безопасность
- храните ключ только на сервере или в секрет-хранилище;
- не добавляйте ключ в Git, мобильный APK или браузерный JavaScript;
- создавайте отдельный ключ для каждого приложения и окружения;
- отзывайте ключ при подозрении на утечку;
- не записывайте полный ключ и чувствительные промпты в обычные логи.
Ограничения текущей версии
/models, /chat/completions и /usage. Embeddings, files, batches, webhooks и гарантированный SLA не считаются публично доступными, пока не появятся в проверенном контракте и тестах.Для production-интеграции закрепляйте модель из актуального списка, ставьте timeout, обрабатывайте 402/409/422/429/5xx и всегда передавайте уникальный Idempotency-Key.
Следующий шаг
Создайте отдельный тестовый ключ, выполните запрос к списку моделей, затем проверьте обычный JSON-ответ и потоковую выдачу. После каждого запроса сверяйте расход через GET /usage.