Skip to main content
The Fulfilment tab with the Fulfillment fields card above the Buffer time card

Inventory > Stock Items > [Item] > Fulfilment

Open in TWICE Admin

inventory/stock-items
The Fulfilment tab on a stock item holds two settings that meet at the moment an item is handed over. Buffer time keeps a gap around each booking, so a wetsuit gets rinsed and a bike gets serviced before it goes out again. A fulfillment field is something staff fill in on the order while fulfilling it: a fitting number, a lock code, a meter reading. Read the two sections below before you set a buffer. It does less than most people assume.

Prerequisites

Required permissions:
  • inventory:attribute:create and inventory:attribute:manage to define a fulfillment field
  • inventory:stock_item_fulfilment:manage for buffer time and fulfillment fields on a stock item
  • inventory:sku_general:manage for the same on a SKU, where they act as the default
  • orders:order_summary:manage to enter a value on an order
  • catalog:listing_limits:manage for the listing’s Limits tab, which you need for the storefront half
All four system roles hold all of these.
Before you start, decide:
  • SKU default or item override? Buffer time set on the SKU applies to every linked item that has not overridden it. Set it on the SKU unless one particular unit needs longer.
  • Before, after, or both. They are separate settings and they mean different things.
  • Which fields staff actually need at handover. Every field you add is a field someone reads past on every order.
  • Whether customers must be stopped from booking too soon. If so, buffer time is not enough on its own, as the next section explains.

What buffer time actually does

Buffer time has two halves, set independently: Enter both as an amount plus a unit: minutes, hours, days, and so on. Read both as padding around every existing booking. A new booking conflicts with an existing one if it would land inside that padding, and the gap between two consecutive bookings on the same unit has to hold the earlier one’s trailing pad plus the later one’s leading pad. The two pads do not overlap or double-count. This part works on the storefront. The availability your customers see already accounts for buffers around existing bookings, so a slot too close to another booking is not offered.

What buffer time does not do

Buffer time does not stop a customer from booking a start that is too soon from now.A one-hour “before each booking” buffer does not remove the next hour from the storefront’s selectable times. The customer can pick a start ten minutes away, and the calendar will show it as valid. The booking is then rejected, either when the selection is validated, or at checkout, where the pay button stays disabled.
Treat the two cases as genuinely different:
  • Buffer against an existing booking is a property of that booking, so it can be drawn on the calendar in advance.
  • Buffer as lead time from now is a moving target measured against the current moment. TWICE Commerce deliberately does not fold it into the item’s stored availability, so nothing in the rendered calendar marks those starts as unbookable. It is checked when a selection is validated and again when the order is created.
Expect the shape merchants report: a time that looks bookable, a customer who picks it, and a failure at the end of the flow rather than the start.

Pair it with the listing’s order deadline

The storefront-side control lives on the listing, not the stock item. Open the listing, go to its Limits tab, and set Orders must be placed at latest. Unlike buffer time, the order deadline is compiled into the availability the storefront renders: a booking cannot start inside the deadline window, so those times stop being offered in the first place.
Set the order deadline to at least your longest “before each booking” buffer for that item. The buffer keeps your operation honest; the order deadline is what the customer’s calendar obeys.
Set the three other rules on the listing’s Limits tab deliberately alongside a buffer:
Listing Limits tab showing minimum and maximum booking duration, increment, and order deadline

Catalog > Listings > [Listing] > Limits

Read more: Listing Limits covers each one in full, including the order deadline’s two modes: a fixed offset before the start, or a wall-clock cutoff on an earlier day.
Testing this in the admin will not reproduce it. The lead-time check applies only to anonymous storefront shoppers. Staff, API keys, and signed-in tokens are exempt by design, so an order you create yourself in the admin will go through on a start time a customer would be refused. Test it on the storefront, in a private window.

The walkthrough

1

Decide where the buffer belongs

Open Inventory → SKUs, pick the SKU, and use its Fulfilment tab if the buffer is a property of the product, which covers most cases. Use an individual item’s Fulfilment tab only when one unit genuinely differs.
2

Set the buffer

Set Before each booking and After each booking in the Buffer time card.Expect the pickers to start disabled on a stock item linked to a SKU, showing the inherited values. Choose to override to edit them, or Use the SKU default to go back to inheriting. An inherited value is marked Inherited from SKU.
3

Clear any bookings the new buffer would not fit

Note that widening a buffer can overlap bookings already on the calendar. TWICE Commerce checks before saving and, if it finds any, opens a dialog headed Increasing buffer time would overlap booking, listing each one with a View order link.Choose Save anyway to apply the new buffer while leaving those bookings on their current buffer, or cancel and adjust the dates first.
4

Define the fulfillment fields

Go to Settings → Attributes & Tags, open Fulfillment fields, and add one field per thing staff record at handover. Name it as a picker would read it, pick the format, and tick Required where it is meant to be filled in.Tick Save as global attribute for a field that applies to every stock item, such as a handover signature. A global field needs no attaching, so skip the next step for it.
5

Attach each field where it applies

Open the SKU’s Fulfilment tab and press Add fields to attach a field to every stock item under that SKU. Attach it on a single item’s Fulfilment tab instead when only that unit needs it.Enter a value here to give the field a starting value that the order inherits. Leave it empty for something staff record per order.
6

Set the matching listing limits

If customers book this item online, open the listing in Catalog → Listings, go to Limits, and set Orders must be placed at latest to cover your preparation buffer. Review the duration limits while you are there.

How do I know it worked?

Buffer time: open the item’s Events tab and look at the timeline around an existing booking. Check the storefront next: dates immediately after that booking should no longer be selectable. Order deadline: on the storefront, try to select a start inside the deadline window. It should not be offered at all. If it is offered and only fails later, the deadline is not set on that listing, and the buffer alone cannot do this. Fulfillment fields: open an order with the item assigned. Check the Fulfillment details column beside the stock item: every field you attached is listed, carrying the value you set on the SKU or item. Type over one and reopen the order, and the new value is there, with the value it replaced shown on hover.

Troubleshooting / common pitfalls

Cause: the item’s preparation buffer was the only rule in place. It rejects a too-soon start but does not remove it from the calendar.What to do: set Orders must be placed at latest on the listing’s Limits tab, at least as long as the buffer. That is the setting the storefront calendar obeys.
Cause: the lead-time check runs only for anonymous public storefront requests. Staff sessions, API keys and tokens skip it deliberately, so that a member of staff can always take a last-minute booking over the counter.What to do: reproduce it on the public storefront in a private window, not in the admin.
Cause: the item is still inheriting from its SKU, or you set it on the SKU while the item carries its own override. An item-level value always wins.What to do: check the card for Inherited from SKU. Use Use the SKU default to drop an override and let the SKU govern.
When this happens: the new buffer will not fit around bookings already on the calendar.What to do: Save anyway applies the buffer going forward and leaves those bookings on their existing buffer, which is usually what you want. Use View order on each to check them if the turnaround genuinely cannot be met, and move the dates instead.
Cause: the field is attached to neither the assigned stock item nor its SKU, and it is not global. Only attached fields reach an order, and a line item with no unit assigned yet shows none of them.What to do: attach it on the SKU’s Fulfilment tab so every linked item carries it, or mark it as a global field in Settings → Attributes & Tags. Assign a unit to the line item first if it has none.
When this happens: a fulfillment field is not an inventory attribute. It has no column in the Stock Items table, so there is nothing to filter, sort or bulk-edit by.What to do: use an attribute for anything you need to work through stock by, such as a storage area. Attributes do become filterable, sortable columns.
Cause: buffer time is excluded from bulk editing. The card reads Buffer time cannot be edited for multiple items.What to do: set it on the shared SKU, which reaches every linked item at once.Read more: How to bulk-edit stock items

Attributes & Tags

Where fulfillment fields are defined, beside attributes and tags.

Listing limits

The storefront half: durations, increments, and the order deadline.

Availability

Every layer that decides whether a slot can be booked.

Stock item fulfilment

What else the Fulfilment tab carries.