Webhooks. Événements en temps réel, livrés de manière fiable.
Des endpoints webhook par workspace reçoivent les événements de clics, conversions et gestion de liens avec des signatures HMAC-SHA256. Nouvelles tentatives automatiques avec backoff exponentiel. Le mode SIEM diffuse les événements vers votre plateforme de sécurité.
- 10+ types d’événements - clics, conversions, changements de domaine
- Signature HMAC-SHA256 sur chaque livraison
- Réessais avec backoff exponentiel sur 72 heures
- Journal de livraison avec replay en un clic
Types d’événements
10+ types d’événements prêts à l’emploi
Abonnez-vous par endpoint - ne recevez que les événements qui vous intéressent. Les événements de clic à haut volume sont envoyés par défaut dans une fenêtre batch de 5 secondes ; le mode raw-click livre par clic pour les traitements en streaming.
- link.clicked
Chaque clic de redirection. Mode batch (fenêtre 5 s) ou raw-click.
- link.created
Un nouveau lien court a été créé dans le workspace.
- link.updated
Métadonnées, URL cible ou règles du lien modifiées.
- link.deleted
Lien supprimé - mettez à jour toute référence en aval.
- domain.verified
Le domaine personnalisé a passé la vérification DNS.
- conversion.attributed
Événement de revenu rattaché à un clic via Stripe ou Shopify.
- campaign.completed
La campagne a atteint sa date de fin ou son plafond de clics.
- member.invited
Membre du workspace ajouté ou provisionné par SCIM.
Plus link.expired, link.click_cap_reached, domain.ssl_issued et davantage - voir le catalogue complet d’événements.
Garanties de livraison
Backoff exponentiel. Fenêtre de 72 heures.
Une réponse hors 2xx ou un timeout de 30 secondes déclenche des réessais automatiques : 30 s → 2 min → 10 min → 30 min → 2 h → 8 h → 24 h → 48 h. Après 72 heures, la livraison est définitivement marquée comme échouée et retirée de la file - mais reste dans le journal pour un replay manuel.
- Timeout de réponse de 30 secondesRetournez 200 immédiatement ; traitez en asynchrone si votre handler est lent.
- 8 tentatives sur 72 heuresBackoff exponentiel - pas d’effet avalanche au redémarrage.
- Auto-pause après 30 échecs consécutifsL’admin du workspace est notifié par e-mail. Reprenez depuis le tableau de bord.
- Replay en un clic depuis le journalPayload original, même event_id - le récepteur doit être idempotent.
| Événement | Endpoint | Statut | Latence | Heure | |
|---|---|---|---|---|---|
link.clicked | api.acme.com/wh | 200 | 142ms | 14:04:31 | |
link.created | api.acme.com/wh | 200 | 88ms | 14:03:19 | |
conversion.attributed | logs.acme.com | 500 | 30001ms | 14:02:01 | |
domain.verified | api.acme.com/wh | 200 | 67ms | 13:58:44 | |
link.deleted | logs.acme.com | timeout | 30000ms | 13:55:12 |
Journal de livraison
Journal complet. Filtrez, inspectez, rejouez.
Chaque tentative est journalisée : ID d’événement, type, URL de l’endpoint, statut HTTP, corps de réponse (jusqu’à 4 Ko) et latence. Rétention : 30 jours sur Pro, 90 jours sur Business.
- Filtrez par type d’événement, endpoint, statut et plage de dates
- Les entrées échouées affichent le corps complet de la requête pour le débogage
- Le replay renvoie le payload original - même event_id
- API : POST /v1/webhooks/deliveries/:id/replay
- Mode SIEM : JSON structuré avec garantie de réessais sur 7 jours
Ce que vous pouvez faire
- Événements de clics, conversions, liens et domaines
- Signature HMAC-SHA256 des requêtes
- Nouvelles tentatives automatiques - jusqu'à 72 heures
- Mode SIEM pour le transfert d'événements de sécurité
- Filtrage par type d'événement
- Journal de livraison webhook avec rejeu
Ce que les webhooks Elido délivrent et comment la livraison fonctionne
Les webhooks ne sont utiles que s'ils sont fiables. Les sections ci-dessous couvrent les garanties de livraison, la vérification de signature, le comportement de nouvelles tentatives et le mode SIEM.
Événements de clics, de conversions, de cycle de vie des liens et de domaines - configurables par endpoint
Chaque endpoint webhook peut s'abonner à un ou plusieurs types d'événements : click.created (chaque clic de redirection), conversion.created (événement de conversion reçu de Stripe, Shopify ou endpoint personnalisé), link.created, link.updated, link.deleted, link.expired, link.click_cap_reached, domain.verified, domain.ssl_issued, domain.ssl_error, workspace.member.added, workspace.member.removed. Les événements de clics à fort volume peuvent être bruyants - par défaut, les webhooks click.created sont envoyés avec une fenêtre d'agrégation de 5 secondes (livraison par lots, jusqu'à 100 événements par payload). Si vous avez besoin d'une livraison en temps réel par clic (par ex. alimentation d'un processeur de flux), activez le mode raw-click sur l'endpoint ; notez que cela peut produire des milliers de requêtes par minute pour les workspaces actifs et ne devrait être activé que pour les endpoints pouvant gérer le débit.
Chaque requête est signée en HMAC-SHA256 - vérifiez l'en-tête X-Elido-Signature avant traitement
Elido signe chaque corps de requête webhook en HMAC-SHA256 avec le secret partagé configuré sur l'endpoint. La signature est incluse dans l'en-tête X-Elido-Signature sous la forme 'sha256=<hex_digest>'. Pour vérifier : calculez le HMAC-SHA256 sur le corps brut de la requête avec le secret partagé, comparez le résultat à la valeur de l'en-tête en utilisant une fonction de comparaison à temps constant (pour prévenir les attaques temporelles). Ne traitez jamais un payload webhook avant d'avoir vérifié la signature. Le secret est affiché une seule fois à la création de l'endpoint ; effectuez la rotation dans le dashboard avec une fenêtre de chevauchement sans interruption (l'ancien secret reste valide 15 minutes après la génération d'un nouveau). Des exemples de code pour la vérification de signature en Node.js, Python et Go sont dans le guide webhooks à /docs/guides/webhooks.
Nouvelles tentatives automatiques avec backoff exponentiel - jusqu'à 72 heures avant qu'une livraison soit marquée en échec
Si un endpoint renvoie un code de statut non-2xx ou expire (timeout de réponse de 30 secondes), Elido réessaie la livraison avec un backoff exponentiel : 30 secondes, 2 minutes, 10 minutes, 30 minutes, 2 heures, 8 heures, 24 heures, 48 heures. Après la fenêtre de 72 heures, la livraison est marquée comme définitivement échouée et retirée de la file de nouvelles tentatives. Les livraisons échouées apparaissent dans le journal de livraison webhook avec le code de statut HTTP final (ou « timeout »). Vous pouvez rejouer toute livraison échouée depuis le dashboard ou l'API (POST /v1/webhooks/deliveries/:id/replay) - utile pour récupérer un lot d'événements après une panne en aval. Les endpoints qui renvoient 5xx pendant plus de 30 livraisons consécutives sont automatiquement mis en pause et l'admin du workspace est notifié par email. Reprenez l'endpoint depuis le dashboard une fois le problème sous-jacent résolu.
Le mode SIEM diffuse les événements d'audit du workspace vers Splunk, Datadog ou tout endpoint d'ingestion de logs HTTPS
Le mode SIEM est une configuration webhook spéciale pour le transfert d'événements de sécurité. Au lieu des événements applicatifs (clics, conversions), le mode SIEM délivre les événements d'audit du workspace : connexions SSO, échecs de connexion, création/rotation/suppression de clés API, événements de provisionnement SCIM, changements de rôles, rotations de secrets webhook et actions admin (suppression de liens, exports en masse). Le format du payload est un JSON structuré avec un schéma standard (timestamp, actor, action, target, workspace_id, ip_address, user_agent) conçu pour l'ingestion dans les plateformes SIEM courantes. Les webhooks SIEM ont une garantie de livraison avec nouvelles tentatives sur 7 jours et sont signés séparément des webhooks applicatifs. Intégrations testées : Splunk HTTP Event Collector (HEC), Datadog Logs API, Elastic Logstash HTTP input et tout endpoint HTTPS de logs générique. Le mode SIEM est une fonctionnalité réservée au plan Business.
Journal de livraison complet avec corps de requête, code de réponse et rejeu en un clic pour les livraisons échouées
Chaque tentative de livraison webhook est journalisée : ID d'événement, type d'événement, URL d'endpoint, horodatage de livraison, code de statut HTTP, corps de réponse (jusqu'à 4 Ko) et latence. Le journal est interrogeable par type d'événement, endpoint, plage de dates et statut (livré, en cours de nouvelles tentatives, échoué). Les livraisons échouées incluent le corps complet de la requête pour que vous puissiez inspecter l'événement sans rejouer. Rejeu : POST /v1/webhooks/deliveries/:id/replay envoie le payload original (pas un nouvel événement) à l'endpoint - l'idempotence de votre récepteur est requise. La rétention du journal est de 30 jours sur Pro, 90 jours sur Business. Pour un audit permanent des événements webhook, configurez un endpoint SIEM ou activez l'export planifié du journal d'audit.
Équipes d'ingénierie utilisant les webhooks Elido en production
Les noms sont des exemples fictifs - les vraies études de cas clients seront publiées ici.
“Nous consommons les webhooks click.created en mode batch pour alimenter notre propre pipeline d'analytics. La vérification de signature HMAC et le journal de livraison avec rejeu nous ont fait gagner des heures de débogage lors d'une panne partielle - nous avons rejoué les événements manqués depuis le dashboard sans reconstruire l'événement depuis la source.”
“Le mode SIEM diffusant les événements d'audit du workspace vers notre Splunk HEC était la fonctionnalité entreprise que notre équipe InfoSec exigeait. Les événements de connexion SSO et rotations de clés API dans Splunk, avec le bon schéma, nous ont permis de corréler les événements d'accès Elido avec nos règles d'alerte SIEM en un jour de mise en place.”
“Les webhooks link.expired déclenchent notre workflow interne de mise à jour de la base de matériaux imprimés - quand un lien de QR code expire, notre équipe ops reçoit automatiquement une tâche pour mettre à jour l'étiquette physique. Zéro surveillance manuelle des états d'expiration de liens.”
Webhooks Elido vs Bitly vs Short.io
Ni Bitly ni Short.io n'offrent de webhooks sortants avec signature HMAC et garanties de nouvelles tentatives. Cette comparaison est honnête sur l'écart.
| Feature | Elido | Bitly | Short.io |
|---|---|---|---|
| Webhooks sortants | Oui - endpoints par workspace, abonnement par type d'événement | Non disponible | Oui - webhook basique sur clic |
| Signature HMAC-SHA256 | Oui - chaque livraison signée, exemples de code fournis | Non applicable | Partiel - en-tête de signature présent, non documenté |
| Nouvelles tentatives automatiques | Oui - backoff exponentiel, fenêtre de 72 heures | Non applicable | Pas de nouvelles tentatives - fire and forget |
| Journal de livraison avec rejeu | Oui - 30 jours Pro, 90 jours Business, rejeu en un clic | Non applicable | Pas de journal de livraison |
| Mode SIEM pour événements d'audit | Oui - Business, JSON structuré pour ingestion SIEM | Non disponible | Non disponible |
| Pause automatique de l'endpoint en cas d'échec | Oui - mis en pause après 30 échecs consécutifs, admin notifié | Non applicable | Non disponible |
| Types d'événements | Clic, conversion, cycle de vie des liens, domaine, événements d'audit | Non applicable | Clic uniquement |
Questions sur les webhooks
Comment vérifier la signature HMAC-SHA256 ?
Lisez le corps brut de la requête en octets (avant tout parsing JSON), calculez le HMAC-SHA256 sur les octets bruts avec le secret partagé de votre endpoint, encodez en base16 (hex) le résultat, et comparez-le à la valeur de l'en-tête X-Elido-Signature après avoir retiré le préfixe 'sha256='. Utilisez une fonction de comparaison à temps constant (par ex. hmac.compare_digest en Python, crypto.timingSafeEqual en Node.js) pour prévenir les attaques temporelles. Ne comparez jamais la signature avec un opérateur d'égalité de chaîne standard. Exemples de code pour Node.js, Python et Go à /docs/guides/webhooks#verification.
Que doit renvoyer mon récepteur de webhooks ?
Renvoyez HTTP 200 (ou tout code de statut 2xx) dans les 30 secondes. Le corps de la réponse est ignoré - vous pouvez renvoyer un corps vide ou { ok: true }. Si votre traitement prend plus de 30 secondes, renvoyez 200 immédiatement et traitez l'événement de manière asynchrone (ajoutez à une file interne, renvoyez 200, traitez hors du chemin de la requête). Renvoyer 4xx est traité de la même façon que 5xx pour les nouvelles tentatives - les deux déclenchent un nouvel essai. Renvoyez 200 même si l'événement n'est pas pertinent pour votre intégration (par ex. un événement link.created dont vous n'avez pas besoin) pour éviter les nouvelles tentatives parasites.
Comment fonctionne l'idempotence pour les événements webhook ?
Chaque payload webhook inclut un champ event_id (UUID). Utilisez-le comme clé d'idempotence sur votre récepteur : si vous recevez le même event_id deux fois (suite à une nouvelle tentative après un échec partiel), ne le traitez qu'une seule fois. Stockez les event_id reçus dans une table de déduplication avec un TTL d'au moins 72 heures (la fenêtre de nouvelles tentatives). Le payload de nouvelle tentative est identique à l'original - même event_id, même corps - donc une simple vérification « ai-je déjà vu cet event_id ? » suffit.
Pourquoi mon endpoint est-il automatiquement mis en pause ?
Les endpoints sont automatiquement mis en pause après 30 échecs de livraison consécutifs (non-2xx ou timeout). Cela empêche Elido de marteler un endpoint défaillant indéfiniment. Corrigez le problème sous-jacent (généralement : l'URL de l'endpoint a changé, le serveur est hors service, ou le timeout de 30 secondes est dépassé à cause d'un traitement lent), puis reprenez l'endpoint dans le dashboard. Une fois repris, Elido ne rejoue pas automatiquement les événements ignorés pendant la pause - rejouez-les manuellement depuis le journal de livraison si vous devez récupérer ces événements.
Puis-je recevoir les événements de clics en temps réel pour chaque clic individuel ?
Oui - activez le mode raw-click sur l'endpoint. En mode raw-click, Elido délivre les événements click.created individuellement sans fenêtre d'agrégation, dans les 2 secondes du clic. Sachez qu'un workspace actif peut produire des milliers d'événements par minute en mode raw-click ; assurez-vous que votre récepteur peut gérer le débit. Pour la plupart des cas d'analyse, l'agrégation par lots par défaut de 5 secondes (jusqu'à 100 clics par payload) est suffisante et produit beaucoup moins de requêtes HTTP.
Quelle est la taille maximale du payload pour les événements webhook ?
Les payloads d'événements individuels font moins de 10 Ko. Les payloads de clics par lots (mode par défaut) peuvent contenir jusqu'à 100 événements, avec une taille totale plafonnée à 100 Ko. Si un lot dépasse 100 Ko, il est automatiquement divisé en plusieurs livraisons. Les champs de métadonnées volumineux (par ex. de longues URL de referrer) sont tronqués à 2 Ko par champ. Si votre récepteur impose une limite stricte de taille de payload, configurez le mode raw-click (un événement par livraison) au lieu du mode par lots.
Existe-t-il un moyen de tester les webhooks localement pendant le développement ?
Utilisez un outil comme ngrok, Cloudflare Tunnel ou localtunnel pour exposer votre serveur local avec une URL HTTPS publique, puis enregistrez cette URL comme endpoint webhook dans votre workspace de test. Alternativement, utilisez le bouton de test webhook dans le dashboard pour envoyer un payload d'exemple pour tout type d'événement à un endpoint enregistré sans déclencher un événement réel. Le CLI Elido (elido webhook test --event click.created --endpoint https://...) fonctionne également pour les tests locaux scriptés.
Que se passe-t-il pour les événements webhook pendant une fenêtre de maintenance planifiée ?
Les événements générés pendant une fenêtre de maintenance sont mis en file d'attente dans notre flux d'événements et délivrés après la fin de la maintenance. La page de statut Elido (status.elido.app) annonce les fenêtres de maintenance planifiées à l'avance. Le SLA de livraison webhook exclut les fenêtres de maintenance annoncées. Pour une fenêtre de maintenance typique de 30 à 60 minutes, la fenêtre de nouvelles tentatives de 72 heures garantit qu'aucun événement n'est définitivement perdu - ils sont délivrés dans l'ordre de génération une fois l'endpoint à nouveau accessible.
Continuer la lecture
Le complément API synchrone aux webhooks asynchrones - créez et interrogez les liens par programmation.
Recevez les événements de conversion via webhooks depuis Stripe et Shopify - le côté webhook entrant.
Le mode SIEM délivre les événements d'audit du workspace - connexions SSO, provisionnement SCIM, changements de rôles.
Les événements de clics dans votre entrepôt d'analytique - l'alternative côté requête à la réception de clics via webhook.
Prêt à essayer ?
Commencez avec le forfait gratuit, passez à la version supérieure lorsque vous avez besoin d'un domaine personnalisé.