Naar de inhoud
SyncMyShop

Systemen

Monta koppeling met je webshop en ERP: orders, inkoop en voorraad

Een Monta koppeling zet webshoporders en artikelen in Monta, meldt inkooporders vooraf aan als inbound forecast en haalt voorraad, verzendstatus en trackingnummer terug. Monta heeft een REST API met ruime limieten maar geen webhooks, dus alles wat terugkomt wordt opgehaald via events.

Wat is Monta en wie gebruikt het?

Monta is een Nederlands logistiek bedrijf voor webshops. Het heeft drie diensten: Monta Fulfilment, waarbij Monta je voorraad opslaat en je orders pickt, verpakt en verzendt vanuit meer dan 20 magazijnen in Nederland, Duitsland, het Verenigd Koninkrijk en Frankrijk; MontaWMS, het magazijnsysteem van Monta voor je eigen magazijn; en MontaShip, voor verzendlabels via het portaal van Monta. Klanten werken in het Montaportal.

Voor een koppeling is Monta het magazijn. De webshop levert de order, het ERP levert artikelen en inkooporders, en Monta meldt wat er ontvangen, gepickt en verzonden is. Monta heeft zelf meer dan 35 kant-en-klare koppelingen met webshopplatformen en marktplaatsen. Een eigen koppeling vult aan wat daarbuiten valt: een ERP tussen webshop en magazijn, orders uit meer kanalen, en inkoop en ontvangst terug naar de boekhouding.

Wat je met Monta koppelt

Stroom Richting Endpoint in API v6
Orders webshop naar Monta POST /order
Artikelen met gewicht en afmetingen ERP naar Monta POST /product, PUT /product/{sku}
Inkooporders als inbound forecast ERP naar Monta POST /inboundforecast/group
Ontvangsten Monta naar ERP QuantityReceived en ReceivedDates per forecast
Voorraad Monta naar webshop en ERP GET /product/{sku}/stock, product-events
Verzendstatus en tracking Monta naar webshop en ERP GET /orderevents/since_id/{id}, GET /order/{id}
Retouren Monta naar webshop en ERP GET /return/updated_since/{since}

Een order gaat met adres en regels in één aanroep naar Monta. Dit is order 10482 van Bakker Installatie B.V.:

{
  "WebshopOrderId": "WEB-10482",
  "Origin": "bakker-installatie.nl",
  "ConsumerDetails": {
    "DeliveryAddress": {
      "Company": "Bakker Installatie B.V.",
      "Street": "Dorpsstraat", "HouseNumber": "12",
      "HouseNumberAddition": "A", "PostalCode": "1234 AB",
      "City": "Utrecht", "CountryCode": "NL"
    },
    "B2B": true
  },
  "Lines": [{ "Sku": "KB-2210", "OrderedQuantity": 12 }]
}

WebshopOrderId is de unieke sleutel die jij kiest; daarmee wordt de order later opgevraagd, gewijzigd of geannuleerd. Origin bepaalt per bron onder meer de pakbon en de voorkeursvervoerders. Bij één bron kiest Monta hem zelf, maar Monta raadt aan hem altijd mee te sturen omdat er later bronnen bij kunnen komen. Welke velden per stroom meegaan staat op orders, klanten en verzending.

Hoe Monta data vrijgeeft

REST API v6 met basic authentication

De API staat op https://api-v6.monta.nl/, werkt met JSON en vraagt HTTPS met minimaal TLS 1.2. Inloggen gaat met een gebruikersnaam en wachtwoord die je in het Montaportal aanmaakt, als HTTP basic authentication. Per API-gebruiker kun je IP-adressen whitelisten; een aanroep van een ander adres krijgt dan een 403. De specificatie is een OpenAPI 3-bestand, wat de mapping controleerbaar maakt: elk veld heeft een type en een beschrijving.

De limieten van Monta

Limiet Waarde
Verzoeken per 5 minuten 4.500
Verzoeken per uur 27.000
Verzoeken per dag 270.000
GET /product/updated_since bucket van 5, 1 erbij per 10 seconden, maximaal 7 dagen terug
Order-events per aanroep 200
Orders per pagina bij GET /orders 30

