Naar de inhoud
SyncMyShop

Platformen

Shopware 6 koppeling met ERP, PIM, magazijn en leveranciers

Een Shopware koppeling haalt orders uit je shop en schrijft producten, varianten, prijzen en voorraad terug via de Admin API. Shopware zet geen limiet op die API, maar wel op het aanvragen van tokens. Een webhook krijgt 3 nieuwe pogingen in ongeveer 7 seconden, dus de koppeling haalt orders ook zelf op.

Wat is Shopware en wie gebruikt het?

Shopware is een Duits webshopplatform. Deze pagina gaat over Shopware 6. Er is een gratis Community Edition en er zijn betaalde abonnementen, met extra functies in de Commercial-plugin. Shopware draait op je eigen server of bij je hostingpartij, en kan headless draaien: een eigen frontend op de Store API, de standaard administratie erachter.

Shopware brengt snel nieuwe versies uit. Op 1 oktober 2026 verschenen 6.7.15.0 en 6.6.10.28 op dezelfde dag; de 6.6-lijn krijgt nog patches. Voor een koppeling telt vooral dat de Admin API in beide lijnen dezelfde opbouw heeft.

Onderdeel In de basis Met de Commercial-plugin
Voorraad één stock per product Multi-Inventory: per magazijn en magazijngroep (Beyond)
Prijs per klantgroep of staffel geavanceerde prijzen met een regel idem
Prijs per klant niet als eigen veld /api/_action/custom-price
B2B klantgroepen B2B Components: medewerkers, offertes, goedkeuring

Wat je met Shopware koppelt

Shopware is leidend voor orders en webklanten. Producten, prijzen en voorraad komen uit het ERP, het PIM of het magazijn.

Stroom Richting In Shopware
Producten en varianten naar Shopware product via /api/_action/sync
Voorraad naar Shopware product.stock
Prijzen en staffels naar Shopware price en geavanceerde prijzen met een regel
Orders en klanten naar het ERP POST /api/search/order met een filter
Status en verzending naar Shopware statusovergang op order, betaling of levering

Een order heeft in Shopware drie statussen naast elkaar: de order zelf (open, in behandeling, afgerond, geannuleerd), de betaling en de levering. Elk heeft een eigen state machine, en een overgang die niet in de machine staat wordt geweigerd. De koppeling zet een levering op verzonden met een statusovergang, niet door een veld te overschrijven. Hoe statussen tussen systemen worden vertaald staat op orders, klanten en verzending.

Hoe Shopware data vrijgeeft

Admin API en Store API

Shopware heeft twee API's. De Store API is voor de klantkant: winkelwagen, checkout, een headless frontend. De Admin API is voor alles wat een koppeling doet: producten, orders, klanten, bulkimport. Een koppeling werkt dus via de Admin API, ook als je storefront headless is.

Toegang loopt via een Integration onder Settings, System, Integrations. Shopware geeft een Access key ID en een Secret access key. Daarmee vraagt de koppeling met de grant client_credentials een Bearer-token op bij /api/oauth/token. Het token verloopt; de looptijd staat in expires_in in het antwoord, en de koppeling vraagt op tijd een nieuw aan.

Limieten: op de login, niet op de API

Shopware heeft geen limiet op het aantal Admin API-verzoeken. De ingebouwde rate limiters beschermen logins, wachtwoordherstel en formulieren. Eén daarvan raakt een koppeling wel: de limiter oauth op het aanvragen van tokens.

Limiter Wat hij beschermt Grens
oauth tokens voor de Admin API en het inloggen in de administratie 10 per 10 s, 15 per 30 s, 20 per 60 s
login inloggen van klanten via storefront en Store API 10 per 10 s, 15 per 30 s, 20 per 60 s
cart_add_line_item artikelen in de winkelwagen instelbaar, per 60 s

Een koppeling die voor elk verzoek een nieuw token haalt, loopt na 10 verzoeken in 10 seconden tegen de oauth-limiter aan, en die blokkeert ook beheerders die op dat moment willen inloggen. De koppeling bewaart het token en hergebruikt het tot kort voor expires_in. Verder bepaalt je server de grens: de Admin API is zo snel als de database en de indexering eronder.

De Sync API

