🎬Mode DémoChoisir une démo

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

  1. Créez un webhook depuis /admin/integrations (type : Generic).
  2. Notez le secret généré et abonnez-vous aux events voulus.
  3. 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/json
  • x-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))
}
Important sécurité : utilisez 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.