githubEdit

Reservations

A reservation is made after an order has been assigned to a facility. The reservation reserves an existing or future stock for a customer. If no stock is available, the reservation is saved and assigned to the first available stock.

Creating reservations

A reservation is created when an order is placed or a delivery promise is made to a consumer. fulfillmenttools continuously evaluates whether existing reservations can still be fulfilled and redistributes them when necessary.

Stock or expected stock can only be used if it meets all of the following conditions:

  • Stock must be pickable and accessible: Stock must be placed on a pickable location that's not locked. Both inventory traits are enabled by default. Stock without these traits can't be reserved.

  • Valid available until date: Stock must still be valid at the time it's needed. If a stockAvailableUntil date is set, it must be later than the current time (if the order has no desired delivery day) or the order's delivery date. If no value is set, the expiry date is used.

  • Expected stock must arrive before picking starts: Expected stock can only be used if the purchase order's requested date is before the latest possible pick start.

  • Expected stock must not be delayed: Expected stock is only considered if its requested date is in the future. If the date is in the past, the delivery is treated as delayed and excluded.

  • Selection between multiple expected stock entries: If several expected stock entries qualify, the system uses the one with the latest arrival date. This preserves earlier stock for more urgent orders.

Redistributing reservations

After a reservation has been assigned to an (expected) stock, fulfillmenttools continuously ensures that the reservations can still be fulfilled. If reservations can't be fulfilled anymore, fulfillmenttools will try to redistribute them to stock that meets the reservation criteria.

Reservations are always verified and redistributed (if necessary) if there are updates on an (expected) stock. Only time-triggered changes are currently not considered when redistributing reservations.

The system reevaluates reservations whenever stock or expected stock changes, for example, when:

  • Stock is deleted

  • Stock becomes non-pickable or non-accessible: This could mean the stock was relocated within the facility to a location without the pickable or accessible trait.

  • Expected stock arrival date changes: If users are notified of changes to a delivery's arrival date, we recommend adjusting the requested date in the purchase order. This will trigger a check to ensure that all reservations can still be fulfilled.

  • Expected stock quantity changes: If users are notified of changes to the requested items in a delivery, we recommend updating the purchase order to reflect those changes. This will trigger a check to ensure that all reservations can still be fulfilled.

  • A purchase order is canceled

circle-exclamation

Exceptions to automatic reassignment

Reservations aren't automatically moved if:

  • Expected stock becomes delayed: In this case, users are expected to update the requested date of the purchase order via the APIarrow-up-right or cancel the purchase order (via APIarrow-up-right or Backoffice).

  • Stock expires or reaches its available until date: In this case, users are expected to mark expired stock as non-pickable, non-accessible, or delete it completely. This can be done via the stock APIarrow-up-right or Backoffice.

Over-reservations

If no stock is available when a reservation is created, an over-reservation is automatically created. It is automatically assigned once stock meeting the reservation criteria becomes available.

In Backoffice, over-reservations appear alongside all other reservations in the Stock overview view. Facilities with over-reservations show an info icon and tooltip.

circle-info

The order remains available for picking during the defined timeframe. If a short‑pick is reported, the system can re‑route the order or allow a manual reassignment.

Reservation prioritization

When stock becomes available at a facility, reservations are handled in a clear, defined order.

1. Over-reservations (reservations without stock)

These are handled first.

Sorting:

  • Reservations of orders that must be picked earliest

  • Largest reservation quantity (For example, a reservation for 5 items is prioritized over one for 2 items.). This is done to avoid orders being shipped in multiple shipments.

2. Reservations on expected stock

Only applies if expectedStock.generateFromRoutingPlan = true.

Sorting:

  • Earliest availableFrom

  • Largest reservation quantity

circle-info

3. Tie-breaker

If several reservations qualify at the same time, the reservation with the earliest pick start is improved first.

Removing reservations

By default, reservations are automatically removed after the related pick job is closed, aborted, rerouted, or cancelled.

You can change this default with the following options:

Use case examples

Reservation completed without issues (happy path)

A customer places an order online. Physical stock is available, and all conditions are met.

Starting situation

Order

Online order via webshop

Order delivery date

15 February 2026

