Главная/AI PILOT API/Документация
Developer documentation

AI PILOT API

HTTP API AI PILOT с JSON-ответами и единым балансом. Ниже — действующий публичный контракт для интеграции: авторизация, методы, ошибки и тарификация.

Base URL: https://api.ai-pilot.by/v1Формат: JSONАвторизация: Bearer
5 минут

Быстрый старт

Создайте отдельный ключ приложения в кабинете, сохраните его как серверную переменную окружения и выполните запрос.

curl
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.

Список моделей

GET/models

Возвращает модели, которые доступны этому ключу в данный момент. Передавайте выбранный id в поле model.

curl https://api.ai-pilot.by/v1/models \
  -H "Authorization: Bearer $AI_PILOT_API_KEY"

Chat completions

POST/chat/completions

Основной метод для диалога. Текущая версия принимает объект с моделью AI PILOT, сообщениями и параметрами генерации. Для безопасного повтора передавайте уникальный заголовок Idempotency-Key: повтор того же значения не вызовет модель и не спишет деньги повторно.

ПолеТипОбязательноНазначение
modelstringдаID из /models
messagesarrayдаИстория с ролями system, user, assistant
streambooleanнетstream=true включает потоковую выдачу SSE; stream=false возвращает один JSON
temperaturenumberнетВариативность ответа
max_tokensintegerнетВерхняя граница ответа, не более 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].

Биллинг: до вызова модели резервируется оценочная сумма, затем фиксируется фактическое использование. При разрыве соединения уже выполненная часть запроса может быть учтена и списана.

Использование

GET/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 и сервису. Стоимость определяется действующей клиентской ставкой, объёмом входных и выходных токенов и использованием платных инструментов.

Вы платите по ставке 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.