Shopware en Exact Online
Shopware Exact Online koppeling
Shopware-orders landen als verkooporder of factuur in Exact Online, met kortingen uit de Rule Builder verdeeld over de juiste btw-tarieven. Staffelprijzen en prijsafspraken uit Exact worden advanced prices in Shopware, en voorraad en leveringen gaan terug naar de shop. Gebouwd op jouw administratie en jouw Shopware 6, en daarna door ons gedraaid en bewaakt.
Wat je tussen Shopware en Exact Online koppelt
Exact Online is bij deze combinatie de bron voor artikelen, prijsafspraken en voorraad. Shopware is de bron voor de order en voor alles wat de klant in de checkout heeft gekregen: kortingen uit de Rule Builder, verzendkosten en het gekozen btw-regime. De koppeling leest Shopware via de Admin API, nooit via de Store API die voor de winkel zelf is bedoeld. Daardoor werkt hij ook met een headless frontend.
| Stroom | Richting | Shopware 6 | Exact Online |
|---|---|---|---|
| Artikelen | naar Shopware | POST /api/_action/sync |
sync/Logistics/Items |
| Staffels en prijsafspraken | naar Shopware | product.prices |
sync/Logistics/SalesItemPrices |
| Voorraad | naar Shopware | product.stock |
sync/Inventory/StockPositions |
| Orders | naar Exact | POST /api/search/order |
salesorder/SalesOrders of SalesInvoices |
| Klanten | naar Exact | customer, order_address |
crm/Accounts, crm/Addresses |
| Leveringen en trackingnummer | naar Shopware | order_delivery |
salesorder/GoodsDeliveries |
Verkooporders, leveringen en voorraadposities bestaan in de API alleen voor Exact Online Handel en Productie. Met Boekhouden landt een Shopware-order als verkoopfactuur of verkoopboeking en gaat er geen voorraad terug. De keuze per pakket staat op Exact Online koppeling.
Welk systeem is leidend, per gegeven
| Gegeven | Leidend | Richting | Gedrag |
|---|---|---|---|
| Artikelcode, omschrijving | Exact | naar Shopware | alleen wijzigingen, op Timestamp |
| Hoofdproduct, eigenschappen, afbeeldingen | Shopware | blijft in Shopware | de koppeling schrijft er niet overheen |
| Verkoopprijs en staffels | Exact, SalesItemPrices |
naar Shopware | als advanced prices onder een regel |
| Promoties en kortingscodes | Shopware, Rule Builder | in de order naar Exact | verdeeld over de regels per btw-tarief |
| Voorraad | Exact, FreeStock |
naar Shopware | elke 10 minuten via de sync-endpoint |
| Order en betaalstatus | Shopware tot de import, daarna Exact | naar Exact | één keer, orderNumber in YourRef |
| Debiteur | Exact | zoeken op e-mail en btw-nummer | nieuwe debiteur alleen als beide niets vinden |
| Levering | Exact | naar Shopware | trackingnummer op de order_delivery |
Twee kanten bepalen samen de prijs die de klant ziet: Exact levert de staffel, Shopware past de promotie toe. De order in Exact moet allebei bevatten, anders klopt de omzet per artikel niet met wat er is betaald.
Wat Shopware en Exact Online anders bewaren
Kortingen uit de Rule Builder
In Shopware is een promotie een eigen regel in de order. Hij heeft het type promotion, een negatieve prijs en een payload met onder meer code, discountType (absoluut of percentage) en value. Exact Online kent zo'n regel niet. Een orderregel in SalesOrderLines heeft een veld Discount, maar dat is een fractie ten opzichte van de standaardprijs van het artikel in Exact, niet ten opzichte van de prijs die Shopware rekende.
Shopware verdeelt de btw over een korting naar rato van de grondslag per tarief. De koppeling doet hetzelfde met het bedrag, zodat Exact op dezelfde btw uitkomt. Een voorbeeld met kortingscode HERFST15 van € 15,00:
| Regel | Bruto voor korting | Aandeel | Korting | Bruto na korting |
|---|---|---|---|---|
| 2 x artikel 10482, 21% | 120,00 | 120 / 180 | 10,00 | 110,00 |
| 1 x artikel 20117, 9% | 60,00 | 60 / 180 | 5,00 | 55,00 |
| Totaal | 180,00 | 15,00 | 165,00 |
In de korting van € 10,00 zit 1,74 btw tegen 21%, in die van € 5,00 zit 0,41 tegen 9%. Zet je de hele € 15,00 als één regel op het hoge tarief, dan staat er 2,60 btw in Exact en betaalde de klant 2,15. De code gaat naar Remarks van de verkooporder, zodat terug te vinden is welke actie de omzet verlaagde. Meer over het verdelen van bedragen in bedragen en btw mappen.
Staffelprijzen en prijsafspraken
Exact bewaart een staffel als een regel in SalesItemPrices met Quantity, de minimale hoeveelheid. Shopware bewaart een staffel als advanced price met quantityStart, quantityEnd en een verplicht ruleId. Elke prijs hangt dus aan een regel uit de Rule Builder.
De koppeling rekent het eindaantal uit: de staffel vanaf 10 eindigt bij 49 omdat de volgende bij 50 begint. Heeft een regel in Exact een Account, dan is het een prijsafspraak voor één debiteur. Daarvoor maakt de koppeling in Shopware een regel met een conditie op het klantnummer. StartDate en EndDate uit Exact worden condities op datum in dezelfde regel. Meer over de opbouw in staffelprijzen en klantspecifieke prijzen.
Bruto en netto
Shopware bewaart elke prijs met gross, net en linked, en een order heeft een taxStatus van gross, net of tax-free. Een consumentenwinkel rekent meestal bruto. Exact heeft per btw-code een Type: E voor exclusief en I voor inclusief. Met een exclusieve code rekent Exact de btw opnieuw uit over een afgerond bedrag:
Shopware: 3 x 9,95 bruto = 29,85
Exact, E: 9,95 / 1,21 = 8,2231, afgerond 8,22
3 x 8,22 = 24,66 + 21% btw 5,18 = 29,84
De koppeling stuurt bruto-orders daarom met een btw-code van het type I en netto-orders van zakelijke klanten met een code van het type E. Welke codes dat in jouw administratie zijn, leest hij bij de bouw uit vat/VATCodes.
Klanten en adressen
Een Shopware-klant heeft accountType (zakelijk of particulier), company en vatIds als lijst. Exact heeft één VATNumber op de debiteur. Het adres staat in Shopware als street met huisnummer, plus additionalAddressLine1 en 2. Het land is een countryId, een UUID uit jouw installatie, en geen landcode. De koppeling zoekt per order de ISO-code op die bij die UUID hoort en vult AddressLine1 tot AddressLine3 en Country in Exact. Een gastbestelling (guest true) gaat naar een eigen debiteur of naar een verzameldebiteur.
De technische werkelijkheid van deze combinatie
| Onderwerp | Shopware 6 Admin API | Exact Online |
|---|---|---|
| Limiet op verzoeken | geen algemene limiet, wel op login en OAuth | 60 per minuut, 5.000 per dag |
| Schrijven in bulk | Sync API, upsert van veel records per verzoek | één record per verzoek |
| Lezen in bulk | zoekendpoints met criteria | sync-endpoints, 1.000 per pagina |
| Toegang | client_credentials met Access key ID en secret |
OAuth 2.0, token 600 seconden |
| Wijziging melden | webhook via een app, 3 nieuwe pogingen in ongeveer 7 seconden | webhook, 10 nieuwe pogingen over 34 uur |
De Exact-getallen staan in de documentatie van Exact over API-limieten, de Shopware-limieten in de rate limiter-documentatie van Shopware. Nagelezen op 3 oktober 2026.
De dag, doorgerekend. Een groothandel met 8.000 artikelen en gemiddeld 3 prijsregels per artikel heeft 24.000 regels in SalesItemPrices. De eerste volledige ronde uit Exact is 24.000 / 1.000 = 24 verzoeken. Naar Shopware gaan ze in porties van 500 producten: 8.000 / 500 = 16 verzoeken naar de Sync API. Daarna gaat elk uur alleen wat gewijzigd is. Per dag kost dat aan de Exact-kant:
| Stroom | Rekensom | Verzoeken |
|---|---|---|
| Voorraad, elke 10 minuten | 6 x 24 | 144 |
| Artikelen en prijzen, elk uur | 2 x 24 | 48 |
| 350 orders | 350 x 3 | 1.050 |
| Totaal | 144 + 48 + 1.050 | 1.242 |
De 3 verzoeken per order zijn: debiteur zoeken, order aanmaken en de levering ophalen. Er blijft 5.000 - 1.242 = 3.758 over. De grens ligt bij de minuutlimiet van 60: na een onderbreking van twee uur staan er misschien 60 orders klaar, en dat zijn 180 verzoeken, dus minstens 3 minuten.
Shopware-webhooks zijn een signaal, geen garantie. Shopware probeert een webhook 3 keer opnieuw in ongeveer 7 seconden, garandeert geen volgorde en zet de webhook uit na 10 fouten. De koppeling gebruikt het event checkout.order.placed om snel te starten en zoekt daarnaast elke 5 minuten op orders die sinds de vorige ronde zijn aangemaakt. Zo komt een order die tijdens een herstart van de koppeling binnenkwam alsnog in Exact. Zie wat is een webhook.
Wat een standaardkoppeling hier niet doet
Standaardkoppelingen en koppelplatformen voor Exact Online documenteren hun eigen grenzen. Bij Shopware komen deze het vaakst terug:
- Staffel of verkoopprijs, één keer gekozen. Bij de installatie kies je of de verkoopprijs of de staffel naar de shop gaat, en dat geldt voor alle artikelen.
- Prijslijsten alleen per artikel, niet op een artikelgroep, en een debiteurenkorting gaat niet mee.
- Eén magazijn per koppeling, vast ingesteld bij de installatie. Voorraad uit een tweede magazijn telt niet mee.
- Eén richting. Orders gaan naar Exact, maar voorraad en leveringen komen niet terug.
Een gebouwde koppeling leest de promotieregels uit jouw Shopware, de btw-codes uit jouw administratie en de prijsafspraken per debiteur. Het hoofdproduct en de eigenschappen blijven in Shopware, waar ze horen. De platformkant staat op Shopware koppeling.
Als het misgaat
| Wat er misgaat | Wat de koppeling doet | Wat je ziet |
|---|---|---|
| 429 van Exact | order blijft in de wachtrij tot het venster verder is | niets, tenzij het aanhoudt |
Orderregel met een productNumber dat in Exact niet bestaat |
die order wordt vastgehouden, andere gaan door | de order en het nummer |
| Promotie op een tarief zonder btw-code in de tabel | order naar de controlelijst | de order, het tarief en de code |
| Sync API weigert een product in de portie | de rest van de portie wordt opnieuw aangeboden | het product en de melding van Shopware |
| Shopware-webhook uitgeschakeld na 10 fouten | de controleronde haalt orders op datum op | een regel in het logboek |
| Refresh token van Exact verlopen | alle stromen naar Exact pauzeren | een verzoek om opnieuw in te loggen |
Exact staat per endpoint 10 fouten per uur toe en blokkeert de sleutel daarboven. Een order met een onbekend artikel die elke ronde opnieuw wordt verstuurd, legt zo ook de goede orders stil. De koppeling controleert daarom vooraf of elke regel een artikel en een btw-code heeft. Een order die blijft falen bewaart hij met de oorspronkelijke inhoud en biedt hij opnieuw aan zodra de oorzaak is opgelost. Voor livegang draait de koppeling als dry run: je ziet per order welke regels, kortingen en btw-codes er in Exact zouden komen.
Wij hosten en bewaken de koppeling en passen hem aan als Shopware of Exact een interface wijzigt. Alle stromen staan op koppelingen. Verwante combinaties: Magento Exact Online koppeling, WooCommerce Exact Online koppeling en Lightspeed Exact Online koppeling. Vertel welke Shopware-versie en welk Exact-pakket je hebt.
Veelgestelde vragen
Heb ik Exact Online Handel nodig voor een Shopware koppeling?
Voor orders als verkoopfactuur of verkoopboeking is Boekhouden genoeg. Verkooporders, leveringen en voorraadposities staan in de API-documentatie van Exact alleen bij Handel en Productie. Wil je voorraad uit Exact in Shopware en track-and-trace terug, dan heb je Handel of Productie nodig. Zie Exact Online Boekhouden of Handel.
Hoe komt een kortingscode uit Shopware in Exact?
Shopware zet een promotie als eigen orderregel van het type promotion in de order, met de code en het kortingstype in de payload. Exact Online heeft daar geen regelsoort voor. De koppeling verdeelt het kortingsbedrag over de productregels naar rato van de btw-grondslag, zoals Shopware dat zelf ook doet, en zet de code in de opmerkingen van de order. Zo blijft de btw per tarief gelijk aan wat de klant betaalde.
Kunnen klantprijzen uit Exact naar Shopware?
Ja. Een prijsafspraak in Exact is een regel in SalesItemPrices met een Account. In Shopware wordt dat een advanced price onder een regel met een conditie op het klantnummer. Gebruik je de Commercial-plugin van Shopware, dan kan het ook via klantspecifieke prijzen op /api/_action/custom-price. Shopware documenteert dat het filteren op prijs in de productlijst die prijzen niet meeneemt.
Werkt de koppeling met Shopware 6.6 en 6.7?
Ja. De Admin API, de Sync API en de velden die de koppeling gebruikt bestaan in beide lijnen. Op 1 oktober 2026 verschenen 6.7.15.0 en 6.6.10.28. Bij een update draait de koppeling eerst als dry run tegen de nieuwe versie voordat hij weer schrijft.
Waarom wijkt een order in Exact één cent af van Shopware?
Omdat Shopware voor consumenten met brutoprijzen rekent en een btw-code van het type E in Exact de btw opnieuw berekent over een afgerond bedrag exclusief. Drie stuks van 9,95 is in Shopware 29,85, en via 8,22 exclusief per stuk in Exact 29,84. De koppeling gebruikt voor bruto-orders een btw-code van het type I, zodat het brutobedrag het uitgangspunt blijft.
Worden varianten uit Shopware artikelen in Exact?
Elke variant wel, het hoofdproduct niet. In Shopware is een variant een kindproduct met een eigen productNumber, en dat nummer is de artikelcode in Exact. Exact heeft geen hoofdartikel met varianten. De koppeling groepeert de artikelen in Shopware op een afgesproken kenmerk, bijvoorbeeld een deel van de artikelcode. Zie varianten koppelen.
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