Lyncea

Journal d'audit

Consultez l'historique des actions sensibles de votre organisation via GET /api/v1/audit — accessible aux rôles owner et admin.

GET /api/v1/audit expose le journal d'audit de votre tenant : toute action sensible (connexion, changement de rôle, création de clé d'API, invitation, suspension de tenant par un opérateur…) y est tracée automatiquement.

L'accès est restreint aux membres du tenant avec le rôle owner ou admin — un member reçoit un 403.

Endpoint

GET https://api.monitoring.crahe-arthur.com/api/v1/audit
Authorization: Bearer ${JWT}   # JWT avec rôle owner ou admin

Paramètres de filtre

Tous les paramètres sont optionnels.

ParamètreTypeDescription
actorIdUUIDFiltre par auteur de l'action (users.id).
actionstringFiltre par code d'action exact (ex. apikey.created).
sinceISO 8601Borne inférieure sur created_at (inclusive). Ex. 2026-05-01T00:00:00Z.
limitinteger 1–100Nombre maximum de résultats par page. Défaut : 20.
cursorstringCurseur keyset opaque retourné par la page précédente.

Exemple

# Les 50 derniers événements des dernières 24 h
curl -G "https://api.monitoring.crahe-arthur.com/api/v1/audit" \
  -H "Authorization: Bearer ${JWT}" \
  --data-urlencode "since=$(date -u -d '24 hours ago' +%Y-%m-%dT%H:%M:%SZ)" \
  --data-urlencode "limit=50"
// 200 OK
{
  "data": [
    {
      "id": "018f1a2b-…",
      "timestamp": "2026-05-24T09:15:00.123Z",
      "actorId": "01912abc-…",
      "actorEmail": "alice@example.com",
      "action": "apikey.created",
      "resourceType": "apikey",
      "resourceId": "01912def-…",
      "metadata": { "keyName": "prod-ingest", "scopes": ["write:logs"] },
      "tenantId": "01912fed-…"
    }
  ],
  "nextCursor": "eyJ0cyI6IjIwMjYt…"
}

Pagination

La réponse est paginée par keyset : passer le nextCursor reçu tel quel via ?cursor=… à l'appel suivant. Quand nextCursor est null, vous avez atteint la fin.

Codes d'action courants

Les codes d'action sont stables entre versions — vous pouvez les stocker pour construire des alertes ou des rapports personnalisés.

CodeÉvénement
auth.loginConnexion réussie
auth.logoutDéconnexion
auth.registerCréation de compte
auth.refreshRotation du refresh token
auth.switch_tenantChangement de tenant actif
auth.password_changedMot de passe modifié
auth.google.successConnexion Google réussie
auth.google.failureConnexion ou liaison Google échouée (raison dans metadata.reason)
auth.google.link.successCompte Google lié
auth.google.unlinkCompte Google délié
tenant.createdCréation d'une organisation supplémentaire
apikey.createdCréation d'une clé d'API
apikey.revokedRévocation d'une clé
project.createdCréation d'un projet
project.updatedModification d'un projet
project.deletedSuppression d'un projet
member.invitedInvitation d'un membre
member.invitation_renewedInvitation renouvelée
member.invitation_acceptedInvitation acceptée
member.invitation_declinedInvitation déclinée
member.invitation_revokedInvitation révoquée
member.role_changedChangement de rôle tenant
member.removedRetrait d'un membre
project_member.addedAjout d'un membre projet
project_member.role_changedChangement de rôle projet
project_member.removedRetrait d'un membre projet
ingestion.tenant_suspended_attemptTentative d'ingestion via une clé d'un tenant suspendu
tenant.suspended_by_operatorTenant suspendu par un opérateur
tenant.unsuspended_by_operatorSuspension levée par un opérateur
tenant.plan_changed_by_operatorPlan modifié par un opérateur
tenant.copilot_content_access_changedAccès Lyncea Command au contenu des logs activé ou désactivé (champ from/to booléen dans metadata)

Les événements dont actorId est null sont émis par le système ou par un opérateur Lyncea (ex. tenant.suspended_by_operator). Ils apparaissent dans le journal pour informer l'organisation mais ne correspondent pas à une action d'un membre.

Voir aussi

On this page