Boven de limiet geeft Monta HTTP 429. De volledige lijst staat in de documentatie van de Monta REST API v6.

De limieten zijn ruim voor orders en krap voor een volledige voorraadcontrole per artikel. De rekensom voor 15.000 artikelen, één aanroep per artikel: 15.000 / 4.500 = 3,33 blokken van 5 minuten, dus 16 minuten en 40 seconden. Dat past in het uurlimiet van 27.000. Elk uur herhalen past niet: 24 x 15.000 = 360.000 aanroepen per dag, boven de 270.000. De koppeling leest wijzigingen daarom uit de product-events en draait de volledige controle één keer per nacht, 15.000 aanroepen.

Events in plaats van webhooks

De API beschrijft geen webhooks. Order-events, product-events en inbound forecast-events haal je op vanaf een id: Monta geeft wat er na dat id gebeurd is, zonder het event met dat id zelf. De eerste keer begin je bij id 1, daarna bij het laatst ontvangen id. Voor orders zijn er onder meer de events Picking, Packing, Shipped, EnRoute, Delivered, DeliveryFailed, Backorder, OutOfBackorder, LineDeleted en OrderDeleted.

Monta zegt er zelf bij dat GET /order/updated_since niet alle statuswijzigingen bevat en dat je voor een verzending de order-events moet gebruiken. Een koppeling die op updated_since vertrouwt, mist dus verzendingen. Zie wat is een webhook voor het verschil tussen een melding en ophalen.

Een order naar Monta en de verzendstatus terug De koppeling zet webshoporder WEB-10482 met POST /order in Monta. Monta stuurt geen webhooks, dus de koppeling vraagt elke paar minuten de order-events op vanaf het laatst verwerkte id, maximaal 200 per aanroep. Bij het event Shipped haalt hij de order op met het trackingnummer en zet de webshoporder op verzonden. Webshop order WEB-10482 Koppeling bij ons Monta API v6 nieuwe order POST /order 200 OK pick en pack in het magazijn GET /orderevents/ since_id/183536613 Picking, Packing, Shipped GET /order/WEB-10482 TrackAndTraceCode, ShipperCode verzonden, trackingnummer Monta geeft per aanroep de volgende 200 events na het opgegeven id. De koppeling bewaart het laatste id, zodat geen event dubbel of niet verwerkt wordt.
Monta stuurt geen webhooks. De koppeling haalt de events op vanaf het laatst verwerkte id en zet bij Shipped het trackingnummer in de webshop.

Waar het bij Monta op vastloopt

Adres in drie velden

Monta heeft Street, HouseNumber en HouseNumberAddition als losse velden. Straat, stad en landcode zijn verplicht, plus Company of LastName. Huisnummer en toevoeging mogen in Street als je ze niet los hebt, maar de meeste webshops leveren Dorpsstraat 12 A in één regel. De koppeling splitst die regel en stuurt alles naar Street als het niet lukt, met een melding. Zie adresvelden mappen.

Welk voorraadgetal

Veld Wat het is volgens Monta
StockAvailable voorraad op pickbare locaties
StockInTransit ontvangen, nog niet ingeslagen
StockReserved gereserveerd door orders
StockQuarantaine retour, beschadigd of onverkoopbaar
StockInboundForecasted aangemeld in inbound forecasts, nog niet ontvangen

Monta schrijft bij StockAvailable dat je StockInTransit misschien wilt meetellen. Na een grote levering staat er dus voorraad in het magazijn die de webshop niet toont, tot hij ingeslagen is. Voorraad per magazijn staat in PerWarehouse, en daar staan alleen magazijnen met voorraad in. Een magazijn dat ontbreekt betekent nul. Een koppeling die het ontbreken als "geen gegevens" leest, laat de oude voorraad staan. Alle voorraadvelden zijn gehele getallen: wie per meter of per kilo verkoopt, legt de eenheid vast voordat het eerste artikel naar Monta gaat. Zie meerdere magazijnen.

SKU als sleutel, orders die vastzitten

De SKU is in Monta de unieke sleutel die jij kiest. Een SKU met een schuine streep, zoals 088J/0001, moet in de URL als 088J%2F0001. Een artikelnummer dat in het ERP wordt hernoemd, moet in Monta mee veranderen. Anders vraagt de koppeling een SKU op die Monta niet kent en krijgt hij een 404.

