Naar de inhoud
SyncMyShop

Picqer en Shopify

Picqer Shopify koppeling

Orders uit Shopify staan als order in Picqer, de vrije voorraad uit Picqer staat per locatie in Shopify en een afgeronde picklijst sluit de order af met track-en-trace. Met meerdere magazijnen en locaties, en met de voorraad en leverdatum van je leverancier erbij. Gebouwd op jouw inrichting, en daarna door ons gedraaid en bewaakt.

Wat je tussen Picqer en Shopify koppelt

Shopify vangt de order. Picqer pickt, verpakt en verzendt, en weet wat er vrij op de plank ligt. Tussen de twee lopen vier stromen, en een vijfde komt van buiten: de voorraad en leverdatum van je leverancier.

Stroom Richting Shopify Picqer
Orders naar Picqer webhook orders/create of orders/paid POST /orders, daarna /process
Vrije voorraad naar Shopify inventorySetQuantities webhook products.free_stock_changed
Zending en track-en-trace naar Shopify fulfillmentCreate webhook picklists.shipments.created
Annulering naar Picqer webhook orders/cancelled order annuleren
Leveranciersvoorraad en leverdatum naar beide doorverkopen en een metafield beschikbaarheid en levertijd

Producten worden aan elkaar gekoppeld op één sleutel: de SKU van de Shopify-variant is de productcode in Picqer. Picqer eist dat een productcode uniek is. Shopify eist dat van een SKU niet, dus de koppeling controleert bij de start op dubbele en lege SKU's en meldt ze voordat er voorraad wordt geschreven.

Welk systeem is leidend, per gegeven

Gegeven Leidend Richting Gedrag
Order en betaalstatus Shopify naar Picqer één keer, met het Shopify-ordernummer als reference
Vrije voorraad per magazijn Picqer naar Shopify bij elke wijziging, plus een nachtelijke vergelijking
committed Shopify berekend in Shopify niet via de API aan te passen
Producttitel, prijs, afbeeldingen Shopify, het PIM of het ERP buiten deze stroom de koppeling schrijft er niet overheen
Zending, vervoerder, trackingnummer Picqer naar Shopify één fulfilment per picklijst
Verwachte leverdatum inkooporder in Picqer of het bestand van de leverancier naar Shopify als metafield op de variant
Doorverkopen bij nul regel in de koppeling naar Shopify inventoryPolicy op CONTINUE of DENY

Over de laatste regel: Picqer staat backorders altijd toe. Of een klant een product zonder voorraad kan bestellen, bepaalt dus de webshop, per variant.

Wat Picqer en Shopify anders bewaren

Vrije voorraad tegenover available en committed

Vrije voorraad uit Picqer als available in Shopify Picqer heeft 20 stuks op de plank. 4 zijn gereserveerd voor een Shopify-order en 2 voor een order van een ander kanaal, dus de vrije voorraad is 14. Schrijft de koppeling de 20 als on_hand naar Shopify, dan trekt Shopify alleen zijn eigen order af en toont 16. Schrijft hij de 14 als available, dan klopt het aantal. Picqer: 20 op de plank 20 Shopify-order 4 Vrije voorraad 14 bol-order 2 freestock in de API van Picqer 14 Shopify als de koppeling 20 schrijft als on_hand 20 committed 4 available 16 Te koop in Shopify, 2 meer dan er vrij is 16 Shopify als de koppeling 14 schrijft als available 18 committed 4 available 14 Te koop in Shopify, gelijk aan Picqer 14
Dezelfde 20 stuks, twee manieren van schrijven. Alleen de vrije voorraad als available houdt rekening met orders van andere kanalen.

Picqer geeft per product en per magazijn een rij getallen terug:

{
  "productcode": "10482",
  "stock": [
    {
      "idwarehouse": 18,
      "stock": 20,
      "reserved": 6,
      "reservedbackorders": 0,
      "reservedpicklists": 6,
      "freestock": 14
    }
  ]
}

