Документация/API и Webhook'и/Журнал аудита

Журнал аудита

Каждая мутация в Вашей организации — действия в UI администратора и вызовы публичного API одинаково — записывается в единый поток аудита. Используйте эти эндпоинты, чтобы отправлять этот поток в SIEM, строить внутренние отчёты о соответствии или расследовать конкретное изменение. Требуемая область на API-ключе: audit-log:read.

Конечные точки

МетодПутьОбласть действияНазначение
GET/api/public/v1/audit-logaudit-log:readПагинированный список событий аудита с опциональными фильтрами.
GET/api/public/v1/audit-log/actionsaudit-log:readРазличные имена действий, когда-либо записанные для Вашей организации. Полезно для построения выпадающего фильтра.

Что записывается

Вызовы публичного API авто-аудируются. Запись несёт actorRole = "api_key" и actorEmail = "apikey:<apiKeyId>", где <apiKeyId> — это полный UUID API-ключа, который сделал вызов (не префикс токена scs_live_…). Действия в UI администратора используют email человека и его роль org_admin. Два потока перемешаны в одном журнале, поэтому один экспорт покрывает всю историю изменений.

Список событий аудита

Возвращает события сначала самые новые. Все фильтры опциональны и могут быть комбинированы.

GET /api/public/v1/audit-log
  ?action=sarif.ingested
  &actorEmail=apikey:7d8a3e0b-4f12-4cd6-b9e1-21f6cf5d4a73
  &from=2026-05-01T00:00:00Z
  &to=2026-05-29T23:59:59Z
  &page=1
  &pageSize=50
Authorization: Bearer scs_live_…

Параметры запроса

ПараметрТипПо умолчаниюЗаметки
actionстрокаТочное совпадение имени действия. Извлеките допустимые значения из /audit-log/actions.
actorEmailстрокаТочное совпадение email актора. Для записей API-ключа используйте форму apikey:<api-key-uuid>.
fromISO 8601Включающая нижняя граница на createdAt (UTC).
toISO 8601Включающая верхняя граница на createdAt (UTC).
pageцелое число1Индекс страницы с 1.
pageSizeцелое число50Ограничено 200. Значения вне 1–200 откатываются к 50.

Ответ

{
  "items": [
    {
      "id": "0e7a3b4c-9d2f-4e1a-b6c8-2c4f8d5a1e90",
      "createdAt": "2026-05-29T13:42:11.318Z",
      "actorEmail": "apikey:7d8a3e0b-4f12-4cd6-b9e1-21f6cf5d4a73",
      "actorRole": "api_key",
      "action": "assignment.created",
      "targetType": "assignment",
      "targetId": "b1d8c2a0-7e34-4f9a-9d51-8e2c91a4f607",
      "targetLabel": "jane.smith@acme.com / SQL Injection",
      "metadata": "{\"topicId\":\"sql-injection\",\"deadlineDays\":14}",
      "ipAddress": "203.0.113.42"
    },
    {
      "id": "ba98c9d4-5f60-4b21-9c0e-3f72e1b58a44",
      "createdAt": "2026-05-29T13:41:08.902Z",
      "actorEmail": "amelia.ng@acme.com",
      "actorRole": "org_admin",
      "action": "user.invited",
      "targetType": "user",
      "targetId": "c4f1d22a-83b7-4d2c-9a01-7e6b5d1f9c33",
      "targetLabel": "jane.smith@acme.com",
      "metadata": null,
      "ipAddress": "203.0.113.7"
    }
  ],
  "total": 2841,
  "page": 1,
  "pageSize": 50
}
  • metadata — это JSON-строка (не объект). Парсите её на клиенте; форма меняется в зависимости от действия.
  • total отражает полный отфильтрованный счётчик, а не только текущую страницу — разделите на pageSize, чтобы вывести количество страниц.
  • User-agent и другие заголовки запроса хранятся на стороне сервера для криминалистики, но не возвращаются в этом ответе.

Пример

curl -sS \
  -H "Authorization: Bearer $SCH_API_KEY" \
  "https://api.limeplate.com/api/public/v1/audit-log?from=2026-05-01T00:00:00Z&pageSize=200"

Список различных действий

Возвращает каждое имя действия, которое когда-либо было записано для Вашей организации, отсортированное по алфавиту. Список ограничен организацией — свежий тенант возвращает пустой массив, пока события не начнут поступать.

GET /api/public/v1/audit-log/actions
Authorization: Bearer scs_live_…

Ответ

[
  "apikey.created",
  "apikey.revoked",
  "assignment.completed",
  "assignment.created",
  "course.published",
  "sarif.ingested",
  "user.invited",
  "user.role_changed",
  "webhook.created"
]

Пример

curl -sS \
  -H "Authorization: Bearer $SCH_API_KEY" \
  https://api.limeplate.com/api/public/v1/audit-log/actions

Отправка в SIEM

Типичный шаблон — опрашивать /audit-log на cron'е, передавая from, равный последнему createdAt, который Вы приняли, и проходя страницы, пока items.length < pageSize. Поскольку результаты упорядочены сначала самыми новыми, инкрементальный сборщик должен перевернуть страницу перед эмиссией событий, чтобы держать порядок в нисходящем направлении хронологическим. В v1 нет стримингового webhook'а аудита — сочетайте опрос аудита с целевыми доменными webhook'ами, задокументированными под Webhook'и, когда Вам также нужна низкая задержка реакции на конкретные события.