Naar de hoofdinhoud

Voorraad- en magazijnwebhooks

Voor ontwikkelaars: stock/adjusted, stock/low, fulfilment/picked en events van magazijndocumenten zoals ontvangsten, inkooporders, tellingen, containers, teamtaken en overboekingen, met ontdubbelen en afleverregels.

H
Geschreven door Hayko

Voorraad- en magazijnwebhooks

QrX kan uw eigen systeem melden wanneer voorraad wijzigt, wanneer een artikel laag wordt en wanneer een order is gepickt.

Het kan uw systeem ook informeren over magazijndocumenten: ontvangsten, inkooporders, tellingen, containers, teamtaken en meer events van picklijsten en orders. Zie "Events van magazijndocumenten" hieronder.

Dit artikel is voor ontwikkelaars. Het behandelt de events stock/adjusted, stock/low en fulfilment/picked. Voor handtekeningen, nieuwe pogingen en het afleverlogboek zie "Webhooks en API-sleutels in PortalX" en "Snelstart voor ontwikkelaars: QrX Public API en webhooks".

Abonneren op de events

  1. Ga naar Settings > Advanced > Webhooks en open of maak een webhook.

  2. Open in de lijst met events de groep Voorraad en vink stock/adjusted en stock/low aan.

  3. Open de groep Fulfilment en vink fulfilment/picked aan.

  4. De voorbeeldpayload van elk event toont een volledig voorbeeld. Kies met Customize payload welke velden worden verstuurd.

  5. Open voor magazijndocumenten de groepen Ontvangsten, Inkooporders, Tellingen, Containers, Teamtaken en Overboekingen en vink de events aan die u nodig hebt. De extra events van picklijsten en orders staan in de groep Fulfilment.

  6. Sla de webhook op.

Via de API voegt u dezelfde eventnamen toe aan eventTypes in POST /api/v1/webhooks. Voor de voorraadevents hebt u QrX-magazijnvoorraad op uw account nodig, of voorraad die een fulfilmentpartner voor u bewaart.

stock/adjusted

Verstuurd wanneer de voorraad van een artikel in een magazijn wijzigt: een ontvangst, een pick, een verzending, een retour, een telling, een verplaatsing of een correctie. U krijgt één event per voorraadartikel, magazijn en handeling, nooit één per scan. Een wijziging wordt ongeveer een minuut na het boeken gemeld.

{
  "eventId": "stock/adjusted:1:98231",
  "occurredAt": "2026-10-11T09:12:03Z",
  "movementId": 98231,
  "sequence": 98231,
  "stockItemId": 345, "sku": "TSHIRT-M", "ean": "8712345678906",
  "ownerCustomerId": null,
  "partnerCustomerId": null,
  "warehouseId": 1, "warehouseCode": "MAIN",
  "fromLocationCode": "A-01-02", "toLocationCode": null,
  "reason": "adjusted",
  "documentType": "adjust", "documentId": 5521,
  "movementCount": 1,
  "quantity": 3,
  "delta": -3,
  "onHand": 42, "sellable": 40, "available": 35
}

  • eventId: de sleutel om dubbele events te herkennen. Behandel het als een ondoorzichtige tekst; ontleed het niet.

  • sequence: een getal dat per artikel en magazijn altijd oploopt. Het is gelijk aan lastSequence van GET /api/v1/stock/levels direct na de beweging.

  • movementId, occurredAt: de nieuwste voorraadbeweging in het event en het tijdstip (UTC).

  • ownerCustomerId: de merchant voor wie de voorraad wordt bewaard; null voor uw eigen voorraad. partnerCustomerId: null, behalve in de kopie voor de eigenaar die hieronder staat.

  • fromLocationCode, toLocationCode: de locatie die de stuks verlieten en waar ze binnenkwamen. Null betekent buiten de voorraad (leverancier, klant, correctie) of meerdere locaties in één event.

  • reason: bijvoorbeeld received, putaway, moved, adjusted, shipped, returned, scrapped, blocked, unblocked. Behandel een waarde die u niet kent als een algemene beweging.

  • documentType, documentId, movementCount: het voorraaddocument achter de wijziging en hoeveel bewegingen het event optelt.

  • quantity: verplaatste stuks. delta: wijziging van de aanwezige voorraad in dit magazijn; 0 bij een verplaatsing, een pick of een wegzetting binnen het magazijn.

  • onHand, sellable, available: de stand van het artikel in dit magazijn direct na de beweging.

