Kennisbank
Hoe een koppeling werkt
Hoe gegevens tussen je webshop en backoffice worden verwerkt: toegang, controles, wachtrijen en goedkeuring, met voorbeelden en diagrammen.
Bijgewerkt op
Welke gegevens tussen je systemen bewegen
Tussen een webshop en de systemen erachter lopen vijf stromen. Vier daarvan verplaatsen gegevens: productdata, voorraad, prijzen en orders. De vijfde, OCI en PunchOut, is een sessie: de inkoper van je klant komt vanuit zijn eigen inkoopsysteem je webshop binnen en neemt zijn winkelmand mee terug.
Bij elke stroom begint het werk met dezelfde drie vragen. Uit welk systeem komt het gegeven? Wanneer moet het in het andere systeem staan? En welk systeem is leidend als de twee iets anders zeggen?
| Stroom | Richting | Wat er over de lijn gaat | Meestal leidend |
|---|---|---|---|
| 1. Productdata | naar de webshop | artikelnummer, EAN, omschrijving, attributen, afbeeldingen, varianten | PIM of ERP |
| 2. Voorraad en beschikbaarheid | naar de webshop | vrije voorraad per locatie, levertijd, verwachte leverdatum | WMS, ERP of leverancier |
| 3. Prijzen en klantafspraken | naar de webshop | basisprijs, prijslijst, staffel, klantprijs, assortiment per klant | ERP |
| 4. Orders, klanten en verzending | uit de webshop, status terug | orderregels, debiteur, afleveradres, betaalstatus, track-and-trace | webshop voor de order, ERP voor de debiteur |
| 5. OCI en PunchOut | sessie heen, winkelmand terug | inlog vanuit het inkoopsysteem, artikelregels in NEW_ITEM-velden |
inkoopsysteem van je klant |
Eén eigenaar per gegeven
Onder alle vijf ligt dezelfde regel: elk gegeven heeft precies één systeem dat erover beslist. Dat leg je vast per veld, niet per systeem. De voorraad komt uit het WMS, de prijs uit het ERP en de productomschrijving uit het PIM, ook als alle drie de systemen een veld voor voorraad, prijs en omschrijving hebben.
Zonder die afspraak overschrijven systemen elkaar. Het ERP heeft voor artikel 10482 een verkoopprijs van € 12,50. Iemand zet de prijs in de webshop voor een actie op € 9,95. De prijsronde van die nacht zet er weer € 12,50 neer, en de actie die morgen in de nieuwsbrief staat klopt niet meer.
Met een eigenaar per veld staat de uitkomst vooraf vast. Het ERP is leidend voor de prijs, en artikel 10482 staat tot het einde van de actie op de lijst met uitzonderingen die de koppeling overslaat.
Waar de koppeling draait
Een koppeling van ons draait op onze servers, tussen je systemen. Je webshop, je ERP en je WMS blijven zoals ze zijn. De koppeling praat met elk systeem langs de weg die dat systeem aanbiedt: een API, een webhook, een bestand op SFTP. Elk systeem krijgt zijn eigen toegang, die je in dat systeem kunt intrekken.
| Systeem | Toegang | Waar je op let |
|---|---|---|
| Shopify | app met de rechten die nodig zijn, zoals read_orders en write_inventory |
sinds 1 januari 2026 maak je zo'n app in het Dev Dashboard |
| WooCommerce | REST API-sleutel en geheim | het geheim zie je één keer; zonder "mooie" permalinks werkt de API niet |
| Exact Online | OAuth, één keer toestemming | toegangstoken geldig 600 seconden, vernieuwingstoken 30 dagen |
| Picqer | API-sleutel | één sleutel per koppeling, los in te trekken |
| AFAS Profit | app connector | klassieke tokens stoppen na 31 augustus 2027; nieuwe koppelingen gebruiken OAuth |
De koppeling is gebouwd op jouw systemen en jouw regels: welk systeem leidend is voor welk gegeven, welke voorraad meetelt, welke klant welke prijs krijgt. Die regels zitten in de koppeling en niet in een instellingenscherm met vaste keuzes. Waar standaardkoppelingen technisch ophouden staat op maatwerk koppeling laten maken.
Per stroom: per wijziging of in rondes
Niet elke stroom hoeft even snel. Een order hoort binnen een minuut in het ERP, een prijslijst die eens per week verandert niet. Per stroom ligt vast wat hem start:
| Stroom | Start | Waarom |
|---|---|---|
| Orders | webhook per order | elke minuut vertraging is een minuut waarin voorraad niet gereserveerd is |
| Voorraad | webhook per wijziging, of een ronde elke 5 minuten | het ERP of WMS stuurt niet altijd een melding |
| Verzending en track-en-trace | webhook of een ronde elke 15 minuten | de klant krijgt de mail van de webshop |
| Artikelen en prijzen | ronde met alleen de wijzigingen, elk uur of 's nachts | grote aantallen, weinig haast |
Elke ronde kost verzoeken, en een API heeft een limiet. Een rekenvoorbeeld met Exact Online, dat 60 verzoeken per minuut en 5.000 per dag toestaat. 400 orders per dag à 3 verzoeken is 1.200. Een voorraadronde elke 5 minuten met 1 verzoek is 288 per dag. Een prijsronde elk uur is 24. Samen 1.512, en er blijven er 3.488 over voor herhaalde pogingen en een volledige inlees na een storing. Diezelfde voorraad per artikel opvragen zou bij 8.000 artikelen elke ronde 8.000 verzoeken kosten, meer dan het hele dagbudget. De som voor je eigen aantallen maak je met doorvoer berekenen; de afweging staat in realtime of batch.
Als een systeem niet antwoordt
Systemen zijn soms traag, in onderhoud of over hun limiet. Een koppeling die dan een bericht laat vallen, verliest een order. Daarom gaat alles via een wachtrij.
De koppeling neemt een webhook direct aan en verwerkt hem daarna. Dat is nodig, want de afzender wacht niet lang: Shopify geeft 5 seconden, Picqer 10. Wie te laat antwoordt, krijgt het bericht opnieuw. Bij herhaald falen zet de afzender de webhook uit: WooCommerce na 5 mislukte meldingen op rij, Picqer na 5 volledig mislukte meldingen binnen 24 uur.
Weigert het ERP een verzoek, dan volgt een nieuwe poging met een pauze die steeds langer wordt, bijvoorbeeld na 1, 2, 4 en 8 minuten. Elke poging draagt dezelfde sleutel, het ordernummer uit de webshop, zodat order 20418 één keer in het ERP komt, ook na drie pogingen. Wat na de laatste poging niet is aangekomen, gaat naar een lijst met mislukte berichten, met de oorspronkelijke inhoud en de foutmelding. Er verdwijnt niets zonder dat het ergens staat. Hoe wij een afwijking zien voordat je klant hem ziet, staat bij monitoring.
Wat je ziet in je login
Bij de koppeling hoort een dashboard met een eigen login. Per run staat er wat er is gelezen, wat er is gewijzigd en wat niet is gelukt:
run 03-10-2026 10:15 orders Shopify naar Exact Online
gelezen 37 aangemaakt 35 overgeslagen 1 mislukt 1
20418 SalesOrder 7731 aangemaakt
20419 overgeslagen staat op de uitsluitingslijst: proefzending
20420 mislukt debiteur niet gevonden, btw-nummer NL001234567B01
Vier dingen houden de koppeling in jouw hand. Een dry run rekent alles door en schrijft niets: je ziet per order en per artikel wat er zou gebeuren. Goedkeuring laat een stroom wachten op jouw akkoord, of een run die meer dan een ingesteld percentage wijzigt. Uitsluitingen laten artikelen of klanten met een handmatige afspraak met rust. Overrides zetten een eigen waarde vast, zoals een levertijd. Na elke run staat per wijziging van welke waarde naar welke, en waardoor. De onderdelen staan bij dry run en goedkeuring en audit trail.
Als een bron verandert
Een koppeling die vandaag werkt, heeft over een jaar onderhoud nodig. De systemen eromheen veranderen, op aangekondigde data:
| Systeem | Wat er verandert | Wanneer |
|---|---|---|
| Shopify | elke drie maanden een nieuwe API-versie, elke versie minstens 12 maanden ondersteund | doorlopend |
| AFAS Profit | klassieke tokens verlopen; OAuth is de standaard | 15 februari of 1 mei 2027 volgens AFAS' twee documentatiesites, stop na 31 augustus 2027 |
| Picqer | ontvangsten v1 wordt uitgefaseerd, v2 is de opvolger | in 2026 |
| Sendcloud | API v2 in onderhoudsmodus, nieuw werk op v3 | sinds april 2026 |
| Odoo | XML-RPC verdwijnt; sinds Odoo 19 meldt een koppeling zich aan met een API-sleutel, die voor een gewone gebruiker na hoogstens 90 dagen verloopt | Odoo 22 |
Daarnaast veranderen leveranciers hun bestanden zonder aankondiging: een kolom heet stock in plaats van voorraad, een tabblad schuift op. Een run die zo'n verandering tegenkomt, stopt en meldt welk veld ontbreekt. Wij passen de koppeling aan, op de nieuwe versie of het nieuwe bestand, voordat de oude stopt.
De bouw heeft een vaste prijs, afgesproken voordat het werk begint. Het hosten, draaien, bewaken en het dashboard vallen onder een vast bedrag per maand. Welke systemen we koppelen staat op koppelingen. Vertel welke systemen je hebt en waar het vastloopt.
Gegevensuitwisseling bij verkoop aan bedrijven
Van alle software koppelingen rond een webshop komen deze vijf het vaakst voor:
- Webshop en ERP. Orders gaan het ERP in. Voorraad, prijzen en verzendstatus komen terug.
- ERP en boekhouding. Facturen, betalingen en grootboekregels lopen door, met per verkoopkanaal een eigen grootboekrekening en dagboek.
- CRM en ERP. De verkoper ziet in het CRM wat een klant heeft afgenomen en welke facturen openstaan.
- WMS en vervoerder. De zending wordt aangemeld, het label komt terug en de track-and-tracecode gaat naar de klant.
- PIM en verkoopkanalen. Een nieuw artikel of een gewijzigde omschrijving gaat in één keer naar de webshop en de marktplaatsen.
De rekensom achter de eerste: vijftig orders per dag die elk drie minuten overtypen kosten, zijn 150 minuten. Dat is tweeënhalf uur per dag, en elke overgetypte order is een kans op een fout in een adres of een aantal.
Voor een webshop lopen de gegevens in drie richtingen:
| Richting | Gegevens | Wat er misgaat zonder regel |
|---|---|---|
| Van de webshop naar binnen | orders, klantgegevens, retouraanmeldingen | een klant die al in het ERP staat wordt als tweede debiteur aangemaakt |
| Van binnen naar de webshop | voorraadstanden, prijzen, verzendstatussen | een artikel dat vandaag niet in het bestand staat gaat op nul en verdwijnt uit de verkoop |
| Naar buiten | zendingen naar de vervoerder, boekingen naar de boekhouding | een bedrijfsnaam wordt op het label afgekapt op 35 tekens |
De B2B-laag erbovenop
Verkoop je zakelijk, dan komen er drie dingen bij: prijsafspraken per klant, staffels en bestellen op rekening. Hier houden standaardkoppelingen en koppelplatformen meestal op: ze zetten prijzen door op het niveau van een klantgroep, niet per klant.
De omvang bepaalt de aanpak. Vijftig klanten met een eigen prijs houd je met de hand bij. Vijfhonderd klanten op een assortiment van 2.000 artikelen zijn 1.000.000 mogelijke combinaties van klant en artikel. Die zet je niet een voor een over. De koppeling neemt de regels over waaruit het ERP de prijs opbouwt: prijslijst, klantkorting en staffel. Hoe dat per onderdeel werkt staat bij klantspecifieke prijzen, staffelprijzen en bestellen op rekening.
Veldmapping, wachtrijen, toegang en bewaking
Gegevens van A naar B brengen is het kleinste deel. Wat een koppeling betrouwbaar maakt, staat eromheen:
| Onderdeel | Wat het doet | Voorbeeld |
|---|---|---|
| Vertaling | zet waarden om naar wat het andere systeem verwacht | 19,95 wordt 1995; Dorpsstraat 12 A wordt straat, huisnummer en toevoeging |
| Richting en frequentie | legt per stroom vast wat wanneer waarheen gaat | voorraad bij elke wijziging, grootboekregels één keer per nacht |
| Sleutels en rechten | houdt toegangssleutels buiten de code en beperkt de rechten | lezen op artikelen, schrijven op orders, geen beheerdersaccount |
| Wachtrij | houdt berichten vast als een systeem traag of onbereikbaar is | een order wacht 42 minuten en komt daarna alsnog aan |
| Overzicht | laat per run zien wat is doorgezet en wat is blijven staan | 1.240 regels verwerkt, 3 afgekeurd, met de reden per regel |
| Meldingen | waarschuwt als een run mislukt of de wachtrij groeit | een controle om de vijf minuten |
Als een systeem onbereikbaar is
Het ERP is van 14:00 tot 14:40 onbereikbaar door een update. Order 10482 komt om 14:00 binnen. De koppeling probeert het direct, dan na 30 seconden, na 2 minuten en na 8 minuten: elke pauze is vier keer zo lang als de vorige. De vijfde poging, 32 minuten later om 14:42:30, lukt. De order heeft 42 minuten en 30 seconden in de wachtrij gestaan en staat één keer in het ERP.
Elke poging stuurt dezelfde sleutel voor de order mee, zodat een herhaling geen tweede order aanmaakt. Een bericht dat na de laatste poging nog niet is aangekomen, gaat met de oorspronkelijke inhoud naar een foutenlijst en wordt na herstel opnieuw verwerkt. Er verdwijnt niets ongemerkt. De kant van de binnenkomende berichten staat in wat is een webhook; het hele verloop van een storing in wat gebeurt er als een koppeling uitvalt.
Rechten en sleutels
Een koppeling krijgt alleen de rechten die hij gebruikt. Leest hij artikelen en schrijft hij orders, dan heeft hij geen toegang tot de salarisadministratie nodig. Een koppeling onder een beheerdersaccount is bij de bouw sneller en komt daardoor veel voor. Elk lek in zo'n koppeling is dan een lek in het hele pakket.
Verbindingen lopen over TLS. Sleutels horen in een kluis voor geheimen en niet in code, in een configuratiebestand of in een spreadsheet, zodat een sleutel vervangen kan worden zonder de koppeling opnieuw te bouwen.
Jij houdt de controle
Een nieuwe koppeling draait eerst droog. Een dry run verwerkt de echte gegevens zonder iets naar de webshop of het ERP te schrijven en laat zien wat er zou veranderen. Daarna bepaal je per stroom of wijzigingen op goedkeuring wachten of direct doorgaan. Artikelen met een handmatige afspraak, zoals een vaste actieprijs, zet je op een uitsluitingslijst. Een eigen levertijd leg je vast met een override.
Na elke run staat er een overzicht van wat er is gewijzigd, per artikel en per veld: artikel 10482, voorraad, van 14 naar 8. Belt een klant over een verkeerde levertijd, dan zie je terug wanneer die waarde binnenkwam en uit welke bron. De onderdelen hebben elk een eigen pagina: dry run en goedkeuring, monitoring en audit trail.
Wij bouwen de koppeling voor een vaste prijs op jouw systemen en jouw regels. Daarna hosten, draaien en bewaken we hem voor een vast bedrag per maand, en passen we hem aan als een bron verandert. Je krijgt een dashboard met logs en een eigen login. Meer over die opzet staat op maatwerk koppeling laten maken.
Veelgestelde vragen
Moet ik iets installeren in mijn webshop of ERP?
Meestal alleen toegang. In Shopify is dat een app in het Dev Dashboard, met de rechten die de koppeling nodig heeft. In WooCommerce een REST API-sleutel, aangemaakt onder WooCommerce, Instellingen, Geavanceerd, REST API. In Exact Online geef je één keer toestemming via OAuth, zodat je wachtwoord nooit bij de koppeling komt. Een plugin of extensie komt er alleen bij als een systeem een gegeven niet via zijn API vrijgeeft.
Wat als de koppeling zelf een uur uitvalt?
Je webshop blijft verkopen. Shopify probeert een webhook die niet aankomt 8 keer opnieuw in 4 uur, en na herstel vraagt de koppeling alles op wat sinds de laatste geslaagde run is gewijzigd. Orders komen dan alsnog in het ERP, één keer per order. Wat er met de berichten gebeurt staat in wat gebeurt er als een koppeling uitvalt.
Kan een bestaande koppeling worden vervangen zonder dat er iets stilvalt?
Ja. De nieuwe koppeling draait eerst mee in een dry run naast de oude, zodat de verschillen per order en per artikel zichtbaar worden. Daarna gaat het om per stroom: eerst de voorraad, dan de orders. De volgorde en het terugdraaien staan in een bestaande koppeling vervangen.
Wat gebeurt er nadat ik het formulier heb ingevuld?
Je krijgt een persoonlijke e-mail terug, geen automatisch antwoord. Daarin vragen we wat er nog nodig is om je systemen en stromen te begrijpen, zoals de namen van je systemen, de aantallen artikelen en orders, en de regel waar het nu op vastloopt.
Wie past de koppeling aan als Shopify of mijn ERP iets verandert?
Wij. Een nieuwe API-versie, een kolom die een leverancier hernoemt of een uitgefaseerde aanmeldmethode zijn het werk van degene die de koppeling draait. Zo'n wijziging zien we in de monitoring of staat in de aankondiging van de leverancier, en wordt aangepast voordat de oude versie stopt.
Hoeveel systemen kunnen jullie aan elkaar koppelen?
Het aantal is geen grens. Vanaf drie of vier systemen lopen de stromen via één laag in het midden in plaats van rechtstreeks tussen elk paar: vier systemen hebben zes mogelijke paren, zes systemen vijftien. Elke koppeling draait als eigen onderdeel met eigen logs, zodat een storing bij één leverancier de andere stromen laat doorlopen. Wat bij meer systemen het zwaarst weegt, is de lijst met welk systeem per veld leidend is.
Kunnen jullie koppelen met software zonder API?
Ja. Zonder API zijn er drie andere routes: een databaseview of alleen-lezen kopie, een geplande export als CSV of XML via SFTP, en als laatste een gescripte browserroute die inlogt op het portaal. Zo werkt ook de koppeling met leveranciersbestanden. Vraag de leverancier van het pakket ook om een export of een endpoint: een concrete vraag van een klant levert er vaak een op.
Moeten we een van onze systemen vervangen om te kunnen koppelen?
Nee. De koppeling sluit aan op het ERP, het PIM, het WMS en het webshopplatform die je nu gebruikt. Wat wel vooraf vaststaat is welk systeem per gegeven leidend is, bijvoorbeeld voorraad uit het WMS en prijzen uit het ERP. Die afspraak verandert niets aan de systemen zelf.
Blijft de koppeling werken na een update van onze software?
Leveranciers passen hun API aan en melden dat in een changelog of een nieuwsbrief. Wij volgen die aankondigingen en passen de koppeling aan als een bron verandert; dat hoort bij het maandelijkse beheer. Verandert er onverwacht iets, bijvoorbeeld een kolomnaam in een export, dan draait de run niet half door: hij stopt en meldt welk veld ontbreekt.
Wat gebeurt er als een van de systemen even niet bereikbaar is?
Het bericht blijft in de wachtrij staan. De koppeling probeert het opnieuw met pauzes die steeds langer worden, eerst seconden en daarna minuten. Lukt het na het laatste aantal pogingen nog niet, dan gaat het bericht met de oorspronkelijke inhoud naar een foutenlijst en wordt het na herstel opnieuw verwerkt. Er verdwijnt niets ongemerkt.
Is mijn voorraad dan live?
Dat wordt per stroom bepaald, en de vraag is wie er op het antwoord staat te wachten. De voorraad op de productpagina en een betaling die een order vrijgeeft gaan bij elke wijziging of binnen enkele minuten door. Grootboekregels en prijslijsten gaan in een nachtelijke ronde. De grens ligt bij de limiet van het bronsysteem: 60 verzoeken per minuut laat geen volledige ronde van 15.000 artikelen per kwartier toe.
Wat is het verschil tussen een standaardkoppeling, een koppelplatform en maatwerk?
Een standaardkoppeling zet een vaste set velden in een vaste richting over tussen twee pakketten. Op een koppelplatform stel je de stromen zelf in binnen de mogelijkheden van het platform. Maatwerk wordt gebouwd op jouw velden en jouw regels, zoals prijzen per klant in plaats van per klantgroep, of een leverdatum uit het bestand van een leverancier.
Vertel wat je nodig hebt
Vertel welke systemen je gebruikt en wat je wilt verbeteren. Je krijgt binnen één werkdag een persoonlijk antwoord. We helpen je de werkzaamheden helder te krijgen en spreken de prijs en planning af voordat je iets toezegt.
- Je weet de prijs en de doorlooptijd voordat je iets toezegt
- Wij zoeken uit welke koppeling het werk uit handen neemt
- Wij verzorgen de bouw, hosting, bewaking en het onderhoud
- Je team krijgt minder overtypwerk en minder uitzoekwerk