stock is wat er ligt, reserved wat al verkocht en nog niet gepickt is, freestock het verschil. Shopify houdt per variant en per locatie eigen standen bij. available is wat te koop is. committed is wat in geplaatste orders zit die nog niet zijn afgehandeld. on_hand is de som van die twee en van de standen voor gereserveerd, beschadigd, veiligheidsvoorraad en kwaliteitscontrole.

De rekensom. Er liggen 20 stuks. Een Shopify-order neemt er 4, een bol-order die rechtstreeks in Picqer staat 2. De vrije voorraad is 20 min 6 is 14. Schrijft de koppeling de 20 als on_hand, dan trekt Shopify zijn eigen 4 af en toont 16: de bol-order kent Shopify niet. Schrijft hij de 14 als available, dan klopt het. De vrije voorraad kan in Picqer ook negatief zijn, bij backorders. Shopify krijgt dan 0.

Het venster tussen order en reservering

Een order die net in Shopify is geplaatst, staat nog niet in Picqer. In dat venster is available in Shopify al 4 lager en freestock in Picqer nog niet. Een voorraadronde die dan schrijft, zet de 4 terug.

Shopify heeft daar een controle voor. Elke hoeveelheid in inventorySetQuantities krijgt een changeFromQuantity mee: het aantal dat de koppeling het laatst heeft gezien.

{
  "name": "available",
  "reason": "correction",
  "quantities": [
    {
      "inventoryItemId": "gid://shopify/InventoryItem/30322695",
      "locationId": "gid://shopify/Location/124656943",
      "quantity": 14,
      "changeFromQuantity": 16
    }
  ]
}

Staat er in Shopify inmiddels 15 omdat er een order bij kwam, dan weigert Shopify de wijziging met de fout CHANGE_FROM_QUANTITY_STALE. De koppeling wacht tot die order in Picqer is gereserveerd en schrijft dan het nieuwe getal. Het veld is verplicht; wie null meegeeft slaat de controle over. Vanaf API-versie 2026-04 vraagt de mutatie ook een idempotentiesleutel.

Magazijnen en locaties

Een Picqer-magazijn heeft drie instellingen die hier tellen: accept_orders, counts_for_general_stock en priority. Een order kan worden beperkt tot de magazijnen die hem mogen leveren. Shopify wijst een order zelf toe en splitst hem in fulfilment orders, elk met een eigen locatie. De koppeling legt de tabel vast: magazijn Utrecht hoort bij locatie Utrecht, de winkel met kassa is een Shopify-locatie zonder Picqer-magazijn. Orders voor die winkel blijven buiten Picqer, of worden met fulfillmentOrderMove verplaatst naar een locatie die wel uit Picqer levert. Zie voorraad over meerdere magazijnen.

De kant van de leverancier

Picqer heeft inkooporders met een verwachte leverdatum, delivery_date, en geeft per product de openstaande inkoopregels terug op volgorde van aankomst. Een backorder krijgt daaruit een date_available. Wat Picqer niet doet, is het voorraadbestand van een leverancier inlezen: wat de leverancier zelf nog heeft liggen staat er niet in.

De koppeling leest dat bestand wel en gebruikt het op twee plekken. In Shopify gaat een variant met vrije voorraad 0 en 40 stuks bij de leverancier op doorverkopen, met de leverdatum als metafield. Naar Picqer gaan de beschikbaarheid bij de leverancier en de levertijd, zodat inkoop en webshop dezelfde datum zien. Eigen voorraad gaat altijd voor: de leveranciersvoorraad vult alleen aan waar het eigen magazijn op nul staat. Meer hierover op levertijd synchroniseren en Picqer koppeling.

De technische werkelijkheid van deze combinatie