stock/low

Eén keer verstuurd telkens wanneer een artikel daalt tot op of onder zijn waarschuwingsniveau voor lage voorraad, op hetzelfde moment als de belmelding. Het wordt niet herhaald zolang het artikel laag blijft. Zie "Waarschuwingen bij lage voorraad" voor het instellen van een waarschuwing.

{
  "eventId": "stock/low:12:4",
  "occurredAt": "2026-10-11T09:13:00Z",
  "ruleId": 12, "crossing": 4,
  "stockItemId": 345, "sku": "TSHIRT-M", "ean": "8712345678906", "name": "T-shirt M",
  "ownerCustomerId": null,
  "partnerCustomerId": null,
  "warehouseId": null, "warehouseCode": null,
  "threshold": 10, "available": 7
}

  • ruleId: de waarschuwing. crossing: telt de waarschuwingen van deze regel (1, 2, 3 enzovoort).

  • warehouseId, warehouseCode: null wanneer de waarschuwing alle magazijnen samen telt.

  • threshold: het waarschuwingsniveau. available: het beschikbare aantal toen de waarschuwing afging.

fulfilment/picked

Eén keer per order verstuurd wanneer het picken op de telefoon is afgerond: zodra de picker de picklijst in de QrX-app afrondt, krijgt elke order op die picklijst één event. Een papieren picklijst, of een picklijst die alleen op het scherm wordt afgehandeld, verstuurt het niet: voor die orders is fulfilment/packed het eerste event.

{
  "eventId": "fulfilment/picked:881:120045",
  "occurredAt": "2026-10-13T10:02:11Z",
  "sessionId": null,
  "transactionId": 120045,
  "transactionKey": "TR-8F3K2M",
  "orderId": "1001",
  "picklistId": 881,
  "pickedAt": "2026-10-13T10:02:11Z",
  "pickedByUserId": "b6c0...",
  "hasShorts": false
}

  • transactionId, transactionKey, orderId: de order, zoals in fulfilment/packed.

  • picklistId: de picklijst. Null wanneer een fulfilmentpartner de order voor u pickte.

  • pickedAt: wanneer de picklijst is afgerond. hasShorts: true wanneer minstens één regel van deze order te weinig is gepickt.

  • pickedByUserId: de picker. Dit veld staat standaard uit; zet het aan met Customize payload. Null wanneer een fulfilmentpartner pickte.

  • sessionId: altijd null bij dit event.

Events van magazijndocumenten

Elk event hieronder heeft een eventId (ondoorzichtig, ontdubbel erop) en occurredAt. De voorbeeldpayload in de editor toont elk veld. Geen enkel event bevat prijzen of kosten.

  • Ontvangsten: receipt/created, receipt/line_received (één event per geboekte ontvangst, met de ontvangen regels) en receipt/completed. Velden zijn onder meer receiptId, receiptNumber, state, warehouseCode, purchaseOrderId, reference, supplierName en totals.

  • Inkooporders: purchase_order/created, purchase_order/sent, purchase_order/received (ook wanneer een dropshiporder wordt afgerekend) en purchase_order/closed (met reason). Velden zijn onder meer purchaseOrderId, purchaseOrderNumber, state, supplierName, expectedOn en aantallen in totals.

  • Tellingen: count/completed (de telling is ingediend) en count/approved, met countId, kind, state en totals zoals getelde regels en regels met een verschil.

  • Containers: container/created, container/moved (met de vorige locatie) en container/emptied (met de doellocatie, regels en aantal).

  • Teamtaken: task/created en task/completed, met taskId, title, status, dueAt en het object waar de taak over gaat.

  • Fulfilment: picklist/assigned (een picklijst is aan een picker gegeven), picklist/cancelled, picklist/batch_created (een batchrun heeft meerdere picklijsten gemaakt; de ids staan erin) en fulfilment/snoozed (een order is gesnoozed of de snooze is opgeheven; snoozed vertelt welke).

  • Overboekingen: transfer/sent, transfer/received (één gebeurtenis per ontvangst op de bestemming, met documentId en de ontvangen lines), transfer/completed en transfer/cancelled. De velden zijn onder meer transferId, transferNumber, state, het van- en naar-magazijn, reference, expectedOn, sentAt, completedAt, shipping (vervoerder, trackingnummer en link, pakketten, gewicht) en de aantallen in totals. Ze horen bij geen enkel verkoopkanaal.

  • Ontvangstgebeurtenissen bevatten nu supplierId als de ontvangst aan een leverancier is gekoppeld. Gebeurtenissen van inkooporders voegen reference, supplierReference, supplierConfirmedAt en partialDeliveryAllowed toe, nog steeds zonder prijzen.

