Тема
Проекты и администрирование
Роли, права и проекты с точки зрения администратора описаны в разделе Пользователи и проекты.
Проекты
GET|POST /api/projects,PUT /api/projects/:id— проекты, которые может открыть учётная запись, и создание проекта (администраторы).DELETE /api/projects/:id{ key, force? }(администратор установки) — удаляет проект со всем содержимым.key— ключ проекта, набранный целиком (иначе400). Проект по умолчанию и последний проект удалить нельзя (409), как и проект, в котором ещё есть кейсы, прогоны, требования или тест-планы, если не переданоforce: true.
WARNING
Удаление проекта необратимо: ничего не архивируется и не попадает в корзину.
Участники проекта
GET|PUT /api/projects/:id/members, DELETE /api/projects/:id/members/:userId — кто входит в проект и с какой ролью. GET возвращает полный список при праве settings:read; роли, которая только записывает результаты (runs:write, редактор), он возвращает активных участников как { email, name, active } — для выбора исполнителя, без их ролей.
Вход и сессия
GET /api/auth/providers— публичный:{ passwordLogin, oidc: { enabled, label?, error? }, devRoleSwitch }, плюсdemoAccount: { email, password }, если демо-стенд публикует такую учётную запись.POST /api/auth/loginотвечает{ token, user }.POST /api/auth/logout— токен сразу перестаёт работать.POST /api/auth/password({ currentPassword, newPassword }) отвечает403для учётной записи, которая входит через SSO, и для демо-учётной записи.GET /api/auth/oidc/loginи/callback— единый вход (SSO, модульsso, Enterprise; настройка — в разделе SSO). Существующая учётная запись связывается с SSO-идентичностью по email, только если она создана заранее без пароля и не является администратором; любая другая учётная запись подключается так: сначала вход по паролю, затем через SSO в том же браузере.
GET /api/auth/me — сессия, её роль и права, является ли учётная запись администратором установки (installationAdmin), и лицензированные модули (modules).
- Сессия со входом, но без cookie
kvalli_signed_inполучает его здесь. Этот cookie (путь/, ничего не разрешает) сервер читает при запросе страницы, чтобы отправить гостя на/login?redirect=…до загрузки рабочего пространства; вход ставит его, выход очищает. authenticatedравноtrueдля допущенного вызывающего (выполнен вход или установка не требует входа).- Гость без сессии там, где вход обязателен, получает
200сauthenticated: false,user: nullи без прав, а не отказ; предъявленная сессия, которая больше не действует (завершена, выполнен выход, отозвана), — по-прежнему401.
API-ключи
POST|GET /api/apikeys, DELETE /api/apikeys/:id — API-ключи текущего проекта (модуль ci; для просмотра, создания и отзыва нужно settings:write — лид или администратор). В интерфейсе — «Настройки → API-ключи».
- Ключ не может нести scope, которого нет у его создателя (
403); неизвестный scope —400; лимит ключей на проект —429. - Сервисные учётные записи не могут создавать ключи.
POSTпринимает{ name, scopes, expiresDays? }:expiresDays— целое число от 1 до 3650, и ключ перестаёт работать через столько дней; без него ключ бессрочный.- Сам ключ есть в ответе один раз (
rawKey), а хранится только его хеш, так что ключ, который никто не скопировал, придётся создать заново.
Как ключ передаётся в запросах — в разделе Аутентификация.
Пользователи и аудит
GET|POST /api/admin/users, PATCH /api/admin/users/:id, POST /api/admin/users/:id/password, GET /api/admin/audit — управление пользователями и журнал аудита безопасности.
Каждому маршруту под /api/admin/ нужен администратор установки, а не право: учётная запись, роль которой имеет все права (admin или сервисная учётная запись со scope *). Лид проекта имеет settings:write, но всё равно получает 403. /api/admin/audit дополнительно требует модуль operations.
Лицензия
GET /api/admin/license (администратор установки) — состояние лицензии этой установки в виде { license: { … } }: тариф, модули, даты, лимиты и state (licensed, starter, revoked, grace, expired, over_limit, invalid). Никогда не отказывает в обслуживании; см. раздел Лицензия.
Телеметрия
GET /api/admin/telemetry(администратор установки, на всех тарифах начиная с 2.0.1) — ровно те данные, которые были бы отправлены, чтобы решение включить телеметрию можно было принять, прочитав их.POST /api/admin/telemetry/send(те же требования) — отправить отчёт сейчас; отвечает409, покаKVALLI_TELEMETRYвыключен.
Подробнее — в разделе Телеметрия.
Состояние системы
GET /api/admin/system (администратор установки, модуль operations) — состояние установки; каждая часть читается отдельно (часть, которую не удалось прочитать, выглядит как { unavailable }):
build;process— время запуска, аптайм, память;database—reachable, миграции:appliedизexpected;disk— том каталога данных;license,telemetry,scale;integrations— последняя проверка каждого подключения;models— токены по проектам за сегодня и по дням, агентам, провайдерам и моделям за 14 дней;jobs— выполняющиеся и последние 15;health— последние 24 часа, подсчитанные в этом процессе: запросы, ошибки сервера по областям и по часам, отклонённые запросы, необработанные отклонения промисов, задачи агентов по типу и причине сбоя;secrets.unreadable— настройки, для сохранённого секрета которых у этой сборки нет ключа;limits— действующие лимиты.
В интерфейсе это раздел «Настройки → Система». POST /api/admin/system/forget-secrets { paths } окончательно отказывается от части этих секретов (путь не из unreadable — 400).
GET /api/admin/system/diagnostics (администратор установки, модуль operations) — диагностический пакет в виде файла: отчёт телеметрии, последние 50 ошибок сервера (время, метод, область, статус, id запроса), недавние задачи по типу и итогу, состояние базы данных, диска и процесса. См. раздел Телеметрия.
Расход по людям
GET /api/admin/usage?days=30&projectId=… (администратор установки, модуль agents: Pro и выше, не только Enterprise) — расход по людям за days (1–365), по всей установке или по одному проекту. По каждой учётной записи (или API-ключу):
- кейсы, созданные вручную, утверждённые из черновика агента и импортированные (
cases.unknown— созданные до того, как происхождение стало записываться); - черновики Агента 1, которые они сохранили, изменили или отбросили;
- автотесты Агента 2, написанные для них и взятые в merge request;
- их вызовы моделей и токены по провайдерам и моделям.
Работа принадлежит тому, кто о ней попросил: кто запустил задачу, отправил сообщение в чат, решил по черновику, открыл merge request; работа воркфлоу — его владельцу. Работа, о которой никто не просил, и всё, что было до того, как стали записываться люди, — одна строка с userId: null. В интерфейсе — «Настройки → Администрирование → Расход по людям».