Octibiz
Demo

Durchsucht Website und Dokumentation gemeinsam. Enter zeigt alle Treffer, Esc schließt.

Lagerverwaltung (WMS) — API und MCP

Überblick

Dieser Bereich stellt 34 Operationen bereit. Jede davon ist zugleich ein MCP-Werkzeug.

Der Bereich hängt am Modul-Schalter module.wms. Ist das Modul aus, antworten diese Operationen mit 404.

Operationen

MethodePfadZweckRechtParameter
GET/api/v1/wms/clarification-casesListe der ClarificationCasewms.pick.viewpage, status, reason, orderId
GET/api/v1/wms/clarification-cases/{ulid}Eine ClarificationCase lesenwms.pick.viewulid
POST/api/v1/wms/clarification-cases/{ulid}/resolveKlärfall abschließen — Payload {resolution} — wie der Fall aufgelöst wurde. Einmalig: ein zweiter Aufruf wäre eine stille Überschreibung der Begründung.wms.pick.manageulid, + Rumpf
GET/api/v1/wms/pack-sessionsListe der PackSessionwms.pack.execute · wms.pick.viewpage, status, orderId
POST/api/v1/wms/pack-sessions/identifyPackvorgang über einen Scan finden oder öffnen — Payload {scan} — Auftragsnummer oder Picklisten-Nummer, so wie sie auf dem Zettel steht. Idempotent: ein zweiter Scan derselben Sendung liefert denselben offenen Vorgang. Eine Sammel-Pickliste mit mehreren Aufträgen ist mehrdeutig und antwortet 409 statt zu raten.wms.pack.execute+ Rumpf
GET/api/v1/wms/pack-sessions/{ulid}Eine PackSession lesenwms.pack.execute · wms.pick.viewulid
POST/api/v1/wms/pack-sessions/{ulid}/cancelCancel pack session — Cancel pack session. Dedicated action endpoint — not a standard CRUD create.wms.pack.executeulid, + Rumpf
POST/api/v1/wms/pack-sessions/{ulid}/completePackvorgang abschließen — Lieferschein und Etikett — Payload {carrierPluginKey?, service?, allowPartial?}. Erzeugt den Lieferschein aus den GESCANNTEN Mengen, meldet ihn kommissioniert und versendet ihn (das kauft das Etikett). Unvollständig gescannt wird abgewiesen, sofern nicht allowPartial gesetzt ist — der halb gefüllte Karton ist genau der Fall, den der Packtisch verhindern soll.wms.pack.executeulid, + Rumpf
POST/api/v1/wms/pack-sessions/{ulid}/confirmWare ohne Barcode bestätigen — Payload {itemUlid, qty?, reason} (Befund R47-146). Lose Ware, Eigenfertigung und Kleinteile tragen keine EAN und keine aufgedruckte Artikelnummer — bis dahin blockierte so eine Position den Tisch vollständig. Der Ausweg ist nicht ein aufgeweichter Scan-Zwang, sondern eine BENENNBARE Ausnahme: reason ist Pflicht (leer → 422), die bestätigte Menge zählt für die Vollständigkeit voll mit, bleibt aber als eigene Zahl (qtyConfirmed) neben der gescannten stehen. Ohne qty wird die gesamte offene Menge der Position bestätigt. Eigenes Recht wms.pack.confirm: wer am Scan vorbei darf, ist eine betriebliche Entscheidung.wms.pack.confirmulid, + Rumpf
POST/api/v1/wms/pack-sessions/{ulid}/packagesPackstück hinzufügen (Mehrpaket) — Payload {weightGrams?, packagingCode?, lengthMm?, widthMm?, heightMm?, workplaceKey?, carrierPluginKey?}. Das Gewicht folgt der dreistufigen Wiegepflicht (wms.weighing.mode): bei required ist es Pflicht (sonst 422), bei prefill springt eine stabile Wägung des Arbeitsplatzes ein, sonst das Rechengewicht aus den Artikelgewichten plus Zuschlag; bei none wird nur gerechnet. Ein eingegebener Wert gewinnt immer. Ohne Gewicht nimmt kein Dienstleister eine Label-Anfrage an — deshalb steht am Ende immer eine positive Zahl. carrierPluginKey ist die Wahl am Tisch (Befund R48-042): sie wird am Vorgang gemerkt, und ein Packstück über dem Höchstgewicht des Dienstleisters (maxPackageWeightGrams) wird schon hier mit 422 abgewiesen statt erst beim Etiketten-Kauf — am offenen Karton lässt es sich noch teilen.wms.pack.executeulid, + Rumpf
GET/api/v1/wms/pack-sessions/{ulid}/scaleLive-Gewicht des Arbeitsplatzes — Query workplaceKey. Liefert {weighingMode, scaleAvailable, scaleWeightGrams, scaleStable, computedWeightGrams} — die Grundlage der Anzeige am Packtisch. Ohne angebundene Waage bleiben die Waagen-Felder leer und das Rechengewicht trägt die Vorbelegung; die dreistufige Wiegepflicht bleibt vollständig bedienbar.wms.pack.executeulid, workplaceKey
POST/api/v1/wms/pack-sessions/{ulid}/scanArtikel in den Karton scannen — oder ein Kommando ausführen — Payload {code, qty?, serial?}. Der Code darf Artikelnummer, EAN oder Gebinde-EAN sein — ein Gebinde-Scan bucht seinen Inhalt (n Stück mit einem Scan). Ware, die nicht zum Auftrag gehört oder dessen Position schon voll ist, antwortet 422: genau diesen Fehlgriff soll der Packtisch fangen. serial ist die Seriennummer des Stücks (Befund R47-001); sie geht mit auf den Lieferschein und von dort in die Warenausgangsbuchung — ohne sie ist ein seriengeführter Artikel nicht versendbar. Eine Nummer steht für genau EIN Stück, schliesst also den Gebinde-Scan aus (422). Beginnt der Code mit dem Kommando-Präfix (wms.scan.command_prefix, Standard ##), ist er ein Barcode-Kommando (Befund R47-145) und wird ausgeführt statt gebucht: ##add-package, ##complete, ##complete-partial, ##cancel, ##confirm. Der ausgeführte Befehl steht in der Antwort unter lastCommand; ##confirm führt selbst nichts aus, sondern öffnet den Bestätigungs-Handgriff.wms.pack.executeulid, + Rumpf
GET/api/v1/wms/pick-list-templatesListe der PickListTemplatewms.pick.view · wms.config.managepage, active, type
POST/api/v1/wms/pick-list-templatesEine PickListTemplate anlegenwms.config.manage+ Rumpf
DELETE/api/v1/wms/pick-list-templates/{ulid}Eine PickListTemplate löschenwms.config.manageulid
GET/api/v1/wms/pick-list-templates/{ulid}Eine PickListTemplate lesenwms.pick.view · wms.config.manageulid
PATCH/api/v1/wms/pick-list-templates/{ulid}Eine PickListTemplate ändernwms.config.manageulid, + Rumpf
GET/api/v1/wms/pick-list-templates/{ulid}/previewWelche Aufträge greift diese Vorlage gerade? — Liefert die Auftrags-Auswahl in genau der Reihenfolge, in der sie auf eine Liste käme — ohne etwas anzulegen und ohne Aufträge zu binden. Bereits verplante Aufträge sind gekennzeichnet. Die Vorschau ist auf 200 Zeilen gedeckelt; ist sie gekürzt, meldet das matchingOrdersTruncated.wms.pick.view · wms.config.manageulid
GET/api/v1/wms/pick-listsListe der PickListwms.pick.viewpage, status, open, assignedUserId, q, order[number], order[status], order[createdAt]
POST/api/v1/wms/pick-listsPickliste anlegen — aus einer Vorlage oder aus benannten Aufträgen — Entweder templateUlid (die Vorlage wählt die Aufträge) oder orderUlids (ausdrückliche Auswahl). Ein Auftrag, der bereits auf einer offenen Liste liegt, wird abgewiesen — sonst greifen zwei Läufer nach derselben Ware. Passen zu wenige Aufträge auf die Vorlage, entsteht KEINE Liste (204).wms.pick.manage+ Rumpf
GET/api/v1/wms/pick-lists/{ulid}Eine PickList lesenwms.pick.viewulid
POST/api/v1/wms/pick-lists/{ulid}/add-orderAuftrag auf die Liste nehmen — Haengt einen bestaetigten Auftrag an eine noch bearbeitbare Liste (Nutzlast {orderUlid}). Die bereits geplante Wegfolge bleibt unveraendert; beim Sammel-Pick waechst eine noch unangetastete Aufgabe desselben Artikels, statt eine zweite daneben zu stellen.wms.pick.manageulid, + Rumpf
POST/api/v1/wms/pick-lists/{ulid}/cancelCancel pick list — Cancel pick list. Dedicated action endpoint — not a standard CRUD create.wms.pick.manageulid, + Rumpf
POST/api/v1/wms/pick-lists/{ulid}/pickPosition greifen — Payload {taskUlid, qty, boxCode?, batchRef?, serialRef?, serialRefs?}. Beim rollenden Pick ist boxCode Pflicht und muss zur Box des Auftrags passen — ein Fehlgriff ist kein Tippfehler. Bestand wird hier NICHT gebucht: die Ware liegt danach im Wagen, nicht beim Kunden. Der erfasste Scan endet aber nicht hier (Befund R47-001): serialRefs nimmt mehrere Nummern auf einmal (eine je Stück, aufnehmend statt ersetzend), und der Packtisch übernimmt sie beim Öffnen auf den Karton — von dort gehen sie über den Lieferschein in die Warenausgangsbuchung.wms.pick.executeulid, + Rumpf
GET/api/v1/wms/pick-lists/{ulid}/printPickliste als PDF — Arbeitspapier in Wegfolge: Reihenfolge, Platz, Bezeichnung, Menge, Charge/Serie, Box und eine Abhak-Spalte. Fuer jedes Lager ohne mitlaufendes Scanner-Geraet.wms.pick.viewulid
POST/api/v1/wms/pick-lists/{ulid}/relocate-taskGreifvorgang auf einen Ersatzplatz umhängen — Payload {taskUlid, binCode}. Antwort auf „Platz leer" vor der Fehlmenge. Bestand wird nicht bewegt — die Aufgabe sagt nur, wo gegriffen wird. Vorschläge liefert GET /v1/wms/pick-tasks/{ulid}/alternative-bins.wms.pick.executeulid, + Rumpf
POST/api/v1/wms/pick-lists/{ulid}/remove-orderAuftrag von der Liste nehmen — Payload {orderUlid}. Der Auftrag kehrt in den Pool zurück. Nicht möglich, sobald für ihn bereits etwas gegriffen wurde — die Ware liegt dann schon im Wagen.wms.pick.manageulid, + Rumpf
POST/api/v1/wms/pick-lists/{ulid}/shortageFehlmenge melden — erzeugt einen Klärfall — Payload {taskUlid, reason, note?, countedAtBin?} mit reason ∈ shortage\not_found\damaged\expired\skipped. Die bereits gegriffene Menge bleibt stehen; der Rest wird zum Klärfall. Ein stilles Übergehen gibt es nicht — sonst merkt die Lücke erst der Kunde. countedAtBin ist die tatsächlich am Platz angetroffene Menge: läuft eine permanente Inventur über diesen Platz, ist das ihre Zählung (bei reason=not_found gilt ohne Angabe null). Ohne laufende Zählung bleibt die Angabe folgenlos.wms.pick.executeulid, + Rumpf
GET/api/v1/wms/pick-tasks/{ulid}/alternative-binsWo liegt dieselbe Ware sonst noch? — Plätze mit verortetem Bestand des Artikels, ohne den aktuellen Platz — Greifplätze vor Reserve, danach Wegfolge. Leer, wenn ohne Multilager gearbeitet wird oder nichts verortet ist.wms.pick.executeulid
GET/api/v1/wms/replenishment-tasksListe der ReplenishmentTaskwms.replenishment.viewpage, status, warehouseId
POST/api/v1/wms/replenishment-tasks/generateNachschub-Aufträge aus den Regeln erzeugen — Optionale Nutzlast {warehouseId} grenzt auf ein Lager ein. Erzeugt NUR für platzbezogene Regeln mit vorhandenem Quellplatz; für ein Ziel mit bereits offenem Auftrag entsteht kein zweiter. Antwort: die neu erzeugten Aufträge.wms.replenishment.execute+ Rumpf
GET/api/v1/wms/replenishment-tasks/{ulid}Eine ReplenishmentTask lesenwms.replenishment.viewulid
POST/api/v1/wms/replenishment-tasks/{ulid}/cancelNachschub-Auftrag verwerfen — Payload {note} — warum der Weg nicht gelaufen wird.wms.replenishment.executeulid, + Rumpf
POST/api/v1/wms/replenishment-tasks/{ulid}/confirmUmlagerung per Scan bestätigen — Payload {sourceBinCode, productCode, qty, targetBinCode}. Jeder Scan muss zum Auftrag gehören (422 bei falschem Platz oder falschem Artikel); die Menge darf kleiner, nie größer als die vorgeschlagene sein.wms.replenishment.executeulid, + Rumpf

Zweckangaben, die nicht dem Standardmuster folgen, stammen unverändert aus der Schnittstellen-Beschreibung im Code.

referenz.api-wms · Gilt ab Version 0.5.4