Stock

50 units, pickable and accessible

Expected stock

0

Stock expiry date

31 March 2026 (after delivery date)

Configuration

Default configuration

Timeline

Timeline
Event
Action

1

The consumer places an order, and it's assigned to a facility. Valid stock is checked.

Stock is pickable, accessible, and valid until 31 March 2026. All conditions met. A reservation is created on the physical stock.

2

Pick job is started

Users begin picking the reserved items.

3

Pick job is closed

Reservations and stock are automatically removed.

Result

The reservation is completed without manual intervention.

Delayed delivery (expected stock)

Starting situation

Order

Online order via webshop

Order delivery date

20 February 2026

Stock

0

Expected stock

Purchase order: 100 units, planned arrival 12 February 2026

Stock expiry date

-

Configuration

Default configuration

Timeline

Timeline
Event
Action

1

Order is received

System finds no physical stock. Expected stock arriving on 12 February qualifies (arrival before pick start). A reservation is placed on the expected stock.

2

Supplier reports delay: new arrival 25 February 2026

The new date is in the future, but now falls after the order's delivery date (20 February). Expected stock is now treated as delayed.

3

Reservation can no longer be fulfilled in time

The reservation on the expected stock is not automatically redistributed. It remains in place but can no longer be fulfilled as-is.

4

User resolves the situation manually

The info icon and tooltip in Backoffice indicate the facility has over-reservations. The user must update the purchase order or adjust the stock manually in Backoffice.

5

Pick job is started and closed

Users begin picking the reserved items. Reservations and stock are automatically removed after the pick job is finished.

circle-exclamation

Result

The reservation is held until the delayed delivery arrives. If it arrives too late, the order's promised delivery date will be missed. To ensure on-time fulfillment, manual intervention is needed.

What should I do as a user?

  • Update the purchase order in the system to reflect the new arrival date.

  • Check whether an alternative source or another facility can fulfill the order.

  • Notify the customer of the delay and update the delivery date if needed.

Over-reservation

Starting situation

Order

Two orders of 10 units each (Order A and Order B)

Order delivery date A

18 February 2026 (earlier)

Order delivery date B

22 February 2026 (later)

Stock

0

Expected stock

0

Stock expiry date

-

Configuration

Default configuration

Timeline

Timeline
Event
Action

1

Both orders are received

No stock available. System creates over-reservations for both orders. These appear in Backoffice with an info icon.

2

New goods receipt: 10 units arrive

System detects available stock. Prioritization begins.

3

System prioritizes over-reservations

Order A has the earlier delivery date and is served first. Order A receives a reservation for the 10 units.

4

Order B remains an over-reservation

No further stock available. Order B remains over-reserved until additional stock arrives.

5

Another new goods receipt: 10 units

Order B is now also assigned stock. Over-reservation is resolved.

6

Pick jobs are started and closed

Users begin picking the reserved items. Reservations and stock are automatically removed after the pick jobs are finished.

Result

Over-reservations are resolved automatically as soon as matching stock becomes available. Priority is based on the earliest delivery date. So, no manual action needed.

What do I see in Backoffice?

  • Facilities with over-reservations show an info icon with a tooltip.

  • Over-reservations appear in the reservations list alongside all other reservations.

  • Once the stock arrives, the over-reservation is automatically resolved.

Using the reservations endpoints

Search reservations

To search for reservations, execute the following POST request with a JSON body:

Reservations actions

The reservation actions endpoint uses the following fields to define its scope:

  • The reservationSelector field selects reservations at a high level, for example, by order.

  • The reservationPredicate field refines the selection made by the reservationSelector. This allows for more granular control, such as removing reservations for only specific line items within an order.

  • The response provides insights into the success of the operations to remove reservations and reduce stock.

Remove reservations and reduce stock

To remove reservations and the corresponding reserved stock, use the REMOVE_RESERVATIONS_REDUCE_STOCKS action.

Execute the following POST request with the specified JSON body:

Remove reservations and keep stock

To remove only the reservations without reducing stock, use the REMOVE_RESERVATIONS_KEEP_STOCKS action. In this transaction, no stock is reduced.

Execute the following POST request with the specified JSON body:

Last updated