Naar de inhoud
SyncMyShop

Systemen

GoedGepickt koppeling: je ERP en webshop koppelen aan GoedGepickt

Een GoedGepickt koppeling zet artikelen, orders en inkoopbestellingen uit je ERP in GoedGepickt en haalt voorraad, zendingen en retouren terug. GoedGepickt heeft een REST API met een API-sleutel, een limiet van 150 aanroepen per IP-adres en webhooks met negen herhaalpogingen.

Wat is GoedGepickt en wie gebruikt het?

GoedGepickt is een Nederlands magazijnsysteem (WMS) voor webshops en fulfilmentbedrijven. Je beheert er picklocaties, voorraad, picklijsten, zendingen, retouren en inkoopbestellingen. Voor orders heeft GoedGepickt eigen koppelingen met webshops en marktplaatsen, waaronder Magento 2, Lightspeed, CCV Shop, PrestaShop, bol, Kaufland en een reeks Mirakl-marktplaatsen. Fulfilmentbedrijven gebruiken het om voorraad voor meerdere klanten te beheren, elk als fulfilmentklant.

Wat ontbreekt is de kant van het ERP of de boekhouding: artikelstamgegevens, inkoop, ontvangsten en verkooporders die in de administratie moeten komen. Daar zit de koppeling. GoedGepickt is dan de bron voor de fysieke voorraad, het ERP voor artikelen en inkoop. Hoe je dat per gegeven vastlegt staat op een WMS koppelen aan je webshop en ERP.

Wat je met GoedGepickt koppelt

Stroom Richting Endpoint of event
Artikelen met EAN, gewicht en afmetingen ERP naar GoedGepickt POST /api/v1/products, PUT /api/v1/products/{uuid}
Inkoopbestellingen met verwachte leverdatum ERP naar GoedGepickt POST /api/v1/purchase-orders
Orders van kanalen zonder eigen koppeling webshop naar GoedGepickt POST /api/v1/orders
Voorraadmutaties GoedGepickt naar ERP en webshop webhook stockUpdated
Verwachte voorraad per inkoop GoedGepickt naar webshop GET /api/v1/products/{uuid}/expected-stock
Zendingen met track-and-trace GoedGepickt naar ERP webhook shipmentCreated
Afgeronde orders voor de boekhouding GoedGepickt naar ERP webhook orderCompleted, GET /api/v1/orders/{uuid}
Retouren GoedGepickt naar ERP webhook return_returnCreated, GET /api/v1/returns

Bij de meeste events stuurt GoedGepickt hetzelfde object mee als de API teruggeeft, zodat de koppeling zonder extra aanroep verder kan. Uitzonderingen zijn orderStatusChanged met alleen newStatus, orderNumber en orderUuid, en productArchived met alleen uuid en sku. Voor de rest van de order vraagt de koppeling hem op. Welke orderdata in je ERP hoort staat op orders, klanten en verzending.

Hoe GoedGepickt data vrijgeeft

REST API met een API-sleutel

De API staat op https://account.goedgepickt.nl/api/v1/ en werkt met JSON. Een sleutel maak je aan onder Instellingen, GoedGepickt API, met een naam per sleutel. Elke aanroep heeft de header Authorization: Bearer met die sleutel. GoedGepickt raadt aan om voor tests een testaccount aan te vragen, zodat je geen echte voorraad wijzigt.

De limiet en de rekensom

Limiet Waarde
Aanroepen 150 per IP-adres over alle endpoints, per minuut volgens X-Ratelimit-Limit
Boven de limiet 429 met Retry-After in seconden
Resultaten zonder cursor tot 10.000; daarboven cursor uit pageInfo
Webhook-antwoord 200 binnen 10 seconden

De limiet geldt per IP-adres, niet per sleutel. Elke koppeling die vanaf dezelfde server draait, deelt dus dezelfde 150. De rekensom voor een eerste vulling van 15.000 artikelen, één aanroep per artikel: 15.000 / 150 = 100 minuten. Een dagelijkse controle van alle artikelen per stuk kost dezelfde 100 minuten. Daarom leest de koppeling voorraad uit de webhook stockUpdated en draait hij een volledige controle 's nachts, als orders en zendingen de limiet niet nodig hebben. Zie wat is een rate limit.

