Webhooks. Real-time events, delivered reliably.
Webhook-Endpunkte pro Workspace empfangen Klick-, Konversions- und Link-Management-Ereignisse mit HMAC-SHA256-Signaturen. Automatische Wiederholungen mit exponentiellem Backoff. Der SIEM-Modus streamt Ereignisse an Ihre Sicherheitsplattform.
- 10+ event types — clicks, conversions, domain changes
- HMAC-SHA256 signature on every delivery
- 72-hour exponential-backoff retry
- Delivery log with one-click replay
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.
- 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 timeoutReturn 200 immediately; process async if your handler is slow.
- 8 retry attempts over 72 hoursExponential backoff — no avalanche effect on restart.
- Auto-pause after 30 consecutive failuresWorkspace admin notified by email. Resume from dashboard.
- One-click replay from logOriginal payload, same event_id — receiver must be idempotent.
| Event | Endpoint | Status | Latency | Time | |
|---|---|---|---|---|---|
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 |
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
- Klick-, Konversions-, Link- und Domain-Ereignisse
- HMAC-SHA256-Anfragesignierung
- Automatische Wiederholungen – bis zu 72 Stunden
- SIEM-Modus für die Weiterleitung von Sicherheitsereignissen
- Themenfilterung pro Ereignistyp
- Webhook-Zustellungsprotokoll mit Replay-Funktion
Was Elido-Webhooks liefern und wie die Zustellung funktioniert
Webhooks sind nur so nützlich wie ihre Zuverlässigkeit. Die folgenden Abschnitte behandeln Zustellgarantien, Signaturverifizierung, Wiederholungsverhalten und den SIEM-Modus.
Klick-Ereignisse, Konversions-Ereignisse, Link-Lifecycle-Ereignisse und Domain-Ereignisse – konfigurierbar pro Endpunkt
Jeder Webhook-Endpunkt kann einen oder mehrere Ereignistypen abonnieren: click.created (jeder Redirect-Klick), conversion.created (Konversions-Ereignis von Stripe, Shopify oder benutzerdefiniertem Endpunkt), 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. Hochvolumige Klick-Ereignisse können störend sein – standardmäßig werden click.created-Webhooks mit einem 5-sekündigen Aggregationsfenster gesendet (gebündelte Zustellung, bis zu 100 Ereignisse pro Payload). Wenn Sie eine Echtzeit-Zustellung pro Klick benötigen (z. B. für einen Stream-Prozessor), aktivieren Sie den Raw-Click-Modus am Endpunkt; beachten Sie, dass dies Tausende von Anfragen pro Minute für stark frequentierte Workspaces erzeugen kann und nur für Endpunkte aktiviert werden sollte, die diesen Durchsatz bewältigen können.
Jede Anfrage wird mit HMAC-SHA256 signiert – verifizieren Sie den X-Elido-Signature-Header vor der Verarbeitung
Elido signiert jeden Webhook-Anfrage-Body mit HMAC-SHA256 unter Verwendung des am Endpunkt konfigurierten Shared Secret. Die Signatur ist im Header X-Elido-Signature als 'sha256=<hex_digest>' enthalten. Zur Verifizierung: Berechnen Sie HMAC-SHA256 über den rohen Anfrage-Body mit dem Shared Secret und vergleichen Sie das Ergebnis mithilfe einer zeitkonstanten Vergleichsfunktion mit dem Header-Wert (um Timing-Angriffe zu verhindern). Verarbeiten Sie niemals eine Webhook-Payload, bevor Sie die Signatur verifiziert haben. Das Secret wird einmalig bei der Erstellung des Endpunkts angezeigt; rotieren Sie es im Dashboard mit einem überschneidenden Fenster ohne Ausfallzeit (das alte Secret bleibt nach der Generierung eines neuen 15 Minuten lang gültig). Code-Beispiele für die Signaturverifizierung in Node.js, Python und Go finden Sie im Webhook-Leitfaden unter /docs/guides/webhooks.
Automatische Wiederholungen mit exponentiellem Backoff – bis zu 72 Stunden, bevor eine Zustellung als fehlgeschlagen markiert wird
Wenn ein Endpunkt einen Nicht-2xx-Statuscode zurückgibt oder eine Zeitüberschreitung auftritt (30 Sekunden Antwort-Timeout), wiederholt Elido die Zustellung mit exponentiellem Backoff: 30 Sekunden, 2 Minuten, 10 Minuten, 30 Minuten, 2 Stunden, 8 Stunden, 24 Stunden, 48 Stunden. Nach dem 72-Stunden-Fenster wird die Zustellung als dauerhaft fehlgeschlagen markiert und aus der Wiederholungswarteschlange entfernt. Fehlgeschlagene Zustellungen erscheinen im Webhook-Zustellungsprotokoll mit dem endgültigen HTTP-Statuscode (oder 'Timeout'). Sie können jede fehlgeschlagene Zustellung über das Dashboard oder die API (POST /v1/webhooks/deliveries/:id/replay) erneut abspielen – nützlich für die Wiederherstellung eines Stapels von Ereignissen nach einem Downstream-Ausfall. Endpunkte, die bei mehr als 30 aufeinanderfolgenden Zustellungen einen 5xx-Fehler zurückgeben, werden automatisch pausiert und der Workspace-Administrator wird per E-Mail benachrichtigt. Setzen Sie den Endpunkt über das Dashboard fort, sobald das zugrunde liegende Problem behoben ist.
Der SIEM-Modus streamt Workspace-Audit-Ereignisse an Splunk, Datadog oder einen beliebigen HTTPS-Log-Ingestion-Endpunkt
Der SIEM-Modus ist eine spezielle Webhook-Konfiguration für die Weiterleitung von Sicherheitsereignissen. Anstelle von Anwendungsereignissen (Klicks, Konversionen) liefert der SIEM-Modus Workspace-Audit-Ereignisse: SSO-Logins, fehlgeschlagene Logins, Erstellung/Rotation/Löschung von API-Keys, SCIM-Provisioning-Ereignisse, Rollenänderungen, Webhook-Secret-Rotationen und Administratoraktionen (Link-Löschung, Massenexporte). Das Payload-Format ist strukturiertes JSON mit einem Standardschema (Zeitstempel, Akteur, Aktion, Ziel, workspace_id, ip_address, user_agent), das für die Ingestion in gängige SIEM-Plattformen entwickelt wurde. SIEM-Webhooks haben eine garantierte Zustellung mit bis zu 7 Tagen Wiederholung und werden separat von Anwendungs-Webhooks signiert. Getestete Integrationen: Splunk HTTP Event Collector (HEC), Datadog Logs API, Elastic Logstash HTTP Input und jeder generische HTTPS-Log-Endpunkt. Der SIEM-Modus ist eine Business-exklusive Funktion.
Vollständiges Zustellungsprotokoll mit Anfrage-Body, Antwortcode und One-Click-Replay für fehlgeschlagene Zustellungen
Jeder Webhook-Zustellungsversuch wird protokolliert: Ereignis-ID, Ereignistyp, Endpunkt-URL, Zeitstempel der Zustellung, HTTP-Statuscode, Antwort-Body (bis zu 4 KB) und Latenz. Das Zustellungsprotokoll ist nach Ereignistyp, Endpunkt, Datumsbereich und Status (zugestellt, wird wiederholt, fehlgeschlagen) abfragbar. Fehlgeschlagene Zustellungen enthalten den vollständigen Anfrage-Body, sodass Sie das fehlgeschlagene Ereignis ohne Replay untersuchen können. Replay: POST /v1/webhooks/deliveries/:id/replay sendet die ursprüngliche Payload (kein neues Ereignis) an den Endpunkt – Idempotenz auf Ihrem Empfänger ist erforderlich. Die Aufbewahrungsdauer des Zustellungsprotokolls beträgt 30 Tage bei Pro, 90 Tage bei Business. Für ein dauerhaftes Audit von Webhook-Ereignissen konfigurieren Sie einen SIEM-Endpunkt oder aktivieren Sie den geplanten Export des Audit-Logs.
Engineering-Teams, die Elido-Webhooks in der Produktion einsetzen
Namen sind Platzhalter – echte Kunden-Fallstudien werden hier veröffentlicht, sobald sie erscheinen.
“Wir nutzen click.created-Webhooks im Batch-Modus, um unsere eigene Analytics-Pipeline zu befüllen. Die HMAC-Signaturverifizierung und das Zustellungsprotokoll mit Replay haben uns Stunden bei der Fehlersuche während eines Teilausfalls erspart – wir konnten die verpassten Ereignis-Batches einfach über das Dashboard erneut abspielen, ohne die Ereignisse mühsam neu generieren zu müssen.”
“Der SIEM-Modus, der Workspace-Audit-Ereignisse an unseren Splunk HEC streamt, war das Enterprise-Feature, das unser InfoSec-Team benötigte. SSO-Login-Ereignisse und API-Key-Rotationen in Splunk mit dem richtigen Schema bedeuteten, dass wir Elido-Zugriffsereignisse innerhalb eines Tages nach der Einrichtung mit unseren SIEM-Alarmregeln korrelieren konnten.”
“link.expired-Webhooks lösen unseren internen Workflow zur Aktualisierung der Datenbank für gedruckte Materialien aus – wenn ein QR-Code-Link abläuft, erhält unser Ops-Team automatisch eine Aufgabe, das physische Etikett zu aktualisieren. Keine manuelle Überwachung von Link-Ablaufdaten mehr.”
Elido-Webhooks vs. Bitly vs. Short.io
Weder Bitly noch Short.io bieten Outbound-Webhooks mit HMAC-Signierung und Wiederholungsgarantien an. Dieser Vergleich zeigt die Lücke deutlich auf.
| Feature | Elido | Bitly | Short.io |
|---|---|---|---|
| Outbound-Webhooks | Ja – Endpunkte pro Workspace, Abonnement pro Ereignistyp | Nicht verfügbar | Ja – Basis-Webhook bei Klick |
| HMAC-SHA256-Signierung | Ja – jede Zustellung signiert, Code-Beispiele vorhanden | Nicht zutreffend | Teilweise – Signatur-Header vorhanden, nicht dokumentiert |
| Automatische Wiederholungen | Ja – exponentieller Backoff, 72-Stunden-Fenster | Nicht zutreffend | Keine Wiederholungen – Fire-and-Forget |
| Zustellungsprotokoll mit Replay | Ja – 30 Tage Pro, 90 Tage Business, One-Click-Replay | Nicht zutreffend | Kein Zustellungsprotokoll |
| SIEM-Audit-Ereignis-Modus | Ja – Business, strukturiertes JSON für SIEM-Ingestion | Nicht verfügbar | Nicht verfügbar |
| Automatische Endpunkt-Pause bei Fehlern | Ja – pausiert nach 30 aufeinanderfolgenden Fehlern, Admin benachrichtigt | Nicht zutreffend | Nicht verfügbar |
| Ereignistypen | Klick-, Konversions-, Link-Lifecycle-, Domain-, Audit-Ereignisse | Nicht zutreffend | Nur Klick |
Webhook-Fragen
Wie verifiziere ich die HMAC-SHA256-Signatur?
Lesen Sie den rohen Anfrage-Body als Bytes (vor jeglichem JSON-Parsing), berechnen Sie HMAC-SHA256 über die rohen Bytes unter Verwendung des Shared Secret Ihres Endpunkts, kodieren Sie das Ergebnis als Base16 (Hex) und vergleichen Sie es mit dem Wert im Header X-Elido-Signature, nachdem Sie das Präfix 'sha256=' entfernt haben. Verwenden Sie eine zeitkonstante Vergleichsfunktion (z. B. hmac.compare_digest in Python, crypto.timingSafeEqual in Node.js), um Timing-Angriffe zu verhindern. Vergleichen Sie die Signatur niemals mit einem Standard-Operator für String-Gleichheit. Code-Beispiele für Node.js, Python und Go finden Sie unter /docs/guides/webhooks#verification.
Was sollte mein Webhook-Empfänger zurückgeben?
Geben Sie innerhalb von 30 Sekunden HTTP 200 (oder einen beliebigen 2xx-Statuscode) zurück. Der Antwort-Body wird ignoriert – Sie können einen leeren Body oder { ok: true } zurückgeben. Wenn Ihre Verarbeitung länger als 30 Sekunden dauert, geben Sie sofort 200 zurück und verarbeiten Sie das Ereignis asynchron (in eine interne Warteschlange einreihen, 200 zurückgeben, außerhalb des Anfragepfads verarbeiten). Die Rückgabe von 4xx wird für Wiederholungszwecke genauso behandelt wie 5xx – beide lösen eine Wiederholung aus. Geben Sie 200 zurück, auch wenn das Ereignis für Ihre Integration nicht relevant ist (z. B. ein link.created-Ereignis, das Sie nicht benötigen), um unnötige Wiederholungen zu vermeiden.
Wie funktioniert die Idempotenz bei Webhook-Ereignissen?
Jede Webhook-Payload enthält ein event_id-Feld (UUID). Verwenden Sie dieses als Idempotenz-Schlüssel auf Ihrem Empfänger: Wenn Sie dieselbe event_id zweimal erhalten (aufgrund einer Wiederholung nach einem Teilfehler), verarbeiten Sie sie nur einmal. Speichern Sie empfangene Ereignis-IDs in einer Deduplizierungstabelle mit einer TTL von mindestens 72 Stunden (das Wiederholungsfenster). Die Wiederholungs-Payload ist identisch mit dem Original – gleiche event_id, gleicher Body – daher ist eine einfache Prüfung auf 'Habe ich diese event_id schon gesehen?' ausreichend.
Warum wird mein Endpunkt automatisch pausiert?
Endpunkte werden nach 30 aufeinanderfolgenden Zustellungsfehlern (Nicht-2xx oder Timeout) automatisch pausiert. Dies verhindert, dass Elido einen defekten Endpunkt unbegrenzt belastet. Beheben Sie das zugrunde liegende Problem (meistens: die Endpunkt-URL hat sich geändert, der Server ist down oder das 30-Sekunden-Timeout wird aufgrund langsamer Verarbeitung überschritten), und setzen Sie den Endpunkt dann im Dashboard fort. Einmal fortgesetzt, spielt Elido Ereignisse, die während der Pause übersprungen wurden, nicht automatisch erneut ab – spielen Sie diese bei Bedarf manuell über das Zustellungsprotokoll ab.
Kann ich Klick-Ereignisse in Echtzeit für jeden einzelnen Klick empfangen?
Ja – aktivieren Sie den Raw-Click-Modus am Endpunkt. Im Raw-Click-Modus liefert Elido click.created-Ereignisse einzeln ohne Aggregationsfenster innerhalb von 2 Sekunden nach dem Klick aus. Beachten Sie, dass ein stark frequentierter Workspace im Raw-Click-Modus Tausende von Ereignissen pro Minute erzeugen kann; stellen Sie sicher, dass Ihr Empfänger diesen Durchsatz bewältigen kann. Für die meisten Analytics-Anwendungsfälle ist die standardmäßige 5-sekündige Aggregation (bis zu 100 Klicks pro Payload) ausreichend und erzeugt weit weniger HTTP-Anfragen.
Wie hoch ist das Limit für die Payload-Größe bei Webhook-Ereignissen?
Einzelne Ereignis-Payloads liegen unter 10 KB. Gebündelte Klick-Payloads (Standardmodus) können bis zu 100 Ereignisse pro Stapel enthalten, wobei die Gesamtgröße der Payload auf 100 KB begrenzt ist. Wenn ein Stapel 100 KB überschreiten würde, wird er automatisch in mehrere Zustellungen aufgeteilt. Große Metadatenfelder bei Klicks (z. B. lange Referer-URLs) werden auf 2 KB pro Feld gekürzt. Wenn Ihr Empfänger ein striktes Limit für die Payload-Größe erzwingt, konfigurieren Sie den Raw-Click-Modus (ein Ereignis pro Zustellung) anstelle des Batch-Modus.
Gibt es eine Möglichkeit, Webhooks während der Entwicklung lokal zu testen?
Verwenden Sie ein Tool wie ngrok, Cloudflare Tunnel, oder localtunnel, um Ihren lokalen Server über eine öffentliche HTTPS-URL zugänglich zu machen, und registrieren Sie diese URL dann als Webhook-Endpunkt in Ihrem Test-Workspace. Alternativ können Sie die Webhook-Test-Schaltfläche im Dashboard verwenden, um eine Beispiel-Payload für einen beliebigen Ereignistyp an einen registrierten Endpunkt zu senden, ohne ein echtes Ereignis auszulösen. Die Elido-CLI (elido webhook test --event click.created --endpoint https://...) funktioniert ebenfalls für skriptgesteuerte lokale Tests.
Was passiert mit Webhook-Ereignissen während eines geplanten Wartungsfensters?
Ereignisse, die während eines Wartungsfensters generiert werden, werden in Redpanda in die Warteschlange gestellt und nach Ende des Wartungsfensters zugestellt. Die Elido-Statusseite (status.elido.app) kündigt geplante Wartungsfenster im Voraus an. Die SLA für die Webhook-Zustellung schließt angekündigte Wartungsfenster aus. Bei einem typischen Wartungsfenster von 30–60 Minuten bedeutet das 72-Stunden-Wiederholungsfenster, dass keine Ereignisse dauerhaft verloren gehen – sie werden in der Reihenfolge ihrer Generierung zugestellt, sobald der Endpunkt wieder erreichbar ist.
Keep reading
Die synchrone API-Ergänzung zu asynchronen Webhooks – erstellen und rufen Sie Links programmatisch ab.
Empfangen Sie Konversions-Ereignisse über Webhooks von Stripe und Shopify – die Inbound-Webhook-Seite.
Der SIEM-Modus liefert Workspace-Audit-Ereignisse – SSO-Logins, SCIM-Provisioning, Rollenänderungen.
Klick-Ereignisse in ClickHouse – die abfrageseitige Alternative zum Empfang von Klicks über Webhooks.
Bereit zum Ausprobieren?
Starten Sie mit dem kostenlosen Plan, upgraden Sie, wenn Sie eine benutzerdefinierte Domain benötigen.