Bestands- und Lager-Webhooks
QrX kann Ihrem eigenen System melden, wenn sich Bestand ändert, wenn ein Artikel knapp wird und wenn eine Bestellung gepickt ist.
QrX kann Ihr System auch über Lagerdokumente informieren: Wareneingänge, Bestellungen, Inventuren, Ladungsträger, Teamaufgaben und weitere Events zu Picklisten und Bestellungen. Siehe "Events zu Lagerdokumenten" unten.
Dieser Artikel richtet sich an Entwickler. Er behandelt die Ereignisse stock/adjusted, stock/low und fulfilment/picked. Zu Signaturen, Wiederholungen und Zustellprotokollen siehe "Webhooks und API-Schlüssel in PortalX" und "Schnellstart für Entwickler: QrX Public API und Webhooks".
Die Ereignisse abonnieren
Gehen Sie zu Settings > Advanced > Webhooks und öffnen oder erstellen Sie einen Webhook.
Öffnen Sie in der Ereignisliste die Gruppe Bestand und haken Sie
stock/adjustedundstock/lowan.Öffnen Sie die Gruppe Fulfillment und haken Sie
fulfilment/pickedan.Die Beispiel-Payload jedes Ereignisses zeigt ein vollständiges Beispiel. Mit Customize payload wählen Sie die gesendeten Felder.
Für Lagerdokumente öffnen Sie die Gruppen Wareneingänge, Bestellungen, Inventuren, Ladungsträger, Teamaufgaben und Umlagerungen und haken die benötigten Events an. Die zusätzlichen Events zu Picklisten und Bestellungen finden Sie in der Gruppe Fulfillment.
Speichern Sie den Webhook.
Über die API fügen Sie dieselben Ereignisnamen zu eventTypes in POST /api/v1/webhooks hinzu. Für die Bestandsereignisse benötigen Sie den QrX-Lagerbestand in Ihrem Konto oder Bestand, den ein Fulfillment-Partner für Sie lagert.
stock/adjusted
Gesendet, wenn sich der Bestand eines Artikels in einem Lager ändert: ein Wareneingang, ein Pick, ein Versand, eine Retoure, eine Inventur, eine Umlagerung im Lager oder eine Korrektur. Sie erhalten ein Ereignis pro Bestandsartikel, Lager und Vorgang, nie eines pro Scan. Eine Änderung wird etwa eine Minute nach der Buchung gemeldet.
{
"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: der Schlüssel zum Erkennen von Duplikaten. Behandeln Sie ihn als undurchsichtigen Text; zerlegen Sie ihn nicht.sequence: eine Zahl, die pro Artikel und Lager immer steigt. Sie entsprichtlastSequencevonGET /api/v1/stock/levelsdirekt nach der Bewegung.movementId,occurredAt: die neueste Bestandsbewegung im Ereignis und ihr Zeitpunkt (UTC).ownerCustomerId: der Händler, für den der Bestand gelagert wird; null bei Ihrem eigenen Bestand.partnerCustomerId: null, außer in der unten beschriebenen Kopie für den Eigentümer.fromLocationCode,toLocationCode: der Lagerplatz, den die Einheiten verlassen und erreicht haben. Null bedeutet außerhalb des Bestands (Lieferant, Kunde, Korrektur) oder mehrere Lagerplätze in einem Ereignis.reason: zum Beispielreceived,putaway,moved,adjusted,shipped,returned,scrapped,blocked,unblocked. Behandeln Sie einen unbekannten Wert als allgemeine Bewegung.documentType,documentId,movementCount: der Bestandsbeleg hinter der Änderung und wie viele Bewegungen das Ereignis zusammenfasst.quantity: bewegte Einheiten.delta: Änderung des vorhandenen Bestands in diesem Lager; 0 bei einer Umlagerung, einem Pick oder einer Einlagerung innerhalb des Lagers.onHand,sellable,available: der Stand des Artikels in diesem Lager direkt nach der Bewegung.
stock/low
Einmal gesendet, jedes Mal wenn ein Artikel auf seinen Warnbestand oder darunter sinkt, im selben Moment wie die Glocken-Benachrichtigung. Es wird nicht wiederholt, solange der Artikel niedrig bleibt. Siehe "Warnmeldungen bei niedrigem Lagerbestand" zum Einrichten einer Warnung.
{
"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: die Warnung.crossing: zählt die Warnungen dieser Regel (1, 2, 3 und so weiter).warehouseId,warehouseCode: null, wenn die Warnung alle Lager zusammen zählt.threshold: der Warnbestand.available: die verfügbare Menge, als die Warnung auslöste.
fulfilment/picked
Einmal pro Bestellung gesendet, wenn das Picken auf dem Handy abgeschlossen ist: Sobald der Picker die Pickliste in der QrX-App abschließt, erhält jede Bestellung auf dieser Pickliste ein Ereignis. Eine Pickliste auf Papier, oder eine, die nur am Bildschirm bearbeitet wird, sendet es nicht: Für diese Bestellungen ist fulfilment/packed das erste Ereignis.
{
"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: die Bestellung, wie infulfilment/packed.picklistId: die Pickliste. Null, wenn ein Fulfillment-Partner die Bestellung für Sie gepickt hat.pickedAt: wann die Pickliste abgeschlossen wurde.hasShorts: true, wenn mindestens eine Zeile dieser Bestellung zu wenig gepickt wurde.pickedByUserId: der Picker. Das Feld ist standardmäßig aus; schalten Sie es mit Customize payload ein. Null, wenn ein Fulfillment-Partner gepickt hat.sessionId: bei diesem Ereignis immer null.
Events zu Lagerdokumenten
Jedes Event unten hat eine eventId (undurchsichtig, deduplizieren Sie darauf) und occurredAt. Die Beispiel-Payload im Editor zeigt jedes Feld. Kein Event enthält Preise oder Kosten.
Wareneingänge:
receipt/created,receipt/line_received(ein Event pro gebuchter Annahme, mit den angenommenen Positionen) undreceipt/completed. Felder sind unter anderemreceiptId,receiptNumber,state,warehouseCode,purchaseOrderId,reference,supplierNameundtotals.Bestellungen:
purchase_order/created,purchase_order/sent,purchase_order/received(auch wenn eine Dropship-Bestellung abgerechnet wird) undpurchase_order/closed(mitreason). Felder sind unter anderempurchaseOrderId,purchaseOrderNumber,state,supplierName,expectedOnund Mengen intotals.Inventuren:
count/completed(die Inventur wurde eingereicht) undcount/approved, mitcountId,kind,stateundtotalswie gezählte Positionen und Positionen mit Differenz.Ladungsträger:
container/created,container/moved(mit dem vorherigen Lagerplatz) undcontainer/emptied(mit Ziel-Lagerplatz, Positionen und Menge).Teamaufgaben:
task/createdundtask/completed, mittaskId,title,status,dueAtund dem Objekt, um das es in der Aufgabe geht.Fulfillment:
picklist/assigned(eine Pickliste wurde einem Picker zugewiesen),picklist/cancelled,picklist/batch_created(ein Batch-Lauf hat mehrere Picklisten erstellt; ihre IDs stehen darin) undfulfilment/snoozed(eine Bestellung wurde zurückgestellt oder die Zurückstellung aufgehoben;snoozedsagt, was zutrifft).Umlagerungen:
transfer/sent,transfer/received(ein Ereignis pro Wareneingang am Ziel, mitdocumentIdund den empfangenenlines),transfer/completedundtransfer/cancelled. Die Felder umfassentransferId,transferNumber,state, das Von- und Nach-Lager,reference,expectedOn,sentAt,completedAt,shipping(Versanddienstleister, Sendungsnummer und Link, Packstücke, Gewicht) und die Mengen-totals. Sie gehören zu keinem Verkaufskanal.Wareneingangsereignisse enthalten jetzt
supplierId, wenn der Wareneingang mit einem Lieferanten verknüpft ist. Bestellereignisse ergänzenreference,supplierReference,supplierConfirmedAtundpartialDeliveryAllowed, weiterhin ohne Preise.
Duplikate erkennen und die Reihenfolge wahren
Jedes Ereignis wird mindestens einmal zugestellt, dasselbe Ereignis kann also zweimal ankommen. Speichern Sie die verarbeiteten
eventId-Werte und überspringen Sie einen bekannten.Ereignisse können in anderer Reihenfolge ankommen. Speichern Sie für
stock/adjusteddie letztesequencepro Bestandsartikel und Lager und ignorieren Sie ein Ereignis mit einer niedrigeren Zahl.Zum Start oder zur Wiederherstellung nach einem Ausfall Ihres Endpunkts lesen Sie die Stände mit
GET /api/v1/stock/levelsund vergleichenlastSequence. Nach einer langen Unterbrechung werden Bestandsänderungen, die älter als 6 Stunden sind, nicht mehr alsstock/adjustedgemeldet.
Zustellregeln
Ein Bestandsereignis gehört zu keinem Vertriebskanal.
stock/adjustedundstock/lowgehen an jeden aktiven Webhook Ihres Kontos, der das Ereignis angehakt hat, auch an einen Webhook, der auf einen Kanal eingestellt ist.fulfilment/pickedfolgt dem Vertriebskanal der Bestellung, wiefulfilment/packed, und erfordert die Packstation in Ihrem Konto.Eine große Menge an Bestandsereignissen, zum Beispiel nach einem Import oder einer vollständigen Inventur, wird über die folgenden Minuten verteilt. Ihre Bestell- und Fulfillment-Ereignisse werden dadurch nie verzögert.
Ein pausierter Webhook überspringt Ereignisse; sie werden nicht aufbewahrt.
Die Events zu Wareneingängen, Bestellungen, Inventuren, Ladungsträgern, Teamaufgaben,
fulfilment/snoozedund die Inbound-Events gehören ebenfalls zu keinem Verkaufskanal. Jeder aktive Webhook Ihres Kontos, der sie angehakt hat, erhält sie, auch ein Webhook, der auf einen Kanal eingestellt ist, und auch wenn die Packstation aus ist. Empfänger ist das Konto, dem das Lagerdokument gehört.Die Picklisten-Events folgen dem Verkaufskanal der Pickliste, wie
picklist/created.Ein Webhook, der vor weniger als 15 Sekunden gespeichert wurde, kann ein Event aus diesem Moment verpassen.
Wenn ein Fulfillment-Partner Ihren Bestand lagert
Als Eigentümer des Bestands erhalten Sie eine eigene Kopie der Bestandsereignisse für Ihre eigenen Artikel, solange der Zugriff des Partners aktiv ist. Die Feldnamen sind gleich, mit diesen Unterschieden:
partnerCustomerIdist das Partnerlager undownerCustomerIdist Ihr eigenes Konto.fromLocationCode,toLocationCode,documentTypeunddocumentIdsind immer null. Sie erhalten nie Lagerplätze.Die
eventIdunterscheidet sich von der, die Ihr Partner erhält.stock/lowkommt nur von Ihren eigenen Warnungen bei niedrigem Lagerbestand, nie von den Warnungen Ihres Partners.
Wann Sie unser Support-Team kontaktieren sollten
Kontaktieren Sie den QrX-Support, wenn Bestandsereignisse nicht ankommen, obwohl das Ereignis angehakt ist, der Webhook aktiv ist und Ihr Endpunkt 2xx zurückgibt. Nennen Sie den Namen des Webhooks, die SKU, das Lager und den Zeitpunkt der Bestandsänderung.