Webhooks met negen pogingen

Webhooks stel je in per account of per webshop, onder Instellingen, Webhooks, of via POST /api/v1/webhooks. Retour-events en de voorraad van samengestelde producten zet je alleen via de instellingenpagina aan. GoedGepickt wacht 10 seconden op een 200. Daarna volgen herhalingen na 10, 100, 1.000 en 10.000 seconden, en dan één per dag, tot 9 pogingen. De vijfde poging valt 10 + 100 + 1.000 + 10.000 = 11.110 seconden na de eerste, ruim 3 uur. Na de zevende stuurt GoedGepickt een mail, na de negende staat de webhook op inactief. Een webhook die je uitzet, verliest ook de herhalingen die nog in de wachtrij stonden.

orderCreated komt niet altijd direct: staat de order nog op processing, dan wacht GoedGepickt tot de verzendmethode bekend is, maximaal ongeveer 2,5 minuut. Zie wat is een webhook.

Herhaalpogingen van een GoedGepickt-webhook en het inhalen via de API GoedGepickt verwacht binnen 10 seconden een 200. Lukt dat niet, dan volgen herhalingen na 10, 100, 1.000 en 10.000 seconden en daarna één per dag, 9 pogingen in totaal. De koppeling haalt gemiste orders daarnaast zelf op met updatedAfter. GoedGepickt webhook Koppeling endpoint ERP verkooporder orderCreated, poging 1 geen 200 binnen 10 s 10 seconden later poging 2 503 Service Unavailable poging 3 tot 5: na 100, 1.000, 10.000 s daarna één poging per dag Na poging 7 mailt GoedGepickt: Actie vereist voor falende webhook. Mislukt ook poging 9, ruim 4 dagen na de eerste, dan staat de webhook op inactief. GET /api/v1/orders?updatedAfter= orders sinds laatste ronde ontbrekende orders
GoedGepickt herhaalt een mislukte webhook 9 keer in ruim 4 dagen. De koppeling haalt daarnaast zelf op wat sinds de laatste ronde gewijzigd is, zodat een gemiste melding geen gemiste order wordt.

Waar het bij GoedGepickt op vastloopt

Lokale tijd erin, UTC eruit

Bij het aanmaken van een order leest GoedGepickt createDate in tijdzone Europe/Amsterdam. Tijden in antwoorden komen terug in UTC, met een Z erachter, zoals 2024-07-28T14:16:00.000000Z. Een order van 00:30 op 1 oktober Nederlandse tijd staat in het antwoord als 22:30 op 30 september. Een koppeling die filtert op updatedAfter met lokale tijd, of de UTC-tijd als lokale tijd in het ERP zet, schuift orders naar de verkeerde dag. Zie datums en tijdzones.

Adres in drie velden

GoedGepickt bewaart straat, huisnummer en toevoeging apart: shippingAddress, shippingHouseNumber en shippingHouseNumberAddition, met shippingAddress2 voor een extra regel. Een webshop die Dorpsstraat 12 A in één regel levert, moet worden gesplitst voordat de order erin gaat. In het voorbeeldantwoord van de API heet het afleveradresveld shippingHousenumberAddition, met een kleine n, en het factuurveld billingHouseNumberAddition. De koppeling leest beide schrijfwijzen, anders verdwijnt de toevoeging. Zie adresvelden mappen.

Welk voorraadgetal

"stock": {
  "totalStock": 25,
  "reservedStock": 4,
  "freeStock": 21,
  "expectedStock": 12,
  "useFictionalStock": 0,
  "minimalStock": 10
}

totalStock is wat er ligt, freeStock wat er na reserveringen over is. De webshop krijgt freeStock. In de webhook stockUpdated heet dat newStock, en daarin zit de voorraadbuffer van die webshop al verrekend; newStockWithoutBuffer geeft het getal zonder buffer. Een ERP dat de buffer zelf ook aftrekt, telt hem dubbel. Een artikel kan ook op fictieve voorraad staan (useFictionalStock), met useRealStockIfStockGoesBelow als drempel. Dan is het getal voor de webshop niet het fysieke getal. Een buffer per kanaal staat op veiligheidsvoorraad.

