Справочник API

Полная документация Pravia API — интеграция AI-сотрудников, управление источниками знаний и настройка AI-сотрудников программно.

Базовый URL: /api (относительно) — Дашборд: POST /api/chat (Session cookie, 30/мин на пользователя) · Виджет: POST /api/widget/chat (публично, botId — не ключ, 30/мин на IP)

Аутентификация

Панель управления (Cookie сессии)

Дашборд требует session cookie Better Auth. Никаких API-ключей и заголовков Authorization — просто войдите в аккаунт. Tenant isolation: GET /api/documents?botId=<чужой> → 404/403.

Виджет (публичный)

Чат виджета — публичный, rate-limited (30/мин на IP, env RATE_LIMIT_WIDGET_PER_MIN). Без аутентификации — botId это публичный идентификатор бота, не ключ. Сервер проверяет активность бота и никогда не отдаёт приватные данные владельца.

Session cookie example (no Authorization header)

curl -X POST "/api/chat" \
  -H "Content-Type: application/json" \
  -H "Cookie: next-auth.session-token=<session>" \
  -d '{
    "botId": "your-bot-id",
    "query": "Hello!"
  }'
# Нужна session cookie — сначала войдите через /login. Заголовка Authorization нет.

Чат-эндпоинты

POST/api/chatSession cookie · Dashboard · 30/min per user
ParameterTypeRequiredDescription
botIdstringДаУникальный ID вашего бота (публичный идентификатор, не ключ — botId ≠ API key).
querystringДаТекст сообщения пользователя (макс. 2000 символов).
conversationIdstringНетОпциональный ID диалога для сохранения контекста.
modelstringНетТолько для дашборда. Переопределение модели — учитывается только если разрешено тарифом, иначе игнорируется и используется bot.model.

Request Example — Dashboard

{
  "botId": "bot_abc123",
  "query": "Какой у вас срок возврата?",
  "conversationId": "conv_xyz789"
}

Response Example — Dashboard (sources include content)

// Дашборд: POST /api/chat (Session) — включает content чанков
{
  "conversationId": "conv_xyz789",
  "answer": "Наш срок возврата — 30 дней с момента покупки.",
  "sources": [
    { "chunkId": "...", "documentId": "...", "content": "...", "score": 0.92 }
  ],
  "offline": false
}
POST/api/widget/chatPublic · botId ≠ API key · 30/min per IP · SSE

Публичный эндпоинт для виджета. Принимает botId, query, conversationId и visitorId — model не принимается (всегда bot.model). Лимит 30 запросов/мин на IP (env RATE_LIMIT_WIDGET_PER_MIN, default 30). botId — публичный идентификатор, не ключ. Tenant isolation на сервере: приватные данные владельца не возвращаются.

Request Example — Widget (public)

{
  "botId": "bot_abc123",
  "query": "Какой у вас срок возврата?",
  "conversationId": "conv_xyz789",
  "visitorId": "visitor_123"
}

Response Example — Widget (sources without content)

// Виджет: POST /api/widget/chat (публично, SSE) — источники без content
{
  "conversationId": "conv_xyz789",
  "answer": "Наш срок возврата — 30 дней с момента покупки.",
  "sources": [
    { "chunkId": "...", "documentId": "...", "score": 0.92 }
  ]
}
// Публичный виджет никогда не возвращает content чанков — только ID + score.
// SSE: { chunk, done } + финальный done { conversationId, messageId, sources }

Управление ботами

GET/api/bots

Получение списка всех ваших ботов.

curl -X GET "/api/bots" \
  -H "Content-Type: application/json"
POST/api/bots

Создание нового бота с указанной конфигурацией.

ParameterTypeRequiredDescription
namestringДаНазвание бота (1-64 символа).
descriptionstringНетОписание назначения бота.
modelstringНетМодель по умолчанию для этого бота.
{
  "name": "Support Bot",
  "description": "Отвечает на вопросы клиентов на основе базы знаний",
  "model": "pravia"
}

Управление документами

GET/api/documents

Получение списка документов для указанного бота.

ParameterTypeRequiredDescription
botIdstringДаФильтр документов по боту.
POST/api/documents

Добавление источников знаний боту. Поддерживается: загрузка файлов (PDF, Markdown, DOCX, TXT), извлечение с URL (Website), импорт Sitemap XML или сырой текст. Используйте multipart/form-data для файлов или JSON для URL/текста/sitemap.

Лимиты запросов

EndpointRate Limit
Widget Chat (/api/widget/chat)30 запросов/мин на IP (env RATE_LIMIT_WIDGET_PER_MIN)
Панель управления (/api/chat, /api/bots, /api/documents)30 запросов/мин на пользователя

Ответы ошибок

CodeHTTP StatusDescription
400400Неверный запрос. Возвращает текстовую ошибку: 'botId is required', 'query is required' или 'Query too long'.
401401Не авторизовано. Cookie сессии отсутствует или недействительна.
403403Доступ запрещён. Лимит биллинга достигнут или нет доступа.
404404Не найдено. Бот не существует или неактивен.
503503Сервис временно недоступен. Превышен лимит биллинга.
500500Внутренняя ошибка сервера.

Сводка эндпоинтов

MethodEndpointAuthDescription
POST/api/chatSession cookieЧат дашборда (tenant-isolated). Model override только если разрешено тарифом; sources с content чанков.
POST/api/widget/chatПубличный (botId ≠ API key)Чат виджета — публично, rate-limit 30/мин/IP, tenant-isolated; sources без content (только ID + score), без model override.
GET/api/botsСессияСписок всех ботов в аккаунте.
POST/api/botsСессияСоздание нового бота.
GET/api/bots/:idСессияПолучение бота по ID.
GET/api/documentsСессияСписок документов бота.
POST/api/documentsСессияЗагрузка документа в бота.