Limiet Picqer Shopify
Tempo 500 verzoeken per minuut per API-sleutel 100 punten per seconde, 200 op Advanced, 1.000 op Plus
Boven de grens 429, het verzoek wordt genegeerd 200 OK met foutcode THROTTLED
Per verzoek 100 resultaten, verder met offset 250 hoeveelheden per mutatie
Webhook: tijd om te antwoorden 10 seconden 5 seconden
Webhook: nieuwe pogingen 15 in ongeveer 17 uur 8 in 4 uur
Webhook uitgeschakeld na 5 volledig mislukte berichten in 24 uur na 8 mislukte afleveringen achter elkaar

De getallen zijn op 3 oktober 2026 nagelezen in de documentatie van Picqer en Shopify. Picqer meldt dat de limiet van 500 kan meebewegen met de drukte op het platform; de actuele waarde staat in de header X-RateLimit-Limit.

De nachtelijke vergelijking, doorgerekend. 15.000 producten in één magazijn ophalen via GET /warehouses/{id}/stock kost 150 verzoeken van 100 resultaten: ruim binnen de 500 per minuut. Naar Shopify zijn 15.000 hoeveelheden 60 mutaties van 250. Na de vergelijking gaan alleen de verschillen mee.

Webhooks zijn geen garantie, aan geen van beide kanten. Shopify levert een webhook soms twee keer af en garandeert geen volgorde. Picqer schakelt een webhook uit na herhaald falen. De koppeling antwoordt daarom direct met 200, zet het bericht in de wachtrij en controleert de handtekening: X-Picqer-Signature bij Picqer, een HMAC met SHA-256 over de hele inhoud. De nachtelijke vergelijking vangt op wat een webhook heeft gemist. Zie wat is een webhook.

Orders ouder dan 60 dagen. Shopify geeft een app standaard alleen de orders van de laatste 60 dagen. Voor een migratie met oudere openstaande orders is het recht read_all_orders nodig.

De naam van de vervoerder. Shopify herkent een vervoerder alleen als de naam in trackingInfo.company exact overeenkomt met zijn lijst, hoofdletters inbegrepen. De koppeling vertaalt de naam uit de Picqer-zending. De klant krijgt alleen een verzendmail als notifyCustomer aan staat; de standaardwaarde is uit.

Wat een standaardkoppeling hier niet doet

Picqer heeft zelf een Shopify-koppeling en documenteert wat die doet. Op 3 oktober 2026 stond er in de helpartikelen:

  • Eén Shopify-locatie. Picqer beheert één locatie per webshop. Orders die in Shopify op een andere locatie binnenkomen worden genegeerd.
  • Eén webshop, één Picqer-account. Een Shopify-winkel is één keer te koppelen.
  • Alleen onvervulde, betaalde orders. Orders met de fulfilmentstatus unfulfilled en de betaalstatus paid of partially_refunded worden geïmporteerd; met verwachte orders aan ook nog niet betaalde.
  • Dubbele SKU's. De voorraad gaat naar de SKU die Shopify als eerste teruggeeft.
  • Annuleren werkt één kant op. Een annulering in Picqer verandert niets aan de order in Shopify.

De voorraad van leveranciers zit er niet in: Picqer leest die zelf niet in. Een gebouwde koppeling legt de tabel van magazijnen en locaties vast, de regel per betaalwijze en de bron per leverancier.

Als het misgaat

Wat er misgaat Wat de koppeling doet Wat je ziet
Picqer antwoordt 429 het verzoek gaat opnieuw de wachtrij in niets, tenzij het aanhoudt
Shopify antwoordt THROTTLED wacht tot het puntenbudget is aangevuld niets
CHANGE_FROM_QUANTITY_STALE leest de stand opnieuw en schrijft daarna niets
Orderregel met een SKU die Picqer niet kent de order blijft als concept staan de order en de SKU
Webhook kwam twee keer de tweede wordt herkend aan X-Shopify-Webhook-Id niets
Order gewijzigd nadat de picklijst is gestart geen automatische wijziging de order op de controlelijst
Voorraadbestand van de leverancier ontbreekt vandaag de laatste stand blijft staan, niets gaat op nul een melding met de leverancier

