Intégration · Push events
Webhooks signés HMAC-SHA256
Recevez les événements Humanix en temps réel sur votre endpoint, sans polling. Signature cryptographique vérifiable. SSRF-safe. Compatible Zapier, n8n, Make, ou votre SIEM custom.
Quickstart en 3 étapes
- Créez un webhook depuis /admin/integrations (type : Generic).
- Notez le
secretgénéré et abonnez-vous aux events voulus. - Recevez vos events POST sur votre URL avec header
x-humanix-signature.
Format du payload
Tous les events sont envoyés en POST JSON. La structure est commune :
{
"event": "evidence.exported",
"tenantId": "demo",
"occurredAt": "2026-05-03T14:23:45Z",
"data": {
/* propre à l'event - voir ci-dessous */
}
}Headers HTTP envoyés :
content-type: application/jsonx-humanix-event: <event-key>x-humanix-signature: <hex hmac sha256>x-humanix-tenant: <tenant-id>
Vérifier la signature HMAC
La signature est le HMAC-SHA256 du body brut (avant parsing JSON) avec votre secret, encodé en hex. Code de référence dans 3 langages :
Node.js
import crypto from "node:crypto";
function verifySignature(rawBody, signatureHeader, secret) {
const expected = crypto
.createHmac("sha256", secret)
.update(rawBody)
.digest("hex");
// timingSafeEqual évite les attaques de timing
const a = Buffer.from(expected, "hex");
const b = Buffer.from(signatureHeader, "hex");
return a.length === b.length && crypto.timingSafeEqual(a, b);
}Python
import hmac, hashlib
def verify_signature(raw_body: bytes, signature_header: str, secret: str) -> bool:
expected = hmac.new(
secret.encode(), raw_body, hashlib.sha256
).hexdigest()
return hmac.compare_digest(expected, signature_header)Go
package main
import (
"crypto/hmac"
"crypto/sha256"
"encoding/hex"
)
func verifySignature(rawBody []byte, signature, secret string) bool {
mac := hmac.New(sha256.New, []byte(secret))
mac.Write(rawBody)
expected := hex.EncodeToString(mac.Sum(nil))
return hmac.Equal([]byte(expected), []byte(signature))
}timingSafeEqual / compare_digest / hmac.Equal, jamais ===. Une comparaison naïve ouvre une faille de timing.Catalogue des events disponibles
9 events au total. Vous vous abonnez à ceux qui vous intéressent depuis la console admin.
episode.completedUn collaborateur termine un module
Envoye quand un user passe un episode au statut COMPLETED.
Exemple de payload data
{
"userName": "Alice Martin",
"userEmail": "alice@acme.fr",
"saisonTitle": "Saison 1 - Phishing",
"episodeTitle": "Reconnaitre un faux mail Microsoft",
"score": 92,
"bestScore": 92
}saison.completedUn collaborateur termine une saison entière
Envoye quand un user a complete tous les episodes d'une saison. Idempotent : 1 seul envoi par (user, saison).
Exemple de payload data
{
"userName": "Alice Martin",
"saisonTitle": "Saison 1 - Phishing",
"averageScore": 87,
"familyInvitesUnlocked": 3
}phishing.campaign_completedUne campagne phishing simulé est terminée
Envoye quand le delai d'expiration d'une campagne est atteint. Resume : envoyes / cliques / signales.
Exemple de payload data
{
"campaignTitle": "Faux Microsoft 365 - Mai 2026",
"sentTo": 42,
"clicked": 6,
"reported": 18,
"reportRate": 0.43
}phishing.user_clickedUn collaborateur a cliqué sur un phishing simulé
Envoye en temps reel des qu'un user clique sur le lien d'un mail piege simule. Permet une alerte Slack/Teams au RSSI ou un trigger SOC pour declencher une remediation immediate. Inclut le mini-module flash auto-assigne.
Exemple de payload data
{
"userName": "Alice Martin",
"userEmail": "alice@acme.fr",
"campaignTitle": "Faux Microsoft 365 - Mai 2026",
"template": "FAKE_MICROSOFT",
"clickedAt": "2026-05-09T14:23:45Z",
"remediationEpisode": "remediation-flash/01-microsoft-flash"
}phishing.reportedUn mail suspect a été signalé
Envoye quand un utilisateur signale un mail comme phishing (depuis l'add-in Outlook ou en interne). Le canal Slack/Teams reçoit l'alerte en temps reel - utile pour le SOC ou l'IT.
Exemple de payload data
{
"userName": "Alice Martin",
"fromAddress": "noreply@suspect.example",
"subject": "[ACTION REQUISE] Verifiez votre compte",
"source": "outlook-addin"
}risk.degradedLe score de risque collectif s'est dégradé
Declenche quand le score collectif baisse de >= 5 points en 7 jours (signal d'alerte).
Exemple de payload data
{
"previousScore": 72,
"currentScore": 64,
"delta": -8,
"cause": "3 utilisateurs inactifs > 30j"
}user.invitedUn nouvel utilisateur a été invité
Envoye lors de l'envoi d'un mail magique-link a un nouvel arrivant.
Exemple de payload data
{
"email": "bob@acme.fr",
"invitedBy": "Charles Admin"
}marketplace.module_installedUn module marketplace a été installé
Envoye quand un admin installe un module communautaire.
Exemple de payload data
{
"moduleTitle": "Rancongiciels - comprendre, eviter, reagir",
"author": "Pierre Dupont (RSSI@CHU Cherbourg)",
"installedBy": "Charles Admin"
}evidence.exportedUn export de preuves de conformité a été généré
Envoyé à chaque appel réussi de /api/v1/evidence-export. Permet à votre GRC ou SOC de savoir qu'un nouveau bundle est disponible (sans avoir à interroger en polling).
Exemple de payload data
{
"framework": "ISO27001:2022",
"format": "oscal-v1",
"controls_count": 7,
"summary": {
"compliant": 5,
"partial": 1,
"non_compliant": 1
},
"bundle_url": "https://humanix-academie.fr/api/v1/evidence-export?framework=ISO27001:2022&format=oscal-v1",
"generated_at": "2026-05-03T14:23:45Z"
}Garanties sécurité
- HTTPS uniquement : les URLs
http://sont rejetées. - SSRF guard : impossible de pointer vers une IP privée (10.x, 172.16/12, 192.168/16, 127.x, 169.254.x) ou un domaine interne (
*.local,*.internal,localhost). - Timeout strict : 5 secondes par tentative, le reste est annulé.
- Payload borné : 50 KB max, pas de fuite de données massive.
- Stats par webhook : succès / échecs / dernière erreur visibles dans
/admin/integrations. - Rotation du secret : possible à tout moment, sans interruption de service.
Prêt à brancher votre SIEM ?
Compatible Splunk HEC, Sentinel Logs Ingestion API, Sekoia.io, Elastic Webhooks Ingest, n8n, Zapier, Make.