Journal d'audit
Chaque mutation dans votre organisation — actions de l'interface administrateur et appels d'API publique également — est enregistrée dans un flux d'audit unique. Utilisez ces points de terminaison pour expédier ce flux vers un SIEM, construire des rapports de conformité internes ou enquêter sur un changement spécifique. Portée requise sur la clé API : audit-log:read.
Points de terminaison
| Méthode | Chemin | Portée | Objectif |
|---|---|---|---|
GET | /api/public/v1/audit-log | audit-log:read | Liste paginée d'événements d'audit avec filtres optionnels. |
GET | /api/public/v1/audit-log/actions | audit-log:read | Noms d'actions distincts jamais enregistrés pour votre organisation. Utile pour construire une liste déroulante de filtre. |
Ce qui est enregistré
Les appels d'API publique sont auto-audités. L'entrée porte actorRole = "api_key" et actorEmail = "apikey:<apiKeyId>", où <apiKeyId> est l'UUID complet de la clé API qui a fait l'appel (et non le préfixe de token scs_live_…). Les actions de l'interface administrateur utilisent l'e-mail de l'humain et leur rôle org_admin. Les deux flux sont entremêlés dans le même journal pour qu'un seul export couvre tout l'historique de changements.
Lister les événements d'audit
Renvoie les événements du plus récent au plus ancien. Tous les filtres sont optionnels et peuvent être combinés.
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_…Paramètres de requête
| Paramètre | Type | Par défaut | Notes |
|---|---|---|---|
action | chaîne | — | Nom d'action en correspondance exacte. Extrayez les valeurs valides de /audit-log/actions. |
actorEmail | chaîne | — | E-mail d'acteur en correspondance exacte. Pour les entrées de clé API utilisez la forme apikey:<api-key-uuid>. |
from | ISO 8601 | — | Borne inférieure inclusive sur createdAt (UTC). |
to | ISO 8601 | — | Borne supérieure inclusive sur createdAt (UTC). |
page | entier | 1 | Index de page basé sur 1. |
pageSize | entier | 50 | Plafonné à 200. Les valeurs hors de 1–200 reviennent à 50. |
Réponse
{
"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
}metadataest une chaîne JSON (pas un objet). Analysez-la sur le client ; la forme varie par action.totalreflète le compte filtré complet, non juste la page actuelle — divisez parpageSizepour dériver le nombre de pages.- Le User-Agent et autres en-têtes de requête sont stockés côté serveur pour la forensique mais ne sont pas renvoyés dans cette réponse.
Exemple
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"Lister les actions distinctes
Renvoie chaque nom d'action qui a jamais été enregistré pour votre organisation, trié alphabétiquement. La liste est à portée d'organisation — un tenant neuf renvoie un tableau vide jusqu'à ce que les événements commencent à circuler.
GET /api/public/v1/audit-log/actions
Authorization: Bearer scs_live_…Réponse
[
"apikey.created",
"apikey.revoked",
"assignment.completed",
"assignment.created",
"course.published",
"sarif.ingested",
"user.invited",
"user.role_changed",
"webhook.created"
]Exemple
curl -sS \
-H "Authorization: Bearer $SCH_API_KEY" \
https://api.limeplate.com/api/public/v1/audit-log/actionsExpédition vers un SIEM
Le schéma typique est d'interroger /audit-log sur une cron, en passant from égal au dernier createdAt que vous avez ingéré et en parcourant les pages jusqu'à items.length < pageSize. Parce que les résultats sont ordonnés du plus récent au plus ancien, un récupérateur incrémental devrait inverser la page avant d'émettre les événements pour garder l'ordre en aval chronologique. Il n'y a pas de webhook d'audit en streaming en v1 — couplez l'interrogation d'audit avec les webhooks de domaine ciblés documentés sous Webhooks lorsque vous avez aussi besoin d'une réaction à faible latence à des événements spécifiques.