Een order die Monta heeft gecontroleerd, heeft een datum in Verified. Monta waarschuwt dat dat niet betekent dat de order klopt: een onjuiste order wordt geblokkeerd en krijgt Blocked op true. Een order zonder voldoende voorraad krijgt Backorder. Beide komen niet vanzelf in de webshop terug, dus de koppeling controleert ze en zet geblokkeerde orders met de reden op de controlelijst. Zie backorders.

Inkoop en ontvangst

Een inbound forecast group heeft je inkoopordernummer als Reference en per artikel een aantal en een ExpectedDeliveryDate. Monta koppelt binnengekomen voorraad aan de forecast en vult QuantityReceived. Is een forecast goedgekeurd (Approved), dan koppelt Monta er geen ontvangsten meer aan. Een deellevering die na de goedkeuring binnenkomt, valt dus buiten de inkooporder in je ERP. De koppeling meldt per inkooporder het verschil tussen besteld en ontvangen.

Platformen die we aan Monta koppelen

De koppeling wordt gebouwd op jouw combinatie: de webshop voor de orders, het ERP voor artikelen en inkoop, Monta voor het magazijn. De platformen staan op Shopify koppeling, WooCommerce koppeling en Magento koppeling. Aan de ERP-kant: Exact Online koppeling en AFAS webshop koppeling. Voor een eigen magazijn met Picqer staat het op Picqer koppeling, en voor verzendlabels zonder fulfilment op Sendcloud koppeling. Alle stromen staan op koppelingen.

Wij bouwen de koppeling voor een vaste prijs, en hosten, draaien en bewaken hem daarna voor een vast bedrag per maand. Voor de livegang draait hij als dry run: je ziet per order welk adres, welke regels en welke bron naar Monta zouden gaan, zonder dat er iets wordt aangemaakt. Vertel welke webshop en welk ERP je naast Monta gebruikt, dan hoor je welke stromen erbij horen.

Veelgestelde vragen

Heeft Monta webhooks?

De REST API v6 van Monta beschrijft geen webhooks. Wijzigingen komen via event-endpoints: order-events, product-events en inbound forecast-events, elk opgevraagd vanaf het laatst verwerkte id. Voor orders geeft Monta per aanroep de volgende 200 events. Een koppeling die elke paar minuten vraagt, ziet een verzending dus binnen die paar minuten.

Hoe maak ik een API-gebruiker aan bij Monta?

In het Montaportal, bij de koppeling RestAPI. Daar maak je een gebruikersnaam en wachtwoord aan; de API gebruikt die als basic authentication over HTTPS met minimaal TLS 1.2. Per API-gebruiker kun je IP-adressen op een whitelist zetten. Staat er geen IP-adres op, dan is elk adres toegestaan; staat er wel een op, dan krijgt elk ander adres een 403.

Kan ik een order nog wijzigen of annuleren als hij al bij Monta staat?

Zolang hij nog niet gepickt is. Monta staat een wijziging of annulering via de API alleen toe voor orders die nog niet gepickt zijn. De koppeling stuurt een annulering uit de webshop daarom direct door, en zet hem op de controlelijst als Monta weigert omdat het picken al begonnen is.

Welke voorraad van Monta toont de webshop?

Meestal StockAvailable: de voorraad op pickbare locaties. Monta geeft daarnaast onder meer gereserveerde voorraad, voorraad in quarantaine, voorraad die ontvangen maar nog niet ingeslagen is, en de verwachte inkomende voorraad uit inbound forecasts. Of ontvangen maar nog niet ingeslagen voorraad meetelt, is een keuze per webshop. Zie welke voorraad toon je in je webshop.

Moet mijn ERP inkooporders aan Monta doorgeven?

Als je wilt dat Monta een levering kan verwerken en jij weet wat er binnen is, ja. Een inkooporder gaat naar Monta als inbound forecast group, met je inkoopordernummer als Reference en per artikel een aantal en een verwachte leverdatum. Na ontvangst geeft Monta per regel het ontvangen aantal en de ontvangstdatum terug, en die gaat naar je ERP als ontvangst op de inkooporder.

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