Un webhook permet à FlexiProject de notifier un système externe à l’instant même où quelque chose se produit dans votre organisation. Au lieu d’interroger l’API sans cesse pour savoir si quelque chose a changé, votre système reçoit une requête HTTP contenant les données de l’événement juste après qu’il s’est produit.
Un webhook relie un événement à une adresse de destinataire. Pour envoyer deux événements différents à la même adresse, ou le même événement à deux systèmes, créez deux webhooks.
Vous configurez les webhooks dans Paramètres du système > Webhooks. Cette section est accessible aux administrateurs système (voir Utilisateurs et permissions). Pour lire des données par un autre canal, utilisez l’API.
Événements
FlexiProject signale quatre événements. Chaque webhook n’écoute qu’un seul de ces événements, choisi dans la liste Événement.

| Événement | Quand FlexiProject envoie la requête | Données propres à l’événement |
|---|---|---|
| Projet créé | Un nouveau projet a vu le jour, de n’importe quelle manière : de zéro, à partir d’un modèle, par clonage, par import d’un fichier MS Project ou Excel, ou avec l’aide de l’IA. | projectId, projectName, createdAt |
| Projet supprimé | Un projet a été supprimé. | projectId, projectName |
| Acceptation démarrée | Un changement de base a été soumis à acceptation et son parcours de validation a démarré. | changeRequestId, changeRequestName, projectId, projectName, date |
| Acceptation terminée | Le parcours de validation s’est terminé par une décision : acceptation, rejet ou annulation. | changeRequestId, changeRequestName, projectId, projectName, decisionDate, status |
Chaque requête contient aussi le nom de l’événement (event), le moment de sa génération (timestamp), ainsi que l’identifiant (userId) et l’adresse e-mail (userEmail) de l’utilisateur dont l’action l’a déclenchée. Le format de la requête entière est décrit dans Format de la requête HTTP. Les acceptations sont décrites dans Acceptations.
Configuration du webhook
Liste des webhooks
La page Webhooks affiche tous les webhooks de l’organisation dans trois colonnes : Événement, URL du destinataire et Description. Lorsque rien n’est défini, le message Aucun webhook s’affiche.

Ajouter un webhook
- Cliquez sur le bouton d’ajout au-dessus de la liste. La fenêtre Ajouter un webhook s’ouvre.
- Choisissez l’Événement. Projet créé est sélectionné par défaut.
- Saisissez l’URL du destinataire — l’adresse à laquelle FlexiProject envoie la requête. Le champ est obligatoire et exige l’adresse complète, protocole compris, par exemple
https://example.com/hooks/flexiproject. Une adresse incomplète est rejetée avec un message d’erreur de traitement des données. - Saisissez éventuellement une Description — une note pour votre équipe, visible uniquement dans la liste.
- Cliquez sur Enregistrer.
Secret
Juste après l’enregistrement, la fenêtre Secret s’affiche avec le message : Le webhook a été créé. Ci-dessous se trouve le secret, qui ne sera affiché qu’une seule fois. Copiez-le et conservez-le en lieu sûr. Le bouton Copier place la valeur dans le presse-papiers (message Copié dans le presse-papiers), et vous l’enregistrez dans le système récepteur. Le secret signe chaque requête, ce qui permet au destinataire de confirmer que la requête provient de FlexiProject (voir Format de la requête HTTP).
Une fois la fenêtre fermée, la valeur complète n’est plus disponible nulle part dans l’application. Dans un webhook ouvert ultérieurement, le champ Secret n’affiche que les quatre premiers et les quatre derniers caractères, avec des astérisques au milieu ; ce champ n’est pas modifiable.
Modifier un webhook
Cliquez sur le nom d’un événement dans la liste pour ouvrir la fenêtre Modifier le webhook. Vous y modifiez l’événement, l’adresse du destinataire et la description, puis cliquez sur Enregistrer. Le secret reste inchangé — la modification n’en génère jamais de nouveau. Fermer la fenêtre avec des modifications non enregistrées fait apparaître la question Voulez-vous aller de l’avant et renoncer au changement ?
Tester un webhook
Le bouton Tester se trouve dans la fenêtre de modification d’un webhook enregistré. Il envoie à l’adresse configurée une requête au format de l’événement choisi, remplie de données d’exemple (par exemple un projet nommé Test Project), et confirme avec Requête de test envoyée avec succès. Ce message confirme que la requête a été envoyée, et non que le destinataire l’a acceptée — vérifiez le résultat du côté du système récepteur.
Supprimer un webhook
Le bouton Supprimer de la fenêtre du webhook demande de confirmer la question Voulez-vous vraiment supprimer le webhook ? À partir de ce moment, l’événement n’est plus envoyé à cette adresse. La suppression est irréversible ; pour reprendre la livraison, il faut créer un nouveau webhook, donc un nouveau secret.
Format de la requête HTTP
FlexiProject envoie à l’adresse configurée une requête POST avec un corps JSON.
En-têtes
| En-tête | Contenu |
|---|---|
X-FlexiProject-Event |
Le nom de l’événement : ProjectCreated, ProjectDeleted, AcceptanceStarted ou AcceptanceCompleted. |
X-FlexiProject-Delivery |
L’identifiant de livraison. Il reste le même pour toutes les nouvelles tentatives du même événement, ce qui permet d’y reconnaître les doublons. |
X-FlexiProject-Timestamp |
Le moment où la requête a été envoyée. |
X-FlexiProject-Signature |
La signature du corps de la requête sous la forme sha256=<value>. |
Vérifier la signature
La signature est un HMAC-SHA256 du corps brut de la requête, calculé avec le secret du webhook comme clé et écrit en hexadécimal minuscule. Côté récepteur, calculez la même valeur à partir du corps reçu et comparez-la à la partie de l’en-tête X-FlexiProject-Signature située après sha256=. Si les valeurs diffèrent, rejetez la requête — elle ne provient pas de votre organisation dans FlexiProject.
Exemple de corps
{
"projectId": "6712f0a1c3d4e5f601234567",
"projectName": "Warehouse modernization",
"createdAt": "2026-09-21T08:14:02Z",
"userId": "a3f1c7de-1b20-4f9e-9a55-0c2d8e7b41aa",
"userEmail": "anna.kowalska@example.com",
"event": "ProjectCreated",
"timestamp": "2026-09-21T08:14:02Z"
}
Réponse et nouvelles tentatives
Répondez avec un statut de réussite (2xx) dès que vous acceptez la requête. Toute autre réponse, ou l’absence de réponse, est considérée comme un échec de livraison.
Une livraison échouée est renouvelée automatiquement avec un intervalle croissant : après 1, 2, 4, 8, 16, 32, 64, 128, 256 et 512 minutes. Les tentatives s’étalent sur environ dix-sept heures, de sorte qu’un récepteur indisponible pendant un moment ne perd pas l’événement. Chaque tentative reprend la même valeur X-FlexiProject-Delivery ; prévoyez donc dans votre traitement la réception du même événement plusieurs fois.