Voor grote aantallen is er /api/_action/sync. Eén verzoek bevat een lijst bewerkingen, elk met een entiteit, een actie (upsert of delete) en een payload van meerdere records. Een upsert met een bekend id werkt het record bij. Zonder id maakt Shopware een nieuw record aan. De koppeling bewaart daarom per artikel het Shopware-ID, of verwijst met een resolver: {"resolver": "product.number", "value": "10482"} zoekt het product op artikelnummer.

{
  "voorraad": {
    "entity": "product",
    "action": "upsert",
    "payload": [
      { "id": "0189bf2a627a7296adbc83527ba9ac29", "stock": 20 },
      { "id": "0189bf2a627b719999a9bf3afdc5c5ac", "stock": 0 }
    ]
  }
}

Na elke schrijfactie herberekent Shopware zijn indexen, en bij een grote import is dat het zware deel. Met de header indexing-behavior: use-queue-indexing gaat de indexering naar de wachtrij op de achtergrond. De rekensom bij 12.000 producten en porties van 500, een grootte die wij per shop kiezen: 12.000 / 500 = 24 verzoeken. Zie doorvoer berekenen.

Webhooks

Shopware stuurt webhooks naar apps: een app noemt in zijn manifest per gebeurtenis een URL, zoals checkout.order.placed of product.written. In Shopware's eigen ontwerpdocument van april 2026 staat hoe de bezorging nu werkt: 3 nieuwe pogingen na 1, 2 en 4 seconden, samen ongeveer 7 seconden; geen vaste volgorde, zodat order.placed na order.paid kan aankomen; en na 10 mislukte bezorgingen wordt de webhook uitgezet tot iemand hem met de hand weer aanzet. Die teller delen webhooks met dezelfde gebeurtenis en dezelfde URL: een endpoint dat steeds faalt, kan zo de webhook van een andere app uitzetten. Een nieuwe bezorgroute met 5 nieuwe pogingen, na 5 seconden, 30 seconden, 5 minuten, 30 minuten en 4 uur, zit achter de feature flag WEBHOOKS_REWORK en staat standaard uit.

De koppeling gebruikt een webhook daarom als seintje en niet als bron. Een controleronde vraagt elke paar minuten orders op die sinds de vorige ronde zijn gewijzigd. Zie wat is een webhook.

Waar het bij Shopware op vastloopt

Varianten en overerving

In Shopware is een variant een product met een parentId. Velden die de variant zelf niet heeft, erft hij van het model, zoals de prijs. Wie een variant leest zonder de header sw-inheritance: 1, krijgt voor die velden null terug. Een koppeling die dat voor leeg aanziet, vult bij elke variant een eigen prijs in. Een prijswijziging op het model komt daarna niet meer bij de varianten aan.

Een ERP-artikel als variant in Shopware 6 Het ERP levert per variant een artikelnummer, het modelnummer, een kleur- en maatcode, een nettoprijs en voorraad. In Shopware wordt dat een productNumber, een parentId via de resolver op het modelnummer, twee opties, een prijs met netto en bruto en een stock. Een optie die nog niet bestaat blokkeert de regel. ERP Shopware 6, Admin API artikelnummer 10482-BL-M modelnummer 10482 kleurcode BL maatcode M verkoopprijs 89,50 excl. btw voorraad 20 productNumber 10482-BL-M parentId resolver product.number 10482 options optie-ID Blauw, optie-ID M per installatie anders price net 89.5, gross 108.3 in de standaardvaluta stock 20 resolver vertaaltabel x 1,21
Eén ERP-artikel als variant in Shopware. Het model wordt op nummer gevonden; de opties moeten als ID bestaan voordat de variant kan worden geschreven.

Kleur en maat zijn opties uit een eigenschapsgroep, met een eigen ID per waarde en per installatie. Shopware maakt een onderscheid tussen opties, die een variant bepalen, en eigenschappen, die alleen informatie zijn. Een kleurcode uit het ERP die in Shopware nog geen optie is, komt op een controlelijst. Zie varianten.

Prijzen: netto, bruto en de standaardvaluta

