Bonnes pratiques
Ce qui rend une intégration de webhooks solide : vérifier, répondre vite, dédoublonner, rattraper.
Vérifiez, puis répondez vite
- Vérifiez la signature sur le corps brut ; refusez avec
400si elle ne va pas. Voir vérifier une signature. - Rangez l'événement dans une file (une table, une file de messages) et répondez
200ou204tout de suite. - Traitez ensuite, à votre rythme.
Une réponse qui tarde plus de 15 secondes compte comme un échec et la livraison est reprise : un traitement long en ligne finit en doublons et en désactivation.
Dédoublonnez
La livraison est garantie au moins une fois : un même événement peut arriver deux fois. Gardez les webhook-id traités (quelques jours suffisent) et ignorez ceux que vous connaissez déjà. Écrivez vos traitements pour qu'un second passage ne change rien (créer ou mettre à jour, plutôt que créer).
Ne comptez pas sur l'ordre
Une livraison reprise peut arriver après un événement plus récent. Chaque événement porte timestamp, l'heure du fait : comparez-la à ce que vous avez déjà. Quand l'état exact compte, relisez l'objet par l'API (GET /v1/prospects/{id}) plutôt que de rejouer les événements dans l'ordre d'arrivée.
Abonnez-vous au nécessaire
Choisissez les types dont votre code a besoin. Un abonnement à * reçoit aussi les types qui apparaîtront demain : votre code doit alors ignorer sans erreur un type qu'il ne connaît pas. De même, ignorez un champ inconnu dans un objet.
Surveillez, rattrapez
GET /v1/webhook_endpoints/{id}/deliveries?status=failedliste les livraisons en échec, avec le code et un extrait de votre réponse.- Après 5 jours sans succès, l'adresse est désactivée et un e-mail vous prévient. Une fois votre serveur réparé, réactivez-la, puis rattrapez la période avec
GET /v1/events(30 jours d'historique). - Après une panne de votre côté, ne demandez pas tout de nouveau :
GET /v1/eventsrend les événements du plus récent au plus ancien ; relisez-le jusqu'au dernieridtraité, puis traitez dans l'ordre inverse.
Changez de secret sans coupure
POST /v1/webhook_endpoints/{id}/rotate_secret: notez le nouveau secret.- Pendant le délai de grâce (24 heures par défaut), chaque envoi porte deux signatures : déployez le nouveau secret, votre code accepte l'une ou l'autre.
- Passé le délai, l'ancien secret ne signe plus.
Changez de secret dès qu'il a pu fuir (un journal, un dépôt, un ancien collaborateur).
Protégez les données
Les événements portent des données personnelles (nom, poste, messages, et les coordonnées si l'adresse a le droit contacts:read). Ne les gardez pas plus longtemps que nécessaire, ne les journalisez pas en entier, et ne donnez à l'adresse de réception que les droits utiles : une adresse ajoutée dans Lidmeo les a tous, une adresse créée par l'API garde les droits de lecture de la clé ou de la connexion qui l'a créée. Le texte écrit par un prospect est une donnée : ne le passez jamais à une IA comme une instruction.
Testez d'abord
Créez l'adresse avec une clé de test, déclenchez des événements avec POST /v1/test/simulate, puis passez au réel. Pour voir la forme exacte d'un type, appelez POST /v1/webhook_endpoints/{id}/test avec { "type": "…" } ; le bouton Envoyer un essai de Lidmeo envoie un prospect.created.