Webhooks. Realtime events, betrouwbaar afgeleverd.
Per-workspace webhookendpoints ontvangen click-, conversie- en linkbeheer-events met HMAC-SHA256-signatures. Automatische retries met exponentiële backoff. SIEM-modus streamt events naar je securityplatform.
- 10+ eventtypes - clicks, conversies, domeinwijzigingen
- HMAC-SHA256-signature op elke aflevering
- Retry met exponentiële backoff van 72 uur
- Afleverlog met one-click replay
Eventtypes
10+ eventtypes, direct beschikbaar
Abonneer per endpoint - ontvang alleen de events die je nodig hebt. High-volume click-events worden standaard in een gebatcht venster van 5 seconden verzonden; raw-click-modus levert per click af voor streamprocessors.
- link.clicked
Elke redirectclick. Gebatcht (venster van 5s) of raw-click-modus.
- link.created
Er is een nieuwe short link aangemaakt in de workspace.
- link.updated
Linkmetadata, doel-URL of regels zijn gewijzigd.
- link.deleted
Link verwijderd - werk downstream-referenties bij.
- domain.verified
Custom domain heeft DNS-verificatie doorstaan.
- conversion.attributed
Omzet-event gekoppeld aan een click via Stripe of Shopify.
- campaign.completed
Campagne heeft einddatum of clicklimiet bereikt.
- member.invited
Workspacelid toegevoegd of SCIM-geprovisioneerd.
Plus link.expired, link.click_cap_reached, domain.ssl_issued, en meer - zie de volledige eventcatalogus.
Afleverggaranties
Exponentiële backoff. Venster van 72 uur.
Een non-2xx-response of een time-out van 30 seconden triggert automatische retries: 30 s → 2 min → 10 min → 30 min → 2 u → 8 u → 24 u → 48 u. Na 72 uur is de aflevering permanent mislukt en uit de queue verwijderd - maar nog steeds in het afleverlog voor handmatige replay.
- Time-out van 30 seconden voor de responseGeef direct 200 terug; verwerk asynchroon als je handler traag is.
- 8 retrypogingen over 72 uurExponentiële backoff - geen lawine-effect bij herstart.
- Automatisch pauzeren na 30 opeenvolgende foutenWorkspace-admin krijgt een e-mailmelding. Hervat vanuit het dashboard.
- One-click replay vanuit het logOriginele payload, hetzelfde event_id - ontvanger moet idempotent zijn.
| Event | Endpoint | Status | Latentie | Tijd | |
|---|---|---|---|---|---|
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 |
Afleverlog
Volledig log. Filteren, inspecteren, opnieuw afspelen.
Elke poging wordt gelogd: event-ID, eventtype, endpoint-URL, HTTP-status, responsbody (tot 4 KB) en latentie. Retentie is 30 dagen op Pro, 90 dagen op Business.
- Filter op eventtype, endpoint, status en datumbereik
- Mislukte vermeldingen tonen de volledige requestbody voor debugging
- Replay stuurt de originele payload - hetzelfde event_id
- API: POST /v1/webhooks/deliveries/:id/replay
- SIEM-modus: gestructureerde JSON met een garantie van 7 dagen retry
Wat je kunt doen
- Click-, conversie-, link- en domeinevents
- HMAC-SHA256-requestsigning
- Automatische retries - tot 72 uur
- SIEM-modus voor security-eventforwarding
- Topicfiltering per eventtype
- Webhook-afleverlog met replay
Wat Elido-webhooks afleveren en hoe aflevering werkt
Webhooks zijn alleen zo nuttig als hun betrouwbaarheid. De onderstaande secties behandelen afleverggaranties, signatureverificatie, retrygedrag en SIEM-modus.
Click-events, conversie-events, link-lifecycle-events en domeinevents - configureerbaar per endpoint
Elk webhookendpoint kan zich abonneren op een of meer eventtypes: click.created (elke redirectclick), conversion.created (conversie-event ontvangen van Stripe, Shopify of een aangepast endpoint), 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. High-volume click-events kunnen ruis veroorzaken - standaard worden click.created-webhooks verzonden met een aggregatievenster van 5 seconden (gebatchte aflevering, tot 100 events per payload). Heb je per-click realtime aflevering nodig (bijvoorbeeld om een streamprocessor te voeden), schakel dan raw-click-modus in op het endpoint; houd er rekening mee dat dit voor drukke workspaces duizenden verzoeken per minuut kan opleveren en alleen moet worden ingeschakeld voor endpoints die de doorvoer kunnen verwerken.
Elk verzoek wordt getekend met HMAC-SHA256 - verifieer de X-Elido-Signature-header vóór verwerking
Elido tekent elke webhookrequestbody met HMAC-SHA256, met het gedeelde secret dat op het endpoint is geconfigureerd. De signature staat in de X-Elido-Signature-header als 'sha256=<hex_digest>'. Verifiëren: berekenHMAC-SHA256 over de ruwe requestbody met het gedeelde secret, vergelijk het resultaat met de headerwaarde met een constant-time vergelijkingsfunctie (om timing-attacks te voorkomen). Verwerk nooit een webhookpayload vóórdat je de signature hebt geverifieerd. Het secret wordt eenmalig getoond bij het aanmaken van het endpoint; roteer het in het dashboard met een zero-downtime overlapvenster (het oude secret blijft 15 minuten geldig nadat een nieuw secret is gegenereerd). Codevoorbeelden voor signatureverificatie in Node.js, Python en Go staan in de webhooksgids op /docs/guides/webhooks.
Automatische retries met exponentiële backoff - tot 72 uur voordat een aflevering als mislukt wordt gemarkeerd
Geeft een endpoint een non-2xx-statuscode terug of loopt het verzoek time-out (time-outlimiet van 30 seconden), dan probeert Elido de aflevering opnieuw met exponentiële backoff: 30 seconden, 2 minuten, 10 minuten, 30 minuten, 2 uur, 8 uur, 24 uur, 48 uur. Na het venster van 72 uur wordt de aflevering permanent als mislukt gemarkeerd en uit de retryqueue verwijderd. Mislukte afleveringen verschijnen in het webhook-afleverlog met de uiteindelijke HTTP-statuscode (of 'timeout'). Je kunt elke mislukte aflevering opnieuw afspelen vanuit het dashboard of de API (POST /v1/webhooks/deliveries/:id/replay) - handig om na een downstream-storing een batch events te herstellen. Endpoints die bij meer dan 30 opeenvolgende afleveringen 5xx teruggeven, worden automatisch gepauzeerd en de workspace-admin krijgt een e-mailmelding. Hervat het endpoint vanuit het dashboard zodra het onderliggende probleem is opgelost.
SIEM-modus streamt workspace-audit-events naar Splunk, Datadog of elk HTTPS-log-ingestie-endpoint
SIEM-modus is een speciale webhookconfiguratie voor het doorsturen van security-events. In plaats van applicatie-events (clicks, conversies) levert SIEM-modus workspace-audit-events: SSO-inlogs, mislukte inlogpogingen, aanmaak/rotatie/verwijdering van API-keys, SCIM-provisioning-events, rolwijzigingen, webhook secret-rotaties en adminacties (linkverwijdering, bulkexports). Het payloadformaat is structureerde JSON met een standaardschema (timestamp, actor, action, target, workspace_id, ip_address, user_agent), ontworpen voor ingestie in gangbare SIEM-platforms. SIEM-webhooks hebben een afleverggarantie met tot 7 dagen retry en worden apart ondertekend van applicatiewebhooks. Geteste integraties: Splunk HTTP Event Collector (HEC), Datadog Logs API, Elastic Logstash HTTP-input en elk generiek HTTPS-log-endpoint. SIEM-modus is een Business-only functie.
Volledig afleverlog met requestbody, responscode en one-click replay voor mislukte afleveringen
Elke webhook-afleverpoging wordt gelogd: event-ID, eventtype, endpoint-URL, aflevertijdstip, HTTP-statuscode, responsbody (tot 4KB) en latentie. Het afleverlog is doorzoekbaar op eventtype, endpoint, datumbereik en status (afgeleverd, opnieuw proberen, mislukt). Mislukte afleveringen bevatten de volledige requestbody, zodat je het event dat mislukte kunt inspecteren zonder het opnieuw af te spelen. Replay: POST /v1/webhooks/deliveries/:id/replay stuurt de originele payload (geen nieuw event) naar het endpoint - idempotentie op je ontvanger is vereist. Retentie van het afleverlog is 30 dagen op Pro, 90 dagen op Business. Voor permanente audit van webhookevents configureer je een SIEM-endpoint of schakel je geplande export van het auditlog in.
Engineeringteams die Elido-webhooks in productie gebruiken
Namen zijn placeholders - echte klantcasestudy's komen hier zodra ze gepubliceerd zijn.
“We verwerken click.created-webhooks in gebatchte modus om onze eigen analyticspipeline te vullen. De HMAC-signatureverificatie en het afleverlog met replay hebben ons uren scheelbetaald tijdens het debuggen van een gedeeltelijke storing - we hebben de gemiste batch events vanuit het dashboard opnieuw afgespeeld, zonder het event vanaf de bron te herbouwen.”
“SIEM-modus die workspace-audit-events naar onze Splunk HEC streamt, was de enterprise-functie die ons InfoSec-team vereiste. SSO-inlogevents en API-keyrotaties in Splunk, met het juiste schema, betekenden dat we binnen een dag na de setup Elido-toegangsevents konden correleren met onze SIEM-alertregels.”
“link.expired-webhooks triggeren onze interne workflow om de database met gedrukt materiaal bij te werken - wanneer een QR-code-link verloopt, krijgt ons opsteam automatisch een taak om het fysieke label bij te werken. Nul handmatige monitoring van linkverlooptoestanden.”
Elido-webhooks vs Bitly vs Short.io
Noch Bitly, noch Short.io biedt uitgaande webhooks met HMAC-signing en retrygaranties. Deze vergelijking is eerlijk over de kloof.
| Feature | Elido | Bitly | Short.io |
|---|---|---|---|
| Uitgaande webhooks | Ja - per-workspace endpoints, abonnement per eventtype | Niet beschikbaar | Ja - basale webhook bij click |
| HMAC-SHA256-signing | Ja - elke aflevering getekend, codevoorbeelden meegeleverd | Niet van toepassing | Gedeeltelijk - signature-header aanwezig, niet gedocumenteerd |
| Automatische retries | Ja - exponentiële backoff, venster van 72 uur | Niet van toepassing | Geen retries - fire and forget |
| Afleverlog met replay | Ja - 30 dagen Pro, 90 dagen Business, one-click replay | Niet van toepassing | Geen afleverlog |
| SIEM-audit-eventmodus | Ja - Business, gestructureerde JSON voor SIEM-ingestie | Niet beschikbaar | Niet beschikbaar |
| Automatisch pauzeren van endpoint bij fouten | Ja - gepauzeerd na 30 opeenvolgende fouten, admin geïnformeerd | Niet van toepassing | Niet beschikbaar |
| Eventtypes | Click, conversie, link-lifecycle, domein, audit-events | Niet van toepassing | Alleen click |
Vragen over webhooks
Hoe verifieer ik de HMAC-SHA256-signature?
Lees de ruwe requestbody als bytes (vóór enige JSON-parsing), bereken HMAC-SHA256 over de ruwe bytes met het gedeelde secret van je endpoint, base16-encodeer (hex) het resultaat en vergelijk het met de waarde in de X-Elido-Signature-header na het strippen van het 'sha256='-prefix. Gebruik een constant-time vergelijkingsfunctie (bijvoorbeeld hmac.compare_digest in Python, crypto.timingSafeEqual in Node.js) om timing-attacks te voorkomen. Vergelijk de signature nooit met een standaard string-gelijkheidsoperator. Codevoorbeelden voor Node.js, Python en Go staan op /docs/guides/webhooks#verification.
Wat moet mijn webhookontvanger teruggeven?
Geef HTTP 200 terug (of elke 2xx-statuscode) binnen 30 seconden. De responsbody wordt genegeerd - je kunt een lege body of { ok: true } teruggeven. Duurt je verwerking langer dan 30 seconden, geef dan direct 200 terug en verwerk het event asynchroon (zet het in een interne queue, geef 200 terug, verwerk buiten het requestpad). Het teruggeven van 4xx wordt voor retrydoeleinden hetzelfde behandeld als 5xx - beide triggeren een retry. Geef 200 terug, ook als het event niet relevant is voor jouw integratie (bijvoorbeeld een link.created-event dat je niet nodig hebt), om overbodige retries te voorkomen.
Hoe werkt idempotentie voor webhookevents?
Elke webhookpayload bevat een event_id-veld (UUID). Gebruik dit als idempotency-key op je ontvanger: krijg je hetzelfde event_id twee keer (door een retry na een gedeeltelijke mislukking), verwerk het dan slechts één keer. Sla ontvangen event-ID's op in een deduplicatietabel met een TTL van minstens 72 uur (het retryvenster). De retry-payload is identiek aan de originele - hetzelfde event_id, dezelfde body - dus een eenvoudige controle van 'heb ik dit event_id al gezien?' is voldoende.
Waarom wordt mijn endpoint automatisch gepauzeerd?
Endpoints worden automatisch gepauzeerd na 30 opeenvolgende afleverfouten (non-2xx of timeout). Dit voorkomt dat Elido een kapot endpoint eindeloos blijft bestoken. Los het onderliggende probleem op (meestal: de endpoint-URL is gewijzigd, de server is offline, of de time-out van 30 seconden wordt overschreden door trage verwerking), en hervat het endpoint dan in het dashboard. Eenmaal hervat, speelt Elido events die tijdens de pauze zijn overgeslagen niet automatisch opnieuw af - speel ze handmatig opnieuw af vanuit het afleverlog als je die events wilt herstellen.
Kan ik click-events realtime ontvangen voor elke afzonderlijke click?
Ja - schakel raw-click-modus in op het endpoint. In raw-click-modus levert Elido click.created-events individueel af, zonder batchvenster, binnen 2 seconden na de click. Houd er rekening mee dat een drukke workspace duizenden events per minuut kan produceren in raw-click-modus; zorg dat je ontvanger de doorvoer kan verwerken. Voor de meeste analyticsusecases is de standaard gebatchte aggregatie van 5 seconden (tot 100 clicks per payload) voldoende en levert veel minder HTTP-verzoeken op.
Wat is de limiet voor de payloadgrootte van webhookevents?
Individuele eventpayloads zijn kleiner dan 10KB. Gebatchte click-payloads (standaardmodus) kunnen tot 100 events per batch bevatten, met een totale payloadgrootte van maximaal 100KB. Zou een batch de 100KB overschrijden, dan wordt deze automatisch opgesplitst in meerdere afleveringen. Grote metadatavelden op clicks (bijvoorbeeld lange referer-URL's) worden afgekapt op 2KB per veld. Legt jouw ontvanger een strikte limiet op payloadgrootte op, configureer dan raw-click-modus (één event per aflevering) in plaats van gebatchte modus.
Kan ik webhooks lokaal testen tijdens development?
Gebruik een tool als ngrok, Cloudflare Tunnel of localtunnel om je lokale server met een publieke HTTPS-URL bloot te stellen, en registreer die URL vervolgens als webhookendpoint in je testworkspace. Je kunt ook de webhook test-fire-knop in het dashboard gebruiken om een voorbeeldpayload voor elk eventtype naar een geregistreerd endpoint te sturen zonder een echt event te triggeren. De Elido CLI (elido webhook test --event click.created --endpoint https://...) werkt ook voor scripted lokaal testen.
Wat gebeurt er met webhookevents tijdens een gepland onderhoudsvenster?
Events die tijdens een onderhoudsvenster worden gegenereerd, worden in onze event-stream gequeued en afgeleverd zodra het onderhoudsvenster is afgelopen. De Elido-statuspagina (status.elido.app) kondigt geplande onderhoudsvensters vooraf aan. De webhook-afleverSLA sluit aangekondigde onderhoudsvensters uit. Bij het typische onderhoudsvenster van 30–60 minuten betekent het retryvenster van 72 uur dat er nooit events permanent verloren gaan - ze worden afgeleverd in de volgorde waarin ze zijn gegenereerd, zodra het endpoint weer bereikbaar is.
Verder lezen
Het synchrone API-complement van asynchrone webhooks - maak en query links programmatisch.
Ontvang conversie-events via webhooks van Stripe en Shopify - de inkomende webhookkant.
SIEM-modus levert workspace-audit-events - SSO-inlogs, SCIM-provisioning, rolwijzigingen.
Click-events in je analyticsopslag - het query-alternatief voor het ontvangen van clicks via webhook.
Klaar om het te proberen?
Begin met het gratis plan, upgrade wanneer je een custom domain nodig hebt.