API Reference / Audit log

Audit log

L'audit log è il registro append-only delle azioni rilevanti sull'istanza: chi ha fatto cosa, su quale oggetto, quando e con che esito. Due endpoint di sola lettura: l'elenco filtrabile delle voci e le facet per popolare i filtri.

Solo amministratori

Entrambi gli endpoint richiedono un token di un amministratore: un utente autenticato ma non admin riceve 403 FORBIDDEN. La pagina web corrispondente nel CRM è /admin/audit-logs (che non è un path API).

01La voce di audit

Ogni voce restituita dall'API ha questa forma. Le date sono stringhe ISO 8601 in UTC; i campi non valorizzati per quel tipo di evento sono null.

AttributoTipoDescrizione
idintegerIdentificativo univoco della voce.
actor_user_idinteger | nullUtente che ha compiuto l'azione (null per eventi anonimi, es. login fallito).
actor_usernamestring | nullUsername dell'attore, risolto dall'API per comodità.
event_typestringTipo di evento (es. auth_login, user_updated).
modulestring | nullArea applicativa (es. auth, users, workflows).
actionstring | nullAzione compiuta (es. create, update, login).
scopestring | nullScope con cui l'azione è stata eseguita, quando rilevante.
target_typestring | nullTipo dell'oggetto toccato (es. user, workflow).
target_idstring | nullIdentificativo dell'oggetto (stringa: può essere un id o *).
statusstringEsito: success, failed, denied.
request_idstring | nullId della richiesta HTTP: correla la voce con i log applicativi.
correlation_idstring | nullId di correlazione tra voci della stessa operazione composita.
ip_addressstring | nullIP del client (affidabile dietro proxy configurato).
user_agentstring | nullUser agent del client.
detailsobject | nullContesto specifico dell'evento (JSON libero, dipende dal tipo).
created_atstringData/ora dell'evento (ISO 8601).
json · una voce di audit
{
  "id": 5182,
  "actor_user_id": 7,
  "actor_username": "mrossi",
  "event_type": "user_updated",
  "module": "users",
  "action": "update",
  "scope": null,
  "target_type": "user",
  "target_id": "42",
  "status": "success",
  "request_id": "5f0e8a2c-1b7d-4c40-9a3e-7f21d6b90c11",
  "correlation_id": null,
  "ip_address": "203.0.113.10",
  "user_agent": "Mozilla/5.0 …",
  "details": null,
  "created_at": "2026-07-16T09:41:00.000Z"
}

02Endpoint

MetodoPathAccessoCosa fa
GET/api/audit-logsadminElenco paginato e filtrabile delle voci.
GET/api/audit-logs/facetsadminValori distinti (con conteggi) per popolare i filtri.

03Elencare le voci di audit

GET /api/audit-logs admin

Restituisce le voci di audit più recenti, paginate e ordinabili. Tutti i filtri sono parametri query e si compongono in AND.

Parametri query: paginazione e ordinamento
ParametroTipoDescrizione
limitintegeropzionaleRighe per pagina. Default 50, max 200.
offsetintegeropzionaleRighe da saltare (default 0).
sort_bystringopzionaleUno tra id, created_at, event_type, module, action, status, actor_user_id. Default created_at.
sort_dirstringopzionaleasc o desc (default desc).
Parametri query: filtri
ParametroTipoCorrispondenzaDescrizione
qstringparzialeRicerca libera (case-insensitive) su tipo evento, modulo, azione, target, request id e correlation id. Max 255 caratteri.
event_typestringesattaTipo di evento (es. auth_login). Max 80.
modulestringesattaArea applicativa (es. users). Max 80.
actionstringesattaAzione (es. update). Max 80.
statusstringesattaEsito (success, failed, denied). Max 40.
target_typestringesattaTipo dell'oggetto toccato. Max 80.
target_idstringparzialeIdentificativo (o parte) dell'oggetto. Max 120.
request_idstringparzialeId (o parte) della richiesta HTTP. Max 120.
correlation_idstringparzialeId (o parte) di correlazione. Max 120.
actor_user_idintegeresattaId dell'utente attore.
created_fromstring (data)YYYY-MM-DDDal giorno indicato incluso (dalla mezzanotte).
created_tostring (data)YYYY-MM-DDFino al giorno indicato incluso (fine giornata).
Richiesta
curl "https://crm.tuodominio.it/api/audit-logs?module=users&status=success&created_from=2026-07-01&limit=2" \
  -H "Authorization: Bearer <accessToken>"
const res = await fetch("https://crm.tuodominio.it/api/audit-logs?module=users&status=success&created_from=2026-07-01&limit=2", {
  headers: { Authorization: `Bearer ${accessToken}` },
});
const { data } = await res.json();
Risposta · 200
json
{
  "success": true,
  "data": {
    "items": [ { "id": 5182, "event_type": "user_updated",  }, { "id": 5179,  } ],
    "pagination": { "limit": 2, "offset": 0, "count": 2, "totalCount": 87, "sortBy": "created_at", "sortDir": "desc" }
  }
}
Nota: totalCount

A differenza delle liste dei moduli (dove count conta solo le righe della pagina), qui la paginazione include anche totalCount: il totale delle voci che soddisfano i filtri, utile per una paginazione numerata.

Esiti
StatoCodiceQuando
200·Elenco restituito.
401UNAUTHORIZEDToken assente, scaduto o non valido.
403FORBIDDENUtente autenticato ma non amministratore.
422VALIDATION_ERRORParametro fuori dai limiti: sort_by non ammesso, data non in formato YYYY-MM-DD, filtro oltre la lunghezza massima.
Anche la consultazione è tracciata

Ogni lettura dell'elenco genera a sua volta una voce audit_logs_viewed con i filtri usati e quante righe sono state restituite: chi consulta l'audit log lascia traccia nell'audit log.

04Facet per i filtri

GET /api/audit-logs/facets admin

Restituisce i valori distinti presenti nel registro per le cinque dimensioni filtrabili, con il conteggio delle voci: è pensato per popolare le tendine dei filtri. Ogni lista è ordinata per frequenza decrescente (max 120 valori).

Parametri

Nessuno: serve solo l'header Authorization: Bearer <accessToken> di un amministratore.

Richiesta
curl "https://crm.tuodominio.it/api/audit-logs/facets" \
  -H "Authorization: Bearer <accessToken>"
const res = await fetch("https://crm.tuodominio.it/api/audit-logs/facets", {
  headers: { Authorization: `Bearer ${accessToken}` },
});
const { data } = await res.json();
Risposta · 200
json
{
  "success": true,
  "data": {
    "eventTypes": [ { "value": "auth_login", "count": 312 }, { "value": "user_updated", "count": 54 },  ],
    "modules": [ { "value": "auth", "count": 340 },  ],
    "actions": [ { "value": "login", "count": 312 },  ],
    "statuses": [ { "value": "success", "count": 690 }, { "value": "failed", "count": 12 } ],
    "targetTypes": [ { "value": "user", "count": 61 },  ]
  }
}
Esiti
StatoCodiceQuando
200·Facet restituite.
401UNAUTHORIZEDToken assente, scaduto o non valido.
403FORBIDDENUtente autenticato ma non amministratore.