Voordat de koppeling een order aanmaakt, zoekt hij in Picqer op reference. Picqer dwingt een unieke referentie niet af, dus zonder die controle maakt een herhaald bericht een tweede order. Een bericht dat blijft falen wordt met de oorspronkelijke inhoud bewaard en gaat opnieuw mee zodra de oorzaak is opgelost.

Voor livegang draait de koppeling als dry run: hij laat per variant zien welke voorraad hij zou schrijven en welke orders hij zou aanmaken, zonder te schrijven. Wij hosten en bewaken hem en passen hem aan als Picqer of Shopify een interface wijzigt. Alle voorraadstromen staan op voorraad en beschikbaarheid, de platformkant op Shopify koppeling, en het overzicht op koppelingen. Verwante combinaties: Picqer WooCommerce koppeling en Akeneo Shopify koppeling. Vertel hoeveel magazijnen, locaties en leveranciers je hebt.

Veelgestelde vragen

Kan ik meerdere Shopify-locaties aan Picqer koppelen?

Ja. De koppeling legt per Picqer-magazijn vast bij welke Shopify-locatie het hoort en schrijft de vrije voorraad per locatie. Een order die Shopify aan een locatie toewijst, komt in Picqer binnen op het bijbehorende magazijn. Shopify staat 10 locaties toe op Basic, Grow en Advanced en 200 op Plus.

Welke voorraad stuurt de koppeling naar Shopify?

De vrije voorraad, het veld freestock per magazijn: wat er op de plank ligt min wat al verkocht en nog niet gepickt is. Die gaat naar Shopify als available. De fysieke voorraad als on_hand schrijven lijkt gelijkwaardig, maar dan mist Shopify de reserveringen van orders die via een ander kanaal in Picqer zijn gekomen.

Wanneer gaat een order naar Picqer: bij het plaatsen of bij het betalen?

Dat leg je per betaalwijze vast. Een vooruitbetaalde order gaat door bij de webhook orders/paid, een order op rekening bij orders/create. In Picqer komt elke order binnen met de status concept. De koppeling verwerkt hem daarna, en vanaf dat moment is de order in Picqer definitief en niet meer te bewerken.

Wat gebeurt er als een klant zijn order wijzigt of annuleert?

Een annulering in Shopify annuleert de order in Picqer zolang er nog niets is gepickt. Is een deel al verzonden, dan blijft de order staan en krijg je een melding. Een gewijzigde order komt binnen via de webhook orders/edited. Omdat een verwerkte order in Picqer niet meer te bewerken is, wordt hij geannuleerd en opnieuw aangemaakt, of komt hij op een controlelijst als de picklijst al loopt.

Kan de webshop producten verkopen die bij de leverancier op voorraad liggen?

Ja. De koppeling leest het voorraadbestand van de leverancier en zet een variant waarvan de eigen vrije voorraad nul is op doorverkopen, met de verwachte leverdatum erbij. De leveranciersvoorraad vult zo alleen gaten en overschrijft nooit de telling van je eigen magazijn. Zie voorraad van je leverancier koppelen.

Hoe komt de track-en-tracecode in Shopify?

Picqer stuurt de webhook picklists.shipments.created zodra er een zending op een picklijst is aangemaakt. De koppeling maakt in Shopify een fulfilment aan met het nummer, de URL en de naam van de vervoerder. Bij een deellevering bevat het fulfilment alleen de regels van die picklijst, en de rest van de order blijft openstaan.

Werkt het met bundels en samengestelde producten?

Ja. Picqer kent samenstellingen als eigen producttype, virtueel of met eigen voorraad. In Shopify is de voorraad van een bundel niet via de API te schrijven: dat geeft de fout NON_MUTABLE_INVENTORY_ITEM. De koppeling schrijft daarom de voorraad van de onderdelen en slaat de bundel zelf over.

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