Op deze pagina
Blijven vragen of het seintje krijgen
Een webhook draait om wie het gesprek begint. Zonder webhook vraagt je software telkens aan een andere dienst of er iets veranderd is: is die betaling al binnen, is dat formulier al ingevuld? Dat heet polling. Met een webhook meldt de andere dienst het zelf, op het moment dat het gebeurt. Je geeft een keer een webadres op, bijvoorbeeld in het dashboard van je betaalprovider, en vanaf dan komt elk bericht daar binnen als een gewone HTTP-POST.
Bij een gewone API-koppeling vraag jij en antwoordt de andere kant. Bij een webhook vertelt de andere kant, en jij luistert. In de praktijk werken ze samen: het bericht zegt dat er iets is, de API geeft de details.
De naam is van programmeur Jeff Lindsay, die er in mei 2007 over schreef. Zijn vergelijking: op de commandoregel van Unix koppel je sinds 1973 programma's met pipes, de uitvoer van het ene wordt de invoer van het andere. Op het web bestond dat niet; daar moest je zelf blijven kijken. "If you could avoid polling, you probably would", schreef hij. Twee jaar later toonde GitHub hoe het werkt: bij elke wijziging aan je code stuurt het een POST naar het adres dat jij opgeeft. Vandaag werken betaaldiensten, boekhoudpakketten, CRM's en automatiseringstools allemaal zo. Welke soort koppeling past bij jouw pakketten, met webhook of zonder, lees je op koppeling laten maken.
Een uur webshop: twaalf vragen of een bericht
Een uur in een webshop, tussen 14:00 en 15:00
Polling: elke 5 minuten vragen
12 vragen, 11 keer niets nieuw. De betaling van 14:23 zie je pas om 14:25.
Webhook: de betaaldienst meldt het zelf
1 bericht, op het moment dat het gebeurt.
Zo verloopt een webhook van Mollie
- 01De klant betaaltMet Bancontact, om 14:23.
- 02Mollie stuurt een POSTNaar jouw webhook-URL, met alleen het id van de betaling.
- 03Jouw server vraagt de status opVia de API van Mollie, met je eigen sleutel. Zo kan niemand een betaling vervalsen.
- 04Antwoord 200 OKBinnen 15 seconden. Anders probeert Mollie het opnieuw, tot 10 keer in ongeveer 26 uur.
Polling vraagt telkens of er iets veranderd is. Een webhook draait het om: de andere app laat het weten zodra het gebeurt.
Een fietsslot van 59 euro, seconde per seconde
Stel: een fietsenwinkel verkoopt online en laat klanten betalen via Mollie. Om 14:23 rekent een klant een fietsslot van 59 euro af met Bancontact.
- Binnen enkele seconden stuurt Mollie een POST naar de webhook-URL van de webshop. Er staat alleen het id van de betaling in, niet de status.
- De webshop vraagt de status zelf op via de API van Mollie, met zijn eigen sleutel. Wie een vals bericht naar het adres stuurt, kan zo geen bestelling op betaald zetten.
- De webshop antwoordt met 200 OK, binnen 15 seconden. Lukt dat niet, dan probeert Mollie opnieuw, tot 10 keer, de laatste poging ongeveer 26 uur later.
- De bestelling staat op betaald, de bevestigingsmail vertrekt en het magazijn ziet de order.
Zonder webhook vraagt de webshop zelf aan Mollie of er iets veranderd is. Elke vijf minuten, zoals in de figuur, zijn dat 288 vragen per dag en ziet hij de betaling tot vijf minuten te laat. Elke minuut zijn het er 1.440 per dag en ongeveer 43.200 per maand, voor misschien een paar honderd betalingen. GitHub zegt het in zijn documentatie: wie elke resource apart bevraagt, zit snel aan de grens van wat een API toelaat.
Mollie en Stripe doen het elk anders
| Aanbieder | Wat er in het bericht zit | Hoe je weet dat het echt is | Bij een fout aan jouw kant |
|---|---|---|---|
| Mollie | Alleen het id van de betaling | Je haalt de status zelf op via de API | 10 pogingen, laatste na ongeveer 26 uur |
| Stripe | Het hele event als JSON, bv. dat een betaling gelukt is | Handtekening in de header Stripe-Signature, HMAC met SHA-256 | Tot drie dagen opnieuw, met oplopende pauzes |
Lees daarom altijd de documentatie van de aanbieder voor je bouwt. Los van de aanbieder verschillen polling en een webhook op vijf punten:
| Vraag | Polling | Webhook |
|---|---|---|
| Wie begint | Jouw software vraagt | De andere dienst meldt |
| Snelheid | Zo traag als je interval | Bijna meteen |
| Belasting | Veel lege vragen | Een bericht per gebeurtenis |
| Als jouw server plat ligt | Je vraagt later opnieuw | De dienst probeert opnieuw, tot een grens |
| Kies het voor | Diensten zonder webhooks, of een export per nacht | Betalingen, formulieren, statuswijzigingen |
De rekening: per betaling, niet per bericht
Mollie rekent 0,39 euro per Bancontact-betaling en 1,80 procent plus 0,25 euro voor een Europese consumentenkaart; de webhook zelf is gratis. Op het slot van 59 euro betaal je dus 0,39 euro met Bancontact of 1,31 euro met een kaart. Het werk zit aan jouw kant: een adres dat de berichten over https ontvangt, met een geldig SSL-certificaat, ze controleert en verwerkt.
Kies een automatiseringstool als het bericht alleen iets in een ander pakket moet zetten, zoals een rij in een spreadsheet of een contact in je CRM. Welke tool welk plan vraagt, staat in Make, Zapier of n8n.
Kies een ontvangstadres in je eigen software als het bericht daar iets moet doen: een order aanmaken, een factuur via Peppol klaarzetten, een dossier bijwerken. Dat is een kleine, afgebakende klus naast facturatiesoftware op maat of een klantenportaal.
Heeft een SaaS geen webhooks en geen API, dan blijft soms alleen RPA over, een robot die klikt waar een mens klikte. Wil je een AI-assistent toegang geven tot je systemen, dan gebeurt dat steeds vaker via MCP.
Een ontvangstadres dat niets mist, waar je bouwer op let
- Het adres draait alleen over https, met een geldig certificaat.
- Elk bericht wordt gecontroleerd: een handtekening nagerekend, of de status zelf opgehaald bij de aanbieder.
- De server antwoordt meteen met 200 en doet het werk daarna in een wachtrij, zodat een trage stap geen time-out geeft.
- Dubbele berichten doen geen kwaad: het id van elk event wordt bewaard en een tweede keer niets opnieuw geboekt.
- De volgorde maakt niet uit: een betaling die binnenkomt voor de bestelling, wordt toch juist gekoppeld.
- Elk bericht wordt gelogd, zodat je achteraf ziet wat er binnenkwam en wat misliep.
- Een controle per nacht via de API vangt op wat tijdens een storing gemist werd.
Wat bouwers en zaakvoerders vaak vragen
Wat is een webhook-URL?
Het webadres in jouw software waar de andere dienst zijn berichten naartoe stuurt, bijvoorbeeld https://jouwshop.be/webhooks/mollie. Je vult het in bij de aanbieder. Behandel het als een deur: alleen over https, en controleer elk bericht dat binnenkomt.
Wat gebeurt er als mijn server offline is?
De meeste aanbieders proberen opnieuw. Mollie doet dat tot 10 keer in ongeveer 26 uur, Stripe tot drie dagen. Ligt je server langer plat, dan mis je berichten; een controle per nacht via de API vangt die op.
Kan iemand een vals bericht sturen?
Iedereen die het adres kent, kan er iets naartoe sturen. Daarom reken je de handtekening na als de aanbieder er een meestuurt, of haal je de status zelf op zoals Mollie vraagt. Vertrouw nooit blind op de inhoud van het bericht.
Heb ik een programmeur nodig?
Niet als het bericht alleen een rij in een spreadsheet of een contact in je CRM moet worden: dat doet een automatiseringstool. Moet het in je eigen software iets boeken, dan wel.