Dubbele events herkennen en de volgorde bewaren

  • Elk event wordt minstens één keer afgeleverd, dus hetzelfde event kan twee keer aankomen. Bewaar de eventId-waarden die u hebt verwerkt en sla een bekende over.

  • Events kunnen in een andere volgorde aankomen. Bewaar voor stock/adjusted de laatste sequence per voorraadartikel en magazijn en negeer een event met een lager getal.

  • Om te starten, of om te herstellen nadat uw endpoint uit de lucht was, leest u de standen met GET /api/v1/stock/levels en vergelijkt u lastSequence. Na een lange onderbreking worden voorraadwijzigingen ouder dan 6 uur niet meer als stock/adjusted gemeld.

Afleverregels

  • Een voorraadevent hoort bij geen verkoopkanaal. stock/adjusted en stock/low gaan naar elke actieve webhook van uw account die het event heeft aangevinkt, ook naar een webhook die op één kanaal is ingesteld.

  • fulfilment/picked volgt het verkoopkanaal van de order, net als fulfilment/packed, en vereist de paktafel op uw account.

  • Een grote stroom voorraadevents, bijvoorbeeld na een import of een volledige telling, wordt over de volgende minuten verspreid. Uw order- en fulfilmentevents lopen daardoor nooit vertraging op.

  • Een gepauzeerde webhook slaat events over; ze worden niet bewaard.

  • De events van ontvangsten, inkooporders, tellingen, containers, teamtaken, fulfilment/snoozed en de inbound-events horen ook bij geen enkel verkoopkanaal. Elke actieve webhook van uw account die ze heeft aangevinkt ontvangt ze, ook een webhook die op één kanaal is ingesteld, en ook als de paktafel uit staat. De ontvanger is het account van wie het magazijndocument is.

  • De picklijst-events volgen het verkoopkanaal van de picklijst, net als picklist/created.

  • Een webhook die minder dan 15 seconden geleden is opgeslagen, kan een event van dat moment missen.

Wanneer een fulfilmentpartner uw voorraad bewaart

Als eigenaar van de voorraad krijgt u een eigen kopie van de voorraadevents voor uw eigen artikelen, zolang de toegang van de partner actief is. De veldnamen zijn gelijk, met deze verschillen:

  • partnerCustomerId is het partnermagazijn en ownerCustomerId is uw eigen account.

  • fromLocationCode, toLocationCode, documentType en documentId zijn altijd null. U ontvangt nooit locaties.

  • De eventId is anders dan die uw partner ontvangt.

  • stock/low komt alleen van uw eigen waarschuwingen bij lage voorraad, nooit van de waarschuwingen van uw partner.

Wanneer neemt u contact op met ons supportteam

Neem contact op met QrX support wanneer voorraadevents niet aankomen terwijl het event is aangevinkt, de webhook actief is en uw endpoint 2xx teruggeeft. Vermeld de naam van de webhook, de SKU, het magazijn en het tijdstip van de voorraadwijziging.

Was dit een antwoord op uw vraag?