Download OpenAPI specification:Download
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:
ALL since they are assumed to be picked across multiple zones.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.
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.
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.
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.
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.
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.
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.
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.
| 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 |
| 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 |
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 | |
| 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 |
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 | |
required | Array of objects (Order Items) Expand for more info. Required: A list of type |
{- "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": [
- {
- "zone_name": "ZONE_1",
- "volume_weight": 1
}, - {
- "zone_name": "ZONE_2",
- "volume_weight": 3
}, - {
- "zone_name": "ZONE_3",
- "volume_weight": 2
}
], - "bulk_pick_enabled": false,
- "bulk_pick_zone_volume_split": [
- {
- "zone_name": "ZONE_1",
- "volume_weight": 1
}, - {
- "zone_name": "ZONE_2",
- "volume_weight": 3
}, - {
- "zone_name": "ZONE_3",
- "volume_weight": 2
}
], - "order_items": [
- {
- "reference_id": "string",
- "order_id": "29401782",
- "product_id": "29401782",
- "planned_pick_quantity": 1,
- "product_x_dimension": 2.2,
- "product_y_dimension": 2.3,
- "product_z_dimension": 5.8,
- "shipper_name": "T",
- "scheduled_ship_datetime": "2023-09-15T20:40:38Z",
- "order_line_number": 0,
- "product_description": "XL T-Shirt",
- "product_family": "T-Shirt",
- "product_dimension_uom": "in",
- "product_case_qty": 12
}
]
}{- "job_id": "string"
}| 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 |
| 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 |
| 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 |
| max_num_carts | integer (Max Num Carts) Optional: Defines total number of carts available. Not providing this or passing |
| 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 |
required | Array of objects (Order Items) Expand for more info. Required: A list of type |
{- "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": [
- {
- "reference_id": [
- "0",
- "1",
- "A01",
- "2534"
], - "wave_id": [
- "WAVE_A31239",
- "0",
- "B"
], - "order_id": "29401782",
- "product_id": "29401782",
- "pick_sequence_id": 0,
- "pick_location_id": "string",
- "planned_pick_quantity": 1,
- "product_x_dimension": 2.2,
- "product_y_dimension": 2.3,
- "product_z_dimension": 5.8,
- "shipper_name": "T",
- "scheduled_ship_datetime": "2023-09-15T20:40:38Z",
- "order_line_number": "string",
- "product_description": "XL T-Shirt",
- "product_family": "T-Shirt",
- "product_dimension_uom": "in"
}
]
}{- "job_id": "string"
}| job_id required | string (Job Id) Required: the |
{- "job_id": "string"
}null| job_id required | string (Job Id) Required: the |
{- "job_id": "string"
}null