Webhooks
Recevez des événements en temps réel quand des actions surviennent dans votre tenant. Signature HMAC-SHA256 pour l'authenticité.
Comment ça fonctionne
- Enregistrez votre endpoint HTTPS via POST /webhooks
- QualiForma stocke un secret unique (whsec_...) pour ce webhook
- Quand un événement survient, QualiForma POSTe le payload JSON sur votre URL
- Vérifiez la signature X-Qualiforma-Signature avec le secret HMAC-SHA256
- Répondez 200 OK en moins de 30 secondes (timeout)
- 3 retries automatiques en cas d'échec (1min, 5min, 30min)
POST/webhooks
Enregistre un endpoint et retourne le secret HMAC. Stocker ce secret immédiatement— il n'est plus accessible ensuite.
Enregistrer un webhook · cURL / Shell
Format du payload
Chaque événement est envoyé en POST avec le header X-Qualiforma-Signature: {hmac_hex}.
Exemple — enrollment.created · JSON
Vérification HMAC-SHA256
La signature est calculée sur le raw body bytes (avant tout parsing JSON). Utiliser hmac.compare_digest / timingSafeEqual pour éviter les timing attacks.
Vérification HMAC — Python/Flask · Python
Vérification HMAC — Node.js/Express · TypeScript
Événements disponibles (14)
| Événement | Description |
|---|---|
| enrollment.created | Un apprenant vient d'être inscrit à une formation |
| enrollment.completed | Un apprenant a terminé une formation (100% progression) |
| enrollment.suspended | Accès suspendu manuellement par un admin |
| enrollment.revoked | Inscription révoquée (remboursement ou admin) |
| payment.completed | Paiement capturé avec succès |
| payment.refunded | Paiement remboursé (partiel ou total) |
| payment.failed | Paiement échoué ou annulé par l'apprenant |
| course.published | Formation publiée (DRAFT → PUBLISHED) |
| course.archived | Formation archivée |
| session.started | Session live démarrée |
| session.ended | Session live terminée |
| emargement.signed | Emargement signé par un apprenant |
| certificate.generated | Attestation de formation générée |
| user.created | Nouvel utilisateur créé dans le tenant |
Bonnes pratiques
- Répondez 200 immédiatement, traitez l'événement en arrière-plan (queue)
- Rendez votre handler idempotent — QualiForma peut envoyer un événement plusieurs fois
- Vérifiez toujours la signature avant tout traitement
- Stockez le secret whsec_ dans un secret manager (jamais en clair dans le code)
- Loggez les événements reçus pour le debugging (sans les données sensibles)