Before ordering a product, a shopper may appreciate visibility as to when they would receive it. The Kibo Composable Commerce Platform can calculate estimated delivery dates for any STH, BOPIS, and Delivery items that allow you to offer promised dates to your shoppers. These dates and the inputs used to calculate them are provided for you to use as needed and display on the storefront's product details, cart, and checkout pages.
This can help with cases such as when a large item such as a couch may have a further-out delivery date. This is supported for all OMS (with or without a catalog) and eComm+OMS implementations.
Estimated Delivery Date Calculations
The system calculates both a Fulfillment Date and the total Estimated Delivery Date, which can then be displayed on your storefront's product details, cart, and checkout pages.
The rest of this guide will explain how to configure processing times, transfer times, and location cut off times.
As Future inventory does not support Transfers, fulfillment calculations cannot currently factor in the transfer times for any Future inventory in a shipment.
Fulfillment Date
The Fulfillment Date is calculated for each item and fulfillment type. For BOPIS, this is the date that the item is ready to be picked up. For Direct Ship, this is the date that the item is ready to be shipped (i.e. picked up by carrier). For Delivery, this is the date that the item is ready to be Delivered (i.e. picked up by Delivery Provider). This takes into account any necessary transfer times.
- Fulfillment Date = Current Date + Processing Time + Transfer Times
In the case of bundles and products with extras, the system will compare the Fulfillment Dates for each item and use the latest date for the entire bundle or product with extras.
If you are using the Configurable Shipment feature, then the pending time is also included in the Fulfillment Date calculation. This is the amount configured in the Release orders _ mins after order submit site setting.
Estimated Delivery Date
The Estimated Delivery Date for BOPIS shipments will be the same as the Fulfillment Date calculated above, because pickup does not require additional carrier or delivery time.
- BOPIS Estimated Delivery Date = Current Date + Processing Time + Transfer Times
The Estimated Delivery Date for STH and Delivery shipments will be the sum of the Fulfillment Date and a Carrier Shipping Time or Delivery Time, both of which are determined by the carrier or delivery provider. The Carrier Shipping Time is based on the item's shipping method such as FedEx's 2 Day, Standard, and Express methods.
- STH Estimated Delivery Date = Fulfillment Date + Carrier Shipping Time
- Delivery Estimated Delivery Date = Fulfillment Date + Delivery Time
The GET Rates API returns the fulfillment windows for each shipping method. The API documentation will be updated with the new associated fields soon.
Configure Delivery Date Parameters
This section describes how to configure a location's processing and cut off times, as well as the transfer times between specific locations and/or location types.
Set Processing Times
The Processing Time is the time taken at a location to fulfill shipments, measured in hours. This can be set at the location level for Direct Ship, BOPIS, Transfer, and Delivery fulfillment types. To set a location's processing times:
- Go to Main > Orders > Locations.
- Either select an existing location or create a new location.
- Enter the processing time in hours for Direct Ship, In Store Pickup, Delivery, and/or Transfers as applicable depending on what your implementation is enabled for. The Transfers time entered here is the processing time only at the transfer location.
- Click Save.
Set Transfer Times
The Transfer Time is the time taken to transfer a shipment from a Transfer Location to the Receiving Location. For example, if the Transfer Time between Location A and Location B is three hours, then that means it takes three hours to transfer a shipment from Transfer Location A to Receiving Location B.
The system will consider transfer times set up between location types as defaults. Overrides can be set up between specific locations, in which case the system will apply the override instead of the default. For instance, you could set a default time for transfers between two location types (a Warehouse and a Store) and override if needed between two specific locations (Location A and Location B). This will apply to all fulfillment types.
- Go to System > Settings > Transfer Times.
- Click the Default Transfer Times by Location Type tab. This tab displays a list of any existing location type-based transfer times, indicating the "from" and "to" location types and their associated time period.
- Click Add Transfer Time.
- Select the From Location Type and the To Location Type. While you can't duplicate a setting for the same permutation (such as "from: Warehouse, to: Store"), the inverse scenario will still be valid if a setting for it doesn't already exist ("from: Store, to: Warehouse").
- Enter the Transfer time (a whole number that is at least 0) and Transfer time unit (hours or days). If you enter the time in days, it will be converted into hours upon saving.
- Click Save.
- Repeat Steps 3-6 for any other location type defaults you want to add.
- If you need to set up overrides, click the Transfer Times by Location tab. This tab displays a list of any existing location-based transfer times, indicating the "from" and "to" locations and their associated time period.
- Click Add Transfer Time.
- Select the From Location and the To Location. While you can't duplicate a setting for the same permutation (such as "from: Austin, to: Boston"), the inverse scenario will still be valid if a setting for it doesn't already exist ("from: Boston, to: Austin").
While locations can only be set to one location type by default, certain implementations may be enabled to set multiple location types. If this is the case, the Estimated Delivery Date calculation will only consider the first set location type while determining the location's transfer time.
- Enter the Transfer time (a whole number that is at least 0) and Transfer time unit (hours or days). If you enter the time in days, it will be converted into hours upon saving.
- Click Save.
- Repeat Steps 9-12 for any other location overrides you want to add.
The search bar on the Transfer Times page allows you to do a keyword search on the Transfer From and Transfer To fields using either location or location type names and codes. For example, you can find all transfer time settings that relate to Austin - Warehouse01 by looking up either "Austin" or "Warehouse01."
Set Cut Off Times
Fulfillment Cut Off Times define when a location is able to fulfill on each given day of the week, and may or may not be the same as the location's Hours of Operations (which are a different section of the location configurations). You can set daily Direct Ship, BOPIS, Transfer, and Delivery cut off times in the location configurations with calendar-based overrides.
Fulfillment Date and Estimated Delivery Date calculations factor in these cut off times. If the current time or processing time is past the cut off time for the location, the item's processing time will start the next day that the location is open. Once processing starts on a day, the system assumes that it will complete on that day.
- Go to Main > Orders > Locations.
- Click a location or create a new one.
- In the Fulfillment Cut Off Time section, set the Time Zone.
- Click the tab of the fulfillment type you want to configure hours for.
- If you want your settings here to apply to any other fulfillment types as well, such as if the location operates with the same time block for Direct Ship and Pickup, then check the appropriate options in Apply Cut Off Times to setting. This will copy your selections to the checked fulfillment type.
- For at least one day of the week, set the from and to times (which may also be Closed instead of a specific time of day) to indicate when the location is actively fulfilling orders. If any days are left blank, that means that there is no cut off for that day.
- If you want to set the same times across multiple days, then you can set the times for one day and check the others you want to copy to using the boxes on the right. Then click Apply hours to all checked.
- If you want to set the same times across multiple days, then you can set the times for one day and check the others you want to copy to using the boxes on the right. Then click Apply hours to all checked.
- If you want to set different cut off times on specific calendar dates, such as holidays, click Set Override Hours.
- Enter the From and To times, and check which fulfillment types you want these times to. Click Add.
- Repeat these steps to add more override dates as needed. You can remove any by clicking the X on the far right.
- Click Save.
- Click View & Remove Override Hours to see a list of all existing overrides and filter the list by date. To remove one, expand the drop-down menu on the far right of the table row and click Delete Override.
- When you are done, click Submit in the bottom right of the Fulfillment Cut Off Time section.
- If you are done configuring all location configurations, click Save in the top right of the page.
Order Routing Suggestions
You can query Order Routing to receive the optimal fulfillment location and its Estimated Delivery Date calculation. The endpoint /commerce/orders/orderRouting/api/v1/routing/edd/suggestion
accepts the order item information and customer shipping address, as shown in the example request below. API documentation will be updated and linked here soon.
{ "items": [ { "orderItemID": 1, "partNumber": null, "sku": null, "quantity": 3, "customItemData": null, "itemDependency": null, "backorderable": false, "upc": "L0693614" } ], "shippingAddress": { "addressID": null, "customerID": null, "addressLine1": "100 First Avenue", "phone": "(111) 222-3333", "city": "Calgary", "state": "AB", "postalCode": "AB T1Y 6M6", "countryCode": "CA", "latitude": 51.081550, "longitude": -113.990430 }, "orderType": "DIRECTSHIP", "futureDateLimit": "2026-08-22T00:00:00Z", "orderID": 20782, "total": 29.95 }
The system will perform its fulfillment calculations and return an estimatedDeliveryDate
object for each order item and location, as shown in the below example. Use the http.commerce.routing.eddsuggestion API Extensions to customize these responses if needed, such as to display the optimal estimated fulfillment date or time on your storefront.
{ "assignmentSuggestions": { "1": [ { "orderItemID": 1, "locationID": 12345, "locationCode": "123", "quantity": 3, "route": "DIRECTSHIP", "futureDate": null, "futureDateString": null, "shipmentGroup": null, "data": null, "estimatedDeliveryDates": [ { "estimatedDeliveryDate": "2025-02-28T00:00:00Z", "carrier": "UPS", "serviceType": "2Day", "orderCutoffDate": "2025-03-05T00:53:22Z" } ] } ] }, "futureAssignmentSuggestions": {}, "stateChangeSuggestions": {}, "availableLocations": [], "emptyResponse": false }