Een prijs in Shopware heeft per valuta een net, een gross en linked. Een product zonder prijs in de standaardvaluta wordt geweigerd. Het ERP levert meestal alleen netto: 89,50 x 1,21 = 108,295, afgerond 108,30. Zie bedragen en btw mappen.

Staffels en klantgroepprijzen hangen aan een regel uit de Rule Builder. Shopware rekent voor de laagste prijs in lijsten en filters met maximaal 100 regels die op een klant passen. Komen er meer regels in aanmerking, dan klopt de prijs op de productpagina nog wel, maar de sortering en het prijsfilter in de lijst niet.

Zichtbaarheid per verkoopkanaal

Een product heeft per verkoopkanaal een visibilities-regel nodig: 10 alleen via de link, 20 ook in de zoekfunctie, 30 overal. Zonder die regel staat het product wel in de administratie maar niet in de winkel. De koppeling zet de zichtbaarheid bij het aanmaken van een product en laat hem daarna aan jou.

Voorraad

product.stock is één getal dat Shopware zelf bijwerkt: het zakt bij een order en stijgt bij een annulering. Schrijft de koppeling de vrije voorraad uit het ERP, dan moet dat getal al gecorrigeerd zijn voor orders die het ERP nog niet kent. De koppeling verrekent openstaande Shopware-orders die nog niet in het ERP staan voordat hij schrijft. Zie welke voorraad toon je in je webshop.

Systemen die we aan Shopware koppelen

De combinatie met een eigen pagina: Shopware Exact Online koppeling. De systemen zelf: Exact Online koppeling, AFAS webshop koppeling, Business Central koppeling en Akeneo koppeling. Andere platformen: Magento koppeling en Shopify koppeling. Alle stromen staan op koppelingen.

Wij bouwen de koppeling voor een vaste prijs op jouw Shopware en jouw systemen, en hosten, draaien en bewaken hem daarna voor een vast bedrag per maand. Voor livegang draait hij als dry run: je ziet per product welke prijs, voorraad en zichtbaarheid er in Shopware zou komen, zonder dat er iets wijzigt. Vertel welke Shopware-versie en welke systemen je hebt.

Veelgestelde vragen

Werkt de koppeling met een headless Shopware?

Ja. Een headless frontend gebruikt de Store API; de koppeling gebruikt de Admin API. Die twee staan los van elkaar. Of je nu de standaard storefront draait of een eigen frontend, producten, voorraad en orders lopen via dezelfde Admin API.

Welke Shopware-versie heb ik nodig?

Shopware 6. Op 1 oktober 2026 kwamen 6.7.15.0 en een patch voor de 6.6-lijn uit, 6.6.10.28. De koppeling gebruikt de Admin API en de Sync API, die in beide lijnen bestaan.

Wat moet ik in Shopware aanmaken voor de koppeling?

Een Integration, zoals Shopware het noemt, onder Settings, System, Integrations. Shopware toont daarna een Access key ID en een Secret access key. Daarmee haalt de koppeling met client_credentials een token op bij /api/oauth/token. Geef die Integration alleen de rechten die de stromen nodig hebben.

Kan de koppeling voorraad per magazijn naar Shopware schrijven?

In de basis heeft een product één stock. Voorraad per magazijn en per magazijngroep kan met Multi-Inventory, onderdeel van de Commercial-plugin bij het Beyond-abonnement. Zonder die module telt de koppeling de magazijnen die voor de webshop meetellen op tot één getal. Zie meerdere magazijnen.

Kunnen klantprijzen uit het ERP naar Shopware?

Ja, langs twee wegen. Prijzen per klantgroep of staffel gaan als geavanceerde prijs met een regel uit de Rule Builder. Prijzen per klant gaan via /api/_action/custom-price uit de Commercial-plugin. Die tweede route filtert in de productlijst nog niet op de klantprijs. Zie klantspecifieke prijzen.

Wat gebeurt er met een order als de koppeling even plat ligt?

De order blijft in Shopware staan. De koppeling vraagt orders op met een filter op de wijzigingsdatum en haalt alles op wat sinds de vorige geslaagde ronde is binnengekomen. Een gemiste webhook kost dus tijd, geen order.

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

Leveranciers, producten, orders per dag, een ruwe schatting is prima.

Of mail direct: carsten@syncmyshop.com