Audit Trail
Audit Trail fournit un journal d'evenements immutable (append-only) stocke dans PostgreSQL avec garantie d'integrite. Chaque evenement est horodate, signe et indexe pour un requetage rapide. Le service est nativement conforme RGPD avec des fonctions d'export de donnees personnelles (droit d'acces) et d'anonymisation (droit a l'oubli). L'ingestion asynchrone via Redis Streams garantit des performances elevees sans impact sur vos services metier. Ideal pour la conformite reglementaire, les audits internes et la tracabilite des operations.
Cas d'usage
Conformite RGPD
Repondez aux demandes d'acces et de suppression de donnees personnelles avec export automatise et anonymisation selective.
Audit interne
Tracez chaque action utilisateur (creation, modification, suppression, consultation) pour vos audits internes et certifications ISO.
Tracabilite reglementaire
Conservez un historique inalterable de toutes les operations pour repondre aux exigences des regulateurs (AMF, ACPR, CNIL).
Comment ca marche
Emission d'un evenement
Envoyez un evenement structure (acteur, action, ressource, metadata) via l'API REST. L'ingestion est asynchrone via Redis Streams.
Persistance immutable
L'evenement est persiste dans PostgreSQL en mode append-only avec horodatage, hash d'integrite et index de recherche.
Requetage et filtrage
Recherchez les evenements par acteur, action, ressource, periode ou metadata avec pagination et tri.
Export et anonymisation
Exportez les evenements d'un utilisateur (RGPD acces) ou anonymisez-les (RGPD oubli) en un seul appel API.
Exemple d'appel API
import httpx
class=class="text-teal">"text-text-faint italic"># Log an audit event
response = httpx.post(
class="text-teal">"https:class="text-text-faint italicclass="text-teal">">//api.djinn.dev/v1/events",
headers={class="text-teal">"X-API-Key": class="text-teal">"djinn_live_..."},
json={
class="text-teal">"actor": {class="text-teal">"id": class="text-teal">"user_42", class="text-teal">"type": class="text-teal">"user", class="text-teal">"email": class="text-teal">"alice@acme.fr"},
class="text-teal">"action": class="text-teal">"document.extracted",
class="text-teal">"resource": {class="text-teal">"id": class="text-teal">"doc_789", class="text-teal">"type": class="text-teal">"invoice"},
class="text-teal">"metadata": {
class="text-teal">"confidence": 0.97,
class="text-teal">"processing_time_ms": 1250,
},
},
)
event = response.json()
print(fclass="text-teal">"Event ID: {event['id']}")
print(fclass="text-teal">"Timestamp: {event['timestamp']}")
print(fclass="text-teal">"Hash: {event['integrity_hash']}")
class=class="text-teal">"text-text-faint italic"># Query events for GDPR export
events = httpx.get(
class="text-teal">"https:class="text-text-faint italicclass="text-teal">">//api.djinn.dev/v1/events",
headers={class="text-teal">"X-API-Key": class="text-teal">"djinn_live_..."},
params={class="text-teal">"actor_id": class="text-teal">"user_42", class="text-teal">"limit": 100},
).json()
print(fclass="text-teal">"Total events: {events['total']}")Specifications techniques
Pret a integrer ce service ?
Testez l'API gratuitement avec 1 000 appels offerts. Integration en quelques minutes.