Een voorraadcorrectie via stock-mutation is een verschil, zoals mutation=-2, en landt op de picklocatie met de hoogste prioriteit. Wie per locatie wil corrigeren, gebruikt het stock-endpoint met de picklocationUuid.

Statussen die niet één op één passen

Bij het aanmaken accepteert GoedGepickt alleen on_hold, open en completed. Daarna gebruikt GoedGepickt eigen statussen, zoals backorder, ready_for_picking, picking, ready_for_packing, completed en cancelled. Een ERP met drie orderstatussen krijgt dus een vertaaltabel, en backorder moet naar je ERP of webshop terug als signaal dat de order niet volledig verzonden kan worden. Zie orderstatussen mappen.

Platformen en systemen die we aan GoedGepickt koppelen

Aan de ERP-kant: Exact Online koppeling, AFAS webshop koppeling en Business Central koppeling. Voor webshops: Shopify koppeling, WooCommerce koppeling en Magento koppeling. Voor marktplaatsen: bol koppeling en Channable koppeling. Werk je met een ander magazijnsysteem, dan staat het op Picqer koppeling of Monta koppeling. Alle stromen staan op koppelingen.

We bouwen de koppeling voor een vaste prijs en hosten, draaien en bewaken hem daarna voor een vast bedrag per maand. Een webhook gaat eerst in een wachtrij, die direct 200 antwoordt; de verwerking volgt daarna, zodat een traag ERP geen herhalingen bij GoedGepickt veroorzaakt. Een order die in GoedGepickt op aandacht vereist komt te staan, komt met de reden op de controlelijst. Vertel welk ERP en welke webshop je naast GoedGepickt gebruikt, dan hoor je welke stromen erbij horen.

Veelgestelde vragen

Heb ik een bepaald GoedGepickt-pakket nodig voor de API?

Volgens de API-documentatie van GoedGepickt hebben alle gebruikers toegang tot de REST API. Je maakt een sleutel aan onder Instellingen, GoedGepickt API. Ben je klant van een fulfilmentbedrijf dat met GoedGepickt werkt, dan gebruik je een aparte API voor fulfilmentklanten met een eigen documentatie.

Moet de webshop via de koppeling lopen, of houdt GoedGepickt zijn eigen webshopkoppeling?

Meestal houdt GoedGepickt de eigen koppeling met de webshop of marktplaats voor orders en voorraad. De koppeling met je ERP zorgt dan voor artikelen, inkoopbestellingen, ontvangsten en de orders voor je boekhouding. Een webshop of verkoopkanaal zonder eigen GoedGepickt-koppeling zet zijn orders via POST /api/v1/orders in GoedGepickt.

Hoe controleer ik of een webhook echt van GoedGepickt komt?

Elke webhook heeft een header Signature: een HMAC-SHA256 over de ruwe body met de webhook-secret die GoedGepickt bij het aanmaken toont. De koppeling rekent die na over de body zoals hij binnenkwam, niet over opnieuw opgebouwde JSON, en weigert een bericht dat niet klopt.

Kan GoedGepickt de verwachte leverdatum van een inkoop teruggeven?

Ja. Een inkoopbestelling heeft per regel een expectedDeliveryDate, en per artikel geeft GoedGepickt de verwachte voorraad terug met aantal, ontvangen aantal en eta per inkoopbestelling. Daarmee kan je webshop bij nul voorraad een leverdatum tonen. Zie levertijd synchroniseren.

Wat gebeurt er met een order die GoedGepickt niet kan verwerken?

GoedGepickt zet dan het vlaggetje aandacht vereist, bijvoorbeeld bij een adres- of voorraadprobleem, en stuurt het event attentionNeeded met de volledige order. De koppeling zet zo'n order met de reden op de controlelijst. Omgekeerd kan de koppeling zelf een order markeren met mark-as-attention-needed.

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