Elido
Tout ce qu'Elido fait
Pro & Business

Webhooks. Real-time events, delivered reliably.

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+ event types — clicks, conversions, domain changes
  • HMAC-SHA256 signature on every delivery
  • 72-hour exponential-backoff retry
  • Delivery log with one-click replay
Webhook delivery
Event sourcelink.clickedlink.createdElidoHMAC-SHA256sign + enqueueYour endpointPOST /webhooksapi.acme.com010203
Outbound request
POSThttps://api.acme.com/webhooks
X-Elido-Signature: sha256=3c4d2e1f8a...
Content-Type: application/json
X-Elido-Event: link.clicked
{
"event": "link.clicked",
"event_id": "evt_01hw...",
"data": { link_id, url, country, device, ts }
}
<2s median latency HMAC-SHA256 signed
<2s
Latence médiane de livraison
72h
Fenêtre de tentatives avant échec final
HMAC-SHA256
Algorithme de signature
10+
Types d'événements supportés

Event types

10+ event types out of the box

Subscribe per endpoint — receive only the events you care about. High-volume click events ship in a 5-second batched window by default; raw-click mode delivers per-click for stream processors.

10+ event types
  • link.clicked

    Every redirect click. Batched (5s window) or raw-click mode.

  • link.created

    A new short link was created in the workspace.

  • link.updated

    Link metadata, target URL, or rules changed.

  • link.deleted

    Link removed — update any downstream references.

  • domain.verified

    Custom domain passed DNS verification.

  • conversion.attributed

    Revenue event matched to a click via Stripe or Shopify.

  • campaign.completed

    Campaign reached its end date or click cap.

  • member.invited

    Workspace member added or SCIM-provisioned.

Plus link.expired, link.click_cap_reached, domain.ssl_issued, and more — see the full event catalog.

Delivery guarantees

Exponential backoff. 72-hour window.

A non-2xx response or a 30-second timeout triggers automatic retries: 30 s → 2 min → 10 min → 30 min → 2 h → 8 h → 24 h → 48 h. After 72 hours the delivery is permanently failed and removed from the queue — but still in the delivery log for manual replay.

  • 30-second response timeout
    Return 200 immediately; process async if your handler is slow.
  • 8 retry attempts over 72 hours
    Exponential backoff — no avalanche effect on restart.
  • Auto-pause after 30 consecutive failures
    Workspace admin notified by email. Resume from dashboard.
  • One-click replay from log
    Original payload, same event_id — receiver must be idempotent.
Delivery retry timeline
72-hour retry window
Attempt 1
14:02:01
500 Internal Server Error
30s backoffexponential × 1
Attempt 2
14:02:31
timeout (30s)
2 min backoffexponential × 4
Attempt 3
14:04:31
200 OK
Response timeout
30 seconds
Max attempts
8 retries
Window
72 hours
Webhook delivery log
SIEM mode
EventEndpointStatusLatencyTime
link.clickedapi.acme.com/wh200142ms14:04:31
link.createdapi.acme.com/wh20088ms14:03:19
conversion.attributedlogs.acme.com50030001ms14:02:01
domain.verifiedapi.acme.com/wh20067ms13:58:44
link.deletedlogs.acme.comtimeout30000ms13:55:12
Showing 5 of 1,284 deliveries · Last 24 hoursEndpoint active

Delivery log

Full log. Filter, inspect, replay.

Every attempt is logged: event ID, event type, endpoint URL, HTTP status, response body (up to 4 KB), and latency. Retention is 30 days on Pro, 90 days on Business.

  • Filter by event type, endpoint, status, and date range
  • Failed entries show full request body for debugging
  • Replay sends original payload — same event_id
  • API: POST /v1/webhooks/deliveries/:id/replay
  • SIEM mode: structured JSON with 7-day retry guarantee

What you can do

  • É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.

Types d'événements
01

É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.

Vérification de signature
02

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.

Comportement de nouvelles tentatives
03

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.

Mode SIEM
04

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
05

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.

I
Ingénierie plateforme, SaaS B2B, Amsterdam
Ingénieur Plateforme Senior

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.

I
Ingénierie sécurité, fintech, Francfort
Ingénieur Sécurité de l'Information

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.

I
Ingénierie d'intégration, SaaS logistique, Riga
Ingénieur d'Intégration

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.

FeatureElidoBitlyShort.io
Webhooks sortantsOui — endpoints par workspace, abonnement par type d'événementNon disponibleOui — webhook basique sur clic
Signature HMAC-SHA256Oui — chaque livraison signée, exemples de code fournisNon applicablePartiel — en-tête de signature présent, non documenté
Nouvelles tentatives automatiquesOui — backoff exponentiel, fenêtre de 72 heuresNon applicablePas de nouvelles tentatives — fire and forget
Journal de livraison avec rejeuOui — 30 jours Pro, 90 jours Business, rejeu en un clicNon applicablePas de journal de livraison
Mode SIEM pour événements d'auditOui — Business, JSON structuré pour ingestion SIEMNon disponibleNon disponible
Pause automatique de l'endpoint en cas d'échecOui — mis en pause après 30 échecs consécutifs, admin notifiéNon applicableNon disponible
Types d'événementsClic, conversion, cycle de vie des liens, domaine, événements d'auditNon applicableClic 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 Redpanda 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.

Prêt à essayer ?

Commencez avec le forfait gratuit, passez à la version supérieure lorsque vous avez besoin d'un domaine personnalisé.

Webhooks — Événements en temps réel, livrés de manière fiable. · Elido