Lully API (order-each-picking-v1)

Download OpenAPI specification:Download

Lully API for warehouse order-picking optimization. 🚀

Pick Planner

The Pick Planner enables intelligent automated waving by building waves or batches that are cognizant of your warehouse constraints. Constraints such as vehicle or cart size, zones, shipping time, and process capabilities.

The Pick Planner can return one of three pick types, depending on your configuration:

  • Cluster Pick: For orders that will be picked together on a single trip through the warehouse while maintaining separation by order into their respective bins or totes.
  • Batch Pick: For items that will be picked by area or zone and later sorted to individual orders. For example, orders may be spread across multiple trips through the warehouse and executed by multiple operators or machines. In other words, they will be done in separate batches.
  • Discrete Pick : For orders that are too large or too important to be cluster picked. Note that discrete picks will always get assigned to pick zone ALL since they are assumed to be picked across multiple zones.
  • Bulk Pick: For orders that contain the same product(s). Bulk picking can create efficiency by making less trips through the facility when picking a large amount of orders simultaneously.

To do a request to the Pick Planner, use the /order-each-picking/v1/Pick_Planner/Request endpoint. A detailed description of the inputs and outputs is given below.

Detailed description of the Pick Planner

The Pick Planner groups products into carts (or other vehicle) and their totes (also known as buckets). The size of the totes is based on the cart_tote_capacity field. This field is optional and is assigned a default value predetermined for your account if not provided.

A cart contains multiple totes. The number of totes per cart is based on the num_totes_per_cart field and is required. Only products belonging to the same order can be placed within the same tote. Products from different orders will not be mixed into the same tote. It's possible that an order is too large to fit into one tote and it's products will then be split across multiple totes.

The Pick Planner will minimize the number of carts used and the number of unique products per cart. The reason is explained here.

For each unique product in a cart, an extra journey has to be made by an order picker to walk to this product and get it. When placing more of the same products in a cart, an order picker is able to make a single journey to grab multiple products. In contrast, if all products in a cart are distinct, the order picker has to walk separately to each product it has to fetch.

By increasing the utilization per cart (i.e. reducing the total number of carts used) and reducing the distinct number of products per cart, it's possible to increase order picking productivity.

Short description of the input

On the input side, the main fields that describe the solution are the order_items and num_totes_per_cart fields. The order_items field is a list containing entries (called an order item) that each describe a product that has to be picked. Information about the quantity and size of each product is also required as well as the order to which it belongs. The main fields in the order item list are order_id, product_id, planned_pick_quantity, product_x_dimension, product_y_dimension and product_z_dimension.

For each order item, the order_id field is used to identify which lines belong to the same order. The product_id is used to identify which lines are referencing the same product. The planned_pick_quantity is used to specify the amount of this product that is contained in this order. For example, it's possible to have one line with planned_pick_quantity set to N but it is also possible to have N identical lines with planned_pick_quantity set to 1. This second case will give the Pick Planner the opportunity to split this product within this order across multiple totes or even across multiple carts if necessary. In most cases however, it's better not to split lines with the same order_id and product_id like this.

The product_x_dimension, product_y_dimension and product_z_dimension are used to calculate the volume of a product. These values can be unique for every line and do not have to be consistent between the same product. They are used to make sure that the Pick Planner does not put too many objects in the same tote. In most cases it makes sense that lines with the same product_id have the same x, y and z dimensions, but it's not required for the Pick Planner.

Short description of the output

The Pick Planner might take up to 2 minutes to finish. A POST request to the /order-each-picking/v1/Pick_Planner/Response endpoint is required to get the result. The body of this POST request must contain the job_id field. This is the id received after submitting your plan problem at /order-each-picking/v1/Pick_Planner/Request. This job_id field can also be found in the result if you already fetched it before using this endpoint.

The main part of the response is the order_items field. It contains a list of the same length as the order_items field that was originally send to /order-each-picking/v1/Pick_Optimizer/Request when submitting the job. Some of the attributes of the individual order items are unaltered from the original request. The reference_id field is one of those unaltered fields and can be given a custom value per order item in the input. If it's not present in the input then it will still be given in the output but will represent the index at which the particular order item was present in the original input request (starting at index 0).

The fields that completely describe the optimized picks are the wave_plan_id, cart_plan_id, cart_tote_plan_id, pick_type_recommendation and pick_zone attributes of the order items. The wave_plan_id shows which order items should be put together in the same wave. The cart_plan_id shows which order items that are in the same wave should be put on the same cart. The cart_tote_plan_id shows which order items that are assigned to the same wave and cart should be put in the same tote on that particular cart. The pick_type_recommendation shows which kind of pick is recommended for this order item. The possible values for the pick_type_recommendation are cluster_cart_pick and discrete_order_pick. cluster_cart_pick means that the Pick Planner recommends that this item should be picked by a single cart along with other items that possibly belong to other orders. discrete_order_pick means that the Pick Planner recommends that this item should be picked on its own. This can be desirable when a large quantity (see the planned_pick_quantity field) of this product is needed and it would be beneficial to fill a whole pallet when getting the items. The pick_zone field specifies the pick zone that this order item is assigned to. Order items that need to be picked by the same cart will also share the same pick zone but not vice versa.

Pick Optimizer

The Pick Optimizer enables intelligent, location-aware assignments of picks to carts that are cognizant of your warehouse constraints. Constraints such as vehicle or cart size, zones, shipping time, and process capabilities.

The Pick Optimizer takes in orders and the products within those orders and assigns them to a cart and a tote within that cart. It also puts them in a specific order that is most efficient to pick when walking through the warehouse. The assignment of picks to carts and totes together with the order in which they are picked are all assigned together with the goal of optimizing the picking process.

Detailed description of the Pick Optimizer

The Pick Optimizer groups products into carts (or other vehicle) and their totes (also known as buckets or bins). The size of the totes is based on the cart_tote_capacity field. This field is optional and is assigned a default value predetermined for your account if not provided.

A cart contains multiple totes. The number of totes per cart is based on the num_totes_per_cart field and is required. Only products belonging to the same order can be placed within the same tote. Products from different orders will not be mixed into the same tote. It's possible that an order is too large to fit into one tote and it's products will then be split across multiple totes.

The Pick Optimizer will minimize the time required to perform all the pick operations it receives by assigning picks to carts in an intelligent way that also takes into account the path that the order picker needs to take through the warehouse.

The Pick Optimizer is aware of the many ways that picks can be assigned to carts. Sometimes it's useful to make sure that the cart capacity is being used maximally but sometimes it's useful to split orders across carts to prevent a single order picker from walking all the way across the warehouse to fetch two products on opposite sides of the pick floor.

Short description of the input

On the input side, the main fields that describe the solution are the order_items and num_totes_per_cart fields. The order_items field is a list containing entries (called an order item) that each describe a product that has to be picked. Information about the location, quantity and size of each product is also required as well as the order to which it belongs. The main fields in the order item list are order_id, product_id, pick_location_id, planned_pick_quantity, product_x_dimension, product_y_dimension and product_z_dimension.

For each order item, the order_id field is used to identify which lines belong to the same order. The product_id is used to identify which lines are referencing the same product. The pick_location_id is used to determine the physical location (within the warehouse) to which the order picker needs to walk to in order to get this item. The planned_pick_quantity is used to specify the amount of this product that is contained in this order. For example, it's possible to have one line with planned_pick_quantity set to N but it is also possible to have N identical lines with planned_pick_quantity set to 1. This second case will give the Pick Planner the opportunity to split this product within this order across multiple totes or even across multiple carts if necessary. In most cases however, it's better not to split lines with the same order_id and product_id like this.

The product_x_dimension, product_y_dimension and product_z_dimension are used to calculate the volume of a product. These values can be unique for every line and do not have to be consistent between the same product. They are used to make sure that the Pick Planner does not put too many objects in the same tote. In most cases it makes sense that lines with the same product_id have the same x, y and z dimensions, but it's not required for the Pick Planner. Similarly, the pick_location_id can also be different for each line but it makes sense that lines with the same product_id also have the same pick_location_id since a certain product often only has one location within the warehouse where it can be picked from. Considering this, the Pick Optimizer can handle requests where order items with the same product_id have a different pick_location_id without problem.

Short description of the output

The Pick Optimizer might take up to 2 minutes to finish. A POST request to the /order-each-picking/v1/Pick_Optimizer/Response endpoint is required to get the result. The body of this POST request must contain the job_id field. This is the id received after submitting your plan problem at /order-each-picking/v1/Pick_Planner/Request. This job_id field can also be found in the result if you already fetched it before using this endpoint.

The main part of the response is the order_items field. It contains a list of the same length as the order_items field that was originally sent to /order-each-picking/v1/Pick_Optimizer/Request when submitting the job. Some of the attributes of the individual order items are unaltered from the original request. The reference_id field is one of those unaltered fields and can be given a custom value per order item in the input. If it's not present in the input then it will still be given in the output but will represent the index at which the particular order item was present in the original input request (starting at index 0).

The fields that completely describe the optimized picks are the cart_pick_id, cart_pick_visit_index and cart_tote_pick_id attributes of the order items. The cart_pick_id indicates which items are to be picked by the same cart. The cart_pick_visit_index indicates which item should be picked first. Every item that is assigned to the same cart should be picked in order of ascending cart_pick_visit_index for optimal picking. Per cart, every value of the cart_pick_visit_index will be a unique integer which increments starting from 0 (0, 1, 2, ...). The cart_tote_pick_id indicates which tote on the particular cart this order item is assigned to. If an order item has the same cart_pick_id field and the same cart_tote_pick_id field, it means that during picking, they should be put in the same tote on the same cart.

Submit Pick Planner Job

Authorizations:
APIKeyQuery
Request Body schema: application/json
required
message_datetime
string (Message Datetime)

Optional: This datetime will be automatically filled but can also be given as input. When given as input it will remain unaltered.

hook_url
string (Hook Url)

Optional: The results for this API requests can be fetched after they are available. Alternatively, a web hook url can be provided here. When the request has been fully processed, the result will be sent to this hook address in an http POST request with the result in the body of the request in JSON format. The same result can still be fetched using the /order-each-picking/v1/Pick_Optimizer/Response endpoint.

customer_site
required
string (Customer Site)

Required: Your location site name

num_totes_per_cart
required
integer (Num Totes Per Cart) > 0

Required:Defines the number of totes per cart. Items from different orders cannot share the same tote so this effectively also limits the maximum number of orders per cart to this value.

max_wave_quantity
required
integer (Max Wave Quantity) > 0

Required: Defines maximum number of orders per Wave

correlation_id
string (Correlation Id) <= 10000 characters

Optional: Identifier that will be returned when requesting the solution. This can make data management easier. Since this is a string field, a JSON can also be supplied. Be sure not to exceed the maximum length!

max_num_carts
integer (Max Num Carts)

Optional: Defines total number of carts available. The default value (-1) enables unlimited carts.

cart_tote_capacity
integer (Cart Tote Capacity)

Optional: Carts have uniform tote capacities. This specifies the total volume of a tote. The default value of this is based on your account. This volume should be in the same unit as the x-y-z product dimensions specified in the order item line entries in the order_items field. The Pick Planner calculates the volume of an order item line based on the product_x_dimension, product_y_dimension and product_z_dimension attributes of that order item.

Array of objects (Pick Zone Volume Split)
Default: [{"zone_name":"ALL","volume_weight":1}]

Optional: List of applicable pick zones for cart pick along with a weight per zone. If not given, zone ALL will be assigned to every order item line that is subjected to cluster picking. If there are two zones and the first zone has twice the volume than the other one, then the first zone will be assigned twice the number of waves as the second zone.

bulk_pick_enabled
boolean (Bulk Pick Enabled)
Default: false

Optional: Enable Bulk pick order grouping. When enabled, orders meeting bulk pick criteria will not honor num_totes_per_cart rules

Array of objects (Bulk Pick Zone Volume Split)
Default: [{"zone_name":"ALL","volume_weight":1}]

Optional: List of applicable pick zones for cart pick along with a weight per zone. If not given, zone ALL will be assigned to every order item line that is subjected to bulk picking. If there are two zones and the first zone has twice the volume than the other one, then the first zone will be assigned twice the number of waves as the second zone.

required
Array of objects (Order Items)

Expand for more info. Required: A list of type pick planner order item line. Each line specifies one or more items that need to be planned. The order_id field specifies which order this line belongs to. The product_id field specifies which product is associated with this order line. The planned_pick_quantity specifies the amount of this product within this order are represented by this order line.

Responses

Request samples

Content type
application/json
{
  • "message_datetime": "string",
  • "hook_url": "string",
  • "customer_site": "Warehouse1",
  • "num_totes_per_cart": 0,
  • "max_wave_quantity": 0,
  • "correlation_id": "string",
  • "max_num_carts": 0,
  • "cart_tote_capacity": 0,
  • "pick_zone_volume_split": [
    ],
  • "bulk_pick_enabled": false,
  • "bulk_pick_zone_volume_split": [
    ],
  • "order_items": [
    ]
}

Response samples

Content type
application/json
{
  • "job_id": "string"
}

Submit Pick Optimizer Job

Authorizations:
APIKeyQuery
Request Body schema: application/json
required
message_datetime
string (Message Datetime)

Optional: This datetime will be automatically filled but can also be given as input. When given as input it will remain unaltered.

hook_url
string (Hook Url)

Optional: The results for this API requests can be fetched after they are available. Alternatively, a web hook url can be provided here. When the request has been fully processed, the result will be sent to this hook address in an http POST request with the result in the body of the request in JSON format. The same result can still be fetched using the /order-each-picking/v1/Pick_Optimizer/Response endpoint.

customer_site
required
string (Customer Site)

Required: Your location site name

enforce_static_cart_pathing
required
boolean (Enforce Static Cart Pathing)

Required: The Pick Optimizer has the ability to make sure that all items that are assigned to the same cart will be picked in a certain order. This is called static cart pathing. When enabled, entries in the order_items field are required to contain the pick_sequence_id field. This field will then be used to make sure that all items within the same cart will be visited in the correct order determined by their pick_sequence_id. When the pick_sequence_id is an int, the picks within the same cart will be in ascending order of this id. When this id is a str, then the picks within the same cart will be sorted in alphabetical order of this id.

num_totes_per_cart
required
integer (Num Totes Per Cart) > 0

Required: Defines the number of totes (also known as buckets or bins) per cart. Items from different orders cannot share the same tote so this effectively also limits the maximum number of orders per cart to this value.

correlation_id
string (Correlation Id) <= 10000 characters

Optional: Identifier that will be returned when requesting the solution. This can make data management easier. This is a string field so a JSON can also be supplied. Be sure not to exceed the maximum length!

max_num_carts
integer (Max Num Carts)

Optional: Defines total number of carts available. Not providing this or passing null enables unlimited carts.

cart_tote_capacity
integer (Cart Tote Capacity)

Optional: Carts have uniform tote capacities. This specifies the total volume of a tote. The default value of this is based on your account. This volume should be in the same unit as the x-y-z product dimensions specified in the order item line entries in the order_items field. The Pick Optimizer calculates the volume of an order item line based on the product_x_dimension, product_y_dimension and product_z_dimension attributes of that order item.

required
Array of objects (Order Items)

Expand for more info. Required: A list of type pick optimizer order item line. Each line specifies one or more items that need to be picked. The order_id field specifies which order this line belongs to. The product_id field specifies which product is associated with this order line. The planned_pick_quantity specifies the amount of this product within this order are represented by this order line. The pick_location_id indicates the named location of this order item. The Pick Optimizer will use the pick_location_id to make sure that efficient paths are taken by carts. The pick_sequence_id is only required when using static cart pathing and is used to enforce the priority (within the same cart) with which the items are picked in.

Responses

Request samples

Content type
application/json
{
  • "message_datetime": "string",
  • "hook_url": "string",
  • "customer_site": "Warehouse1",
  • "enforce_static_cart_pathing": true,
  • "num_totes_per_cart": 0,
  • "correlation_id": "string",
  • "max_num_carts": 0,
  • "cart_tote_capacity": 0,
  • "order_items": [
    ]
}

Response samples

Content type
application/json
{
  • "job_id": "string"
}

Get Pick Planner Result

Authorizations:
APIKeyQuery
Request Body schema: application/json
required
job_id
required
string (Job Id)

Required: the job_id received when successfully submitting a job at /order-each-picking/v1/Pick_Optimizer/Request. If you requested this result before and saved the response then this id can be found in the response you received form `/order-each-picking/v1/Pick_Planner/Response

Responses

Request samples

Content type
application/json
{
  • "job_id": "string"
}

Response samples

Content type
application/json
Example
null

Get Pick Optimizer Result

Authorizations:
APIKeyQuery
Request Body schema: application/json
required
job_id
required
string (Job Id)

Required: the job_id received when successfully submitting a job at /order-each-picking/v1/Pick_Optimizer/Request. If you requested this result before and saved the response then this id can be found in the response you received from `/order-each-picking/v1/Pick_Optimizer/Response

Responses

Request samples

Content type
application/json
{
  • "job_id": "string"
}

Response samples

Content type
application/json
Example
null