Ein bestelltes Einzelstück halten, bis die Bestellung erfüllt oder erledigt istAlle Beiträge

Ein bestelltes Einzelstück halten, bis die Bestellung erfüllt oder erledigt ist

Zwischen Bestellung und Versand liegt die Zeit, in der Einzelstücke doppelt verkauft werden. Dieser Fall zeigt, wie eine Reservierung ein Lagerstück an eine Auftragsposition bindet und wie diese Bindung wieder endet.

Veröffentlicht: 2026-09-12Lesezeit: 4 mintapinomahub API & Prozesse
API & ProzesseLogistik & LagerAutomotive AftermarketAPITeilehandel

Ein Scheinwerfer ist auf zwei Kanälen eingestellt und wird auf einem bestellt. Bis er verpackt ist, vergehen Stunden. Wird er in dieser Zeit auf dem zweiten Kanal ein weiteres Mal bestellt, muss einer der Käufer eine Absage bekommen — und das kostet mehr als nur diesen Verkauf.

Ein bestelltes Einzelstück halten, bis die Bestellung erfüllt oder erledigt istEingang: ein Einzelstück ist bestellt, der Versand steht noch aus 1. Reservieren (POST /commerce/v1/inventory/reservations): stockItemId, salesOrderId und orderLineId, optional expiresAt 2. Stand prüfen (GET /commerce/v1/inventory/reservations/{reservationId}): reservedQuantity, releasedQuantity und consumedQuantity 3. Verbrauchen (POST /commerce/v1/inventory/reservations/{reservationId}/consume): reasonCode fulfilled, wenn die Ware das Haus verlässt 4. Freigeben (POST /commerce/v1/inventory/reservations/{reservationId}/release): reasonCode order_cancelled oder expired, wenn der Kauf nicht zustande kommt 5. Journal lesen (GET /commerce/v1/inventory/ledger): Reservierung, Verbrauch und Freigabe als nachvollziehbare Buchungen Ausgang: eine Reservierung, deren reservierte, freigegebene und verbrauchte Mengen nachvollziehbar sind Verbrauch und Freigabe nehmen Mengen: Eine Reservierung kann teilweise erfüllt und teilweise freigegeben werden.Ein bestelltes Einzelstück halten, bis die Bestellungerfüllt oder erledigt istEingang: ein Einzelstück ist bestellt, der Versand steht noch aus01ReservierenPOST /commerce/v1/inventory/reservationsstockItemId, salesOrderId und orderLineId, optional expiresAt02Stand prüfenGET /commerce/v1/inventory/reservations/{reservationId}reservedQuantity, releasedQuantity und consumedQuantity03VerbrauchenPOST /commerce/v1/inventory/reservations/{reservationId}/consumereasonCode fulfilled, wenn die Ware das Haus verlässt04FreigebenPOST /commerce/v1/inventory/reservations/{reservationId}/releasereasonCode order_cancelled oder expired, wenn der Kauf nicht zustande kommt05Journal lesenGET /commerce/v1/inventory/ledgerReservierung, Verbrauch und Freigabe als nachvollziehbare BuchungenAusgang: eine Reservierung, deren reservierte, freigegebene und verbrauchte Mengen nachvollziehbarsindVerbrauch und Freigabe nehmen Mengen: Eine Reservierung kann teilweise erfüllt und teilweise freigegeben werden.
Fünf Aufrufe von der Bindung bis zur Buchung. Eine Reservierung endet verbraucht, freigegeben oder abgelaufen.

Die Reservierung bindet ein konkretes Lagerstück an eine Auftragsposition. Sie endet verbraucht, wenn die Ware das Haus verlässt, oder freigegeben, wenn der Kauf nicht zustande kommt; state kennt daneben den Wert expired. Beides nimmt Mengen und steht als Buchung im Journal.

FlächeRollen
CommerceTeilehandel, Autoverwerter

Was dieser Fall voraussetzt

  • Ein Auftrag mit Positionen. Die Reservierung verlangt salesOrderId und orderLineId; eine Reservierung ohne Auftrag ist nicht vorgesehen.
  • Ein Lagerstück statt einer Artikelnummer. Reserviert wird ein konkretes Exemplar mit stockItemId.
  • Die aktuelle Revision. Jede Änderung an der Reservierung trägt expectedRevision.
  • Einen Kanal, der Reservierungen trägt. Der Funktionsumfang nennt es je Kanal.

Der Ablauf

Die Tabelle nennt je Stufe den zuständigen Aufruf und das, was danach vorliegt. Die Begründung, warum die Stufe nicht übersprungen werden kann, steht darunter.

Die Aufrufkette dieses Anwendungsfalls
StufeAufrufWas danach vorliegt
ReservierenPOST /commerce/v1/inventory/reservationsstockItemId, salesOrderId und orderLineId, optional expiresAt
Stand prüfenGET /commerce/v1/inventory/reservations/{reservationId}reservedQuantity, releasedQuantity und consumedQuantity
VerbrauchenPOST /commerce/v1/inventory/reservations/{reservationId}/consumereasonCode fulfilled, wenn die Ware das Haus verlässt
FreigebenPOST /commerce/v1/inventory/reservations/{reservationId}/releasereasonCode order_cancelled oder expired, wenn der Kauf nicht zustande kommt
Journal lesenGET /commerce/v1/inventory/ledgerReservierung, Verbrauch und Freigabe als nachvollziehbare Buchungen

Warum jede Stufe nötig ist

  1. Reservieren. POST /commerce/v1/inventory/reservations nimmt stockItemId, quantity, salesOrderId, orderLineId, expectedRevision und optional expiresAt. Ab jetzt ist das Stück an diese Position gebunden; availableQuantity im Bestand wird laut Vertrag unter Berücksichtigung aktiver Reservierungen abgeleitet.
  2. Den Stand prüfen. GET /commerce/v1/inventory/reservations/{reservationId} nennt initialQuantity, reservedQuantity, releasedQuantity, consumedQuantity und state. Bei mehreren Stück zeigt sich hier, wie viel noch gebunden ist.
  3. Verbrauchen. POST /commerce/v1/inventory/reservations/{reservationId}/consume nimmt quantity, reasonCode — beim Versand fulfilled — und expectedRevision. Verbraucht wird, wenn die Ware das Haus verlässt, nicht wenn der Auftrag eingeht.
  4. Freigeben. POST /commerce/v1/inventory/reservations/{reservationId}/release gibt Mengen zurück, etwa mit order_cancelled, order_changed, expired oder manual_review. Eine Reservierung, die nie freigegeben wird, blockiert ein verkäufliches Teil ohne Käufer.
  5. Das Journal lesen. GET /commerce/v1/inventory/ledger führt Reservierung, Verbrauch und Freigabe als Buchungen mit reservationId, quantityDelta und balance. So lässt sich später jede Bewegung eines Einzelstücks erklären.
Eine Reservierung beim Versand verbrauchen
curl -X POST \
  -H 'X-Api-Key: <API_KEY>' \
  -H 'Content-Type: application/json' \
  -H 'Idempotency-Key: reservierung-4711-versand' \
  -d '{"quantity":1,"reasonCode":"fulfilled","expectedRevision":"<revision>"}' \
  'https://commerce-preview.invalid/commerce/v1/inventory/reservations/<reservationId>/consume'

Was am Ende vorliegt

Am Ende zeigen reservedQuantity, releasedQuantity und consumedQuantity, welche Menge noch gebunden, freigegeben oder verbraucht ist, und state nennt den Stand der Reservierung. Ob ein zweiter Käufer das Teil in der Zwischenzeit noch bestellen konnte, hängt davon ab, wie rechtzeitig das Angebot auf dem zweiten Kanal aktualisiert wurde.

Wo das in der Dokumentation steht

Die verbindlichen Feldlisten, Fehlercodes und Beispielantworten stehen im OpenAPI-Vertrag dieser Fläche unter docs.tapinomahub.com (tapinoma-commerce). Alle Anwendungsfälle nach Fläche und Rolle geordnet: Übersicht der Anwendungsfälle.

Quellen und Rechtsgrundlagen

Häufige Fragen

Kann ich ohne Auftrag reservieren?

Nein. Die Reservierung verlangt salesOrderId und orderLineId; sie bindet ein Stück an eine konkrete Auftragsposition.

Wann verbrauche ich die Reservierung?

Wenn die Ware das Haus verlässt, mit reasonCode fulfilled. Der Auftragseingang allein ist noch kein Verbrauch.

Kann ich eine Reservierung teilweise freigeben?

Ja. Verbrauch und Freigabe nehmen Mengen; der Stand zeigt, wie viel reserviert, freigegeben und verbraucht ist.