Français
Journal d’audit
Les routes sont relatives à <PUBLIC_BASE_URL> ; les corps de requête et de réponse sont en JSON sauf mention contraire. L’authentification, les portées, la pagination et le format des erreurs sont décrits dans les guides de l’API REST.
GET /api/v1/admin/audit
Lire le journal d’audit
Du plus récent au plus ancien, paginé par curseur. Filtres : action, acteur, borne basse de date. En lecture seule par construction : la seule suppression est la purge de rétention. Un curseur illisible rend la première page.
Accès — Session de membre ou clé d’API portant admin:read (rôle administrateur requis).
Paramètres
| Nom | Où | Type | Requis |
|---|---|---|---|
action | requête | string | non |
actor | requête | string (uuid) | non |
since | requête | string (date-time) | non |
cursor | requête | string | non |
limit | requête | integer | non |
Réponses
200 — Une page d’entrées.
| Champ | Type | Requis |
|---|---|---|
entries | object[] | oui |
nextCursor | string | null | oui |
Schéma JSON
json
{
"type": "object",
"properties": {
"entries": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"at": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
},
"actorKind": { "type": "string", "enum": [ "member", "system", "webhook" ] },
"actorMemberId": {
"anyOf": [
{
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
{ "type": "null" }
]
},
"action": { "type": "string", "minLength": 1 },
"targetKind": { "type": "string", "minLength": 1 },
"targetId": {
"anyOf": [ { "type": "string", "minLength": 1 }, { "type": "null" } ]
},
"details": {
"type": "object",
"propertyNames": { "type": "string" },
"additionalProperties": {}
},
"ip": {
"anyOf": [ { "type": "string", "minLength": 1 }, { "type": "null" } ]
}
},
"required": [
"id",
"at",
"actorKind",
"actorMemberId",
"action",
"targetKind",
"targetId",
"details",
"ip"
],
"additionalProperties": false
}
},
"nextCursor": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }
},
"required": [ "entries", "nextCursor" ],
"additionalProperties": false
}400 — La requête ne respecte pas son schéma.
401 — Aucune session ni clé d’API valide (auth.unauthenticated).
403 — Refusé : rôle insuffisant (auth.forbidden), portée manquante (api_key.scope_missing, details.required la nomme) ou route fermée aux clés (api_key.session_required).
429 — La clé d’API dépasse son débit (api_key.rate_limited) ; Retry-After dit quand réessayer.
Codes d’erreur — request.bad_request. Les codes communs (request.bad_request, auth.unauthenticated, api_key.scope_missing, api_key.rate_limited…) s’appliquent à toutes les routes ; voir Erreurs.