Fulfillment Service Items

Service items are extras in the product catalog that represent an additional service performed as part of the fulfillment process. This is often some sort of item preparation or assembly, which this guide uses as its primary example. However, other options such as warranty can be configured in the same manner to offer those services to the shopper as well. 

Shipment Preparation Process

Assembly is supported with the BOPIS and Delivery fulfillment types. In the case of Delivery, the preparation is done as part of the Prepare for Delivery step.


If the customer requests assembly for an item but does not want delivery, then the item is automatically placed into a BOPIS or Pickup shipment. These shipments with assembly items use an altered version of the usual BOPIS process with an Order Preparation step for the service between Validate Stock and Customer Pickup. 

Diagram of the Pickup shipment workflow with transfer steps

Note that when a transfer is created for items that need assembly, only the parent item (the actual product) will be placed in the transfer shipment. Service items will remain on the parent shipment, as the end fulfillment location will always be the one performing the service instead of the location supplying the transfer items.

Storefront Options

When the shopper is browsing the storefront, they are able to select Assembly from the product details page for any product that has been configured with the assembly product extra.

KCCP cannot run promotions on extras, so it is recommended to set up separate products in the catalog for service items. This allows the preparation fees to be set as the unit price and any promotions or pricelists to be applied. Custom logic will then be required to display these items as part of the physical product, rather than separate items.

Example of a product page on the storefront

Configure Order Preparation

To configure, you  must first create a product type for it and then apply that to your physical products as an extra. 

Create Product Type

For each preparation service that you want to offer, add a new product type in the schema:

  1. Go to System > Schema > Product Types.
  2. Click Create New Product Type.
  3. Give this product type the name of the service, such as "Assembly."
  4. Under Advanced at the bottom of the page, select This product type is for service items.
  5. Click Save.

Close-up of Advanced product type options with

It is also recommended to select an option for handling rejected shipments before fulfilling preparation orders. The below site setting determines whether a rejected shipment is cancelled or sent to the Customer Care state.

  1. Go to System > Settings > General.
  2. Expand the dropdown menu for Action on BOPIS Reject.
  3. Select either Cancel or Customer Care.
  4. Click Save.

Close-up of the Action on BOPIS Reject configuration with Customer Care and Cancel options

Create Product Extra

First, create the extra:

  1. Go to Settings > Schema > Product Attributes.
  2. Click Create New Attribute.
  3. Give the extra a label and name, such as Assembly.
  4. Indicate Yes/No (in most preparation cases) for the Input Type.
  5. Set Extra as the Attribute Type.
  6. Enable filtering and sorting on the extra if desired.
  7. Click Save.

The product attribute creation form with Extra selected

Add Extra to Products

Then, apply the extra to applicable products:

  1. Go to Main > Catalog > Products.
  2. Click a product (or click Edit from the dropdown menu on that product in the table).
  3. In the Extras section, click Add Extra and select the preparation option.
  4. Apply any additional fields as needed, such as requiring a shopper to select preparation for this product.
  5. Click Save.

The Assembly attribute options with an Extra Cost field

Fulfillment Example

Assembly-only shipments do not have their own table. Instead, they are accessible through the Order Preparation and Prepare for Delivery steps of the BOPIS or Delivery shipment list.

Close-up of the Pickup shipment table with an Order Preparation step

When viewing shipment details, the service items are listed as line items in the shipment alongside their parent products. However, they will not require any stock to be confirmed during the Validate Items in Stock step, as they are non-physical items that are automatically validated.

Example of a Delivery shipment details

The Order Preparation step of a BOPIS shipment with assembly prompts you to prepare the order by assembling the parent item(s). This step in the FFUI will prompt you to assemble the product(s). When Assembly Completed is checked and you click Ready for Pickup, the order will enter the Customer Pickup step to complete fulfillment.

Close-up of the Assembly Completed confirmation and Ready for Pickup button

If the shipment includes both regular and assembly items and is in the Wait For Transfer step prior to Order Preparation, you can choose to offer a partial pickup:

  • If regular items are in stock and assembly items are not, the regular items can be partially picked up just like standard BOPIS shipments.
  • If any assembly items are in stock and you would like to move them to Order Preparation so that they can be picked up, you can click "Split for Order Preparation." This will split the in stock assembly items to a new shipment in the Order Preparation step. You can still perform a partial pickup on the parent shipment for any regular items that may also be in stock.

A shipment in the Waiting for Transfer step with an arrow pointing to the Split For Order Preparation button

Cancelling and Refunding Service Items

If the physical product is cancelled, then its associated service items will be automatically cancelled as well. When performing a refund on a return in the Fulfiller UI, amounts can be refunded for the service fees as line items.

The Refund for Return module with a product selected

API Integration

In the API, service items have attributes that indicate them as non-physical and what actual products they apply to in a parent-child relationship. This relationship determines the grouping of items within shipments to ensure that the shopper's requested services are being associated with the correct physical products.

In the item object payloads of Commerce APIs, the goodsType field indicates that the order item is a service item when set to the value "service". Assembly service items also need the additional attribute to be set:

  • parentItemId: The product that is being assembled.

While the physical parent item requiring assembly has the following attributes:

  • isAssemblyRequired: Indicates whether the item requires assembly.
  • childItemIds: The ID of the assembly service item.

The Carts and Checkouts APIs include this information in the cart and order information to support the shopper's selections when placing their order. The Orders and Shipments APIs also support these values in their item data for order management and fulfillment.