Preparation and Delivery

The Kibo Composable Commerce Platform (KCCP) enables shoppers to select preparation and delivery services for their products when placing an order, in which the fulfillment location will prepare and/or personally deliver a product from the store to the customer.

A common preparation service is assembly, which this guide uses as its example. However, other options such as warranty can be configured in the same manner to offer those services to the shopper as well.

Preparation and delivery are created as "service items." These service items can be bundled with other service items and digital products.

Enabling Services

For each preparation and delivery 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" or "Delivery."
  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 and delivery orders. The below site setting determines whether a rejected BOPIS or Delivery 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

Configuring Preparation

Preparation services should also be set up as a regular product extra on the physical product that preparation is supported for.

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

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

Configuring Delivery

Delivery fulfillment must be configured at both the product and location level. Fulfillment locations that offer this service must have the Delivery fulfillment type enabled:

  1. Go to Main > Orders > Locations.
  2. Click a location (or click Edit from the dropdown menu on that location in the table).
  3. From the Fulfillment Types drop-down menu, select Delivery.
  4. Click Save.

The Fulfillment Types configuration with In Store Pickup, Direct Ship, and Delivery selected

In order for a product to be purchased for delivery, that fulfillment option must also be available for the product in the catalog. To enable this option for a specific product:

  1. Go to Main > Catalog > Products.
  2. Click the product that will allow delivery (or click Edit from the dropdown menu on that product in the table).
  3. Under the Shipping section, check Delivery.
  4. Click Save.

Close-up of Shipping settings with Direct Ship, In Store Pickup, and Delivery toggles enabled

Configuring Fees and Promotions

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 and delivery 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.

Additionally, KCCP only supports displaying one delivery fee at the order level. If delivery is configured as a product in the catalog and the shopper requests multiple delivery products, then it will require custom code to sum up the individual fees and display the total for the order in the Admin UI.

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 as well as an optional delivery service item, if applicable.

In the case of delivery, an item's fulfillmentMethod will be set to "delivery" and include the below parameters:

  • deliveryInstructions: Instructions that are provided by the customer during checkout, such as gate code.
  • expectedDeliveryDate: The date that delivery is expected to be performed. KCCP does not automatically calculate this date; it must be populated by either the fulfiller or custom coding.

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

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.

Example of a product page on the storefront

The shopper can opt into delivery from the cart page during checkout when selecting a fulfillment method. They will be prompted to select their store location.

Example of a product in the cart with Ship Items, In-Store Pickup, and Delivery options

Note that if the shopper selects preparation for a product, they will only be able to pick in-store pickup or delivery for their order rather than shipping.

Note that multiship, or shipping to multiple addresses, is not supported for Delivery. If an order consists of two shipments, STH and Delivery, then the STH items can go to different fulfillment addresses but all Delivery items will only go to one address.


Once the order is placed, all items that require delivery (including items with both assembly and delivery as well as delivery-only items) will be grouped into a shipment of the Delivery fulfillment type.

Preparation-only items that the shopper did not request delivery for will be fulfilled through customer pickup.

Shipment Processes

The Delivery process includes a Delivery Preparation step (in which assembly is performed if applicable) and Provide to Customer to deliver the shipment. Transfer shipments are supported if the location does not have enough inventory in stock.

Diagram of the Delivery shipment workflow with transfer steps

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 between Validate Stock and Customer Pickup.

Diagram of the Pickup shipment workflow with transfer steps

While the steps in both of these BPMs are based on existing processes, there are some differences depending on whether the shipment requires assembly or delivery:

  • Accept Shipment: The order has been accepted and is ready to be sent through fulfillment.
  • Print Pick List: The pick list is generated for store associates to collect shipment items.
  • Validate Items in Stock: The associate must confirm whether all items were available for picking. In Delivery shipments, when the store indicates that the items have been picked then an email notification is sent to the customer informing them that the store will be calling to schedule a delivery date. If some stock was not available, then the Transfer shipment process would be followed first.
  • Order / Delivery Preparation: All items are at the fulfillment location and are either being assembled or are ready for a delivery to be scheduled. In Delivery shipments, the customer is charged for the order when the shipment enters this step.
  • Customer Pickup / Provide to Customer: The shipment is ready to be picked up by the customer or delivered. At this point in Delivery, a Ready for Delivery notification email will be sent to the customer. You can also update the expected delivery date, which will trigger a Delivery Updated email.
  • Complete: The shipment has been successfully picked up by the customer or delivered.

For more information about fulfillment flows and the steps that are not unique to assembly or delivery cases, see the Fulfillment Method Types guide. As with other fulfillment email notifications, the Delivery Updated and Ready for Delivery emails can be customized through the theme. The examples shown in this guide are the default templates.

Fulfilling Shipments

In the Assigned Shipments widget of the Fulfiller UI homepage, there is a table for the Delivery fulfillment type that lists the number of shipments in each step of that process. Click a number in the table to be taken to the list of shipments in that step.

Close-up of the Delivery shipment table

Assembly-only shipments do not have their own table. Instead, they are accessible through the Order Preparation step of the Pickup table.

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

View Service Items in Shipment Details

When viewing shipment details, any delivery information is displayed at the top indicating the expected date, delivery instructions, and any other notes. 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

You can update the shipment's expected delivery date at any time by clicking the calendar icon.

Close-up of the calendar selection tool for updating a delivery date

Whenever the expected delivery date is updated, it will trigger an Updated Delivery email notification to the customer.

Example of an email notification confirming Expected Delivery Date Update

Service information is also reflected in the Order Admin UI at Main > Orders > Orders. When an administrator or customer service representative views a shipment in the Order Details, the fulfillment information will indicate whether it is a Delivery shipment and any preparation options that the shopper selected will be displayed alongside the product name as an attribute.

BOPIS Order Preparation

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

Delivery Preparation

When a Delivery shipment enters the Delivery Preparation state, any preparation should be done if required and the delivery date should be confirmed.

If an assembly service item exists in the shipment, this step will display an Assembly Completed checkbox. Assembly must be completed before clicking Ready for Delivery:

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

If the shipment does not include any assembly, then there will be no checkbox and you will only have to indicate that the items are ready for delivery:

Close-up of the Ready for Delivery button

After clicking Ready for Delivery, a pop-up will appear with instructions about the delivery process (prompting you to place the order in the Delivery area with its pick sheets and return to the UI to complete the final step after the delivery has been completed). The Ready for Delivery notification email will also be sent to the customer. This will include any of the delivery notes that have been provided.

Example of an Items Ready for Delivery email

The Provide to Customer step will then allow the pick sheet to be reprinted and the expected delivery date to be updated as needed. Click Order Was Delivered after the delivery has been performed to complete the shipment.

Close-up of the Order Was Delivered button

Transfer Shipments

Transfer shipments are supported whenever items that require assembly or delivery are not in stock at the assigned fulfillment location.

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.

Cancelling and Refunding Services

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

A delivery item will not be abandoned if everything else is cancelled or reassigned - if a delivery service item is the only item left on the shipment, it will be moved to a fulfillable shipment with the remaining delivery physical product. This means that a delivery item will not be left abandoned if all other items are cancelled or reassigned.