Packaging Planner API
Select optimal packaging with Shipium's Packaging Planner API.
Get started
The Packaging Planner API typically is called with three different kinds of data, depending on the use case: full linear dimensions, packaging IDs, or package set IDs. To call the API using full linear dimensions, you can begin with the instructions in this document.
To use the Packaging Planner API with packaging or package set IDs, you must first configure your account. Guidance can be found in the Packaging Planner documentation.
Retrieve packaging guidance from the Packaging Planner API
The Shipium Packaging Planner API assumes you're using one of the authentication mechanisms detailed in our authentication documentation. The endpoint for Packaging Planner API calls is included in the table below.
| API type | API endpoint |
|---|---|
| POST | https://api.shipium.com/api/v1/packaging/planner |
Authentication for API CallsIn the cURL examples on this page, the environment variable AUTHSTRING is used to handle authorization. The recipe below shows how to set it correctly for both API Key and OAuth users.
Authenticating for Curl
Shipium assumptions for the Packaging Planner API
Package and content properties
All items being packed and all packages being packed into are three-dimensional, solid, rectangular objects or can be represented as such.
Packing strategies
When retrieving packaging guidance, you can specify different options that affect which packing algorithm is used. You also can include a compression factor to be applied to your packing strategy.
Packing algorithms
The packing algorithms currently supported are listed in the following table.
| Algorithm name | Packing algorithm value | Description |
|---|---|---|
| Standard | standard | A cubic packer that uses an algorithm to place items in packages based on their size and how they can fit together in packaging |
| Volumetric | volumetric | A volumetric or "liquid" packing algorithm that fits items in packaging by first making sure that no item goes into a package if the item's height, width, or length exceeds the height, width, or length of a given package and after that assumes perfect volumetric packing within the package. |
Warning: We only recommend volumetric packing for certain specific use cases such as small parts (e.g., screws) or certain clothing use cases.
Volumetric packing algorithm options
When using the volumetric algorithm, you can specify a packingAlgorithmOptions.volumetricPackingEfficiency that will allow your packing to be constrained more (less than 1) or less (greater than 1) than the raw dimensions of the packaging. For instance, if you set volumetricPackingEfficiency to a value of 0.9, then the algorithm will only allow the volume of items packed to be less than or equal to 90% of the calculated volume of the packaging. (This does not impact any of the height, width, or length constraints – only volume limitations.)
Another optional specification within packingAlgorithmOptions is pureVolumetricPacking. This option does not place restrictions on product height, width, or length relative to the size of the packaging. Instead, it enables selection of packaging based purely on volumetric size. This means that it selects the packaging option with the smallest volume that satisfies the condition that the sum of the item volume times the item quantity for all items passed must be less than or equal to the volume of the package, multiplied by the passed volumetricPackingEfficiency. The pureVolumetricPacking field is boolean and defaults to a value of "false".
Packing algorithm block example
{
"packingStrategyOptions": {
"packingAlgorithm": "volumetric",
"packingAlgorithmOptions": {
"pureVolumetricPacking": true,
"volumetricPackingEfficiency": 1.0
}
}
}Packing compression
You can opt to include a compression factor in your packing strategy, whether standard or volumetric, that reflects the degree to which a product can be compressed in one or more dimensions (i.e., height, width, length). You'll specify values for the productCompressionFactor property within the items array. When specifying compression, you'll express a compressionFactor value, which is less than 1 and represents the degree to which any given dimension should be compressed. For example, a compressionFactor of 0.2 applied to a dimension with a value of 5 would result in a new value being used in packing equal to 4, given the compression formula of 5*(1 - 0.2). To determine the dimension(s) to which the compression factor should apply, you'll provide a boolean value of true or false for the compressionHeight, compressionWidth, and compressionLength.
Packing compression block example
{
"productCompressionFactor": {
"compressionFactor": 0.2,
"compressHeight": true,
"compressWidth": false,
"compressLength": false
}
}Packaging compression block in context of the items block
{
"items": [
{
"productId": "item1",
"productLinearDimensions": {
"width": 1,
"length": 1,
"height": 1,
"linearUnit": "in"
},
"productWeight": { "weight": 1, "weightUnit": "oz" },
"quantity": 5,
"productCompressionFactor": {
"compressionFactor": 0.1,
"compressDepth": true,
"compressWidth": true,
"compressHeight": true
}
}
]
}Retrieve packaging guidance by including full linear dimensions in the API call (primary use case)
The following tables provide all required and optional fields for calling the Packaging Planner API with full linear dimensions of your package contents. You can find additional support in the Packaging Planner API Reference.
Required fields
Field | Details |
|---|---|
| Type: Array of item objects |
| Type: Array of packaging objects |
| Type: Object ( |
| Type: Decimal |
| Type: Decimal |
| Type: Decimal |
| Type: String (enumeration) |
| Type: Object ( |
| Type: Decimal |
| Type: String (enumeration) |
| Type: Object ( |
| Type: Decimal |
| Type: String (enumeration) |
| Type: String (enumeration) |
| Type: String |
Optional fields
Field | Details |
|---|---|
| Type: Boolean |
| Type: Integer (int32) Description: Passing this option will prevent any package returned from containing more than this number of items. Must be a value greater than 0. |
| Type: String |
| Type: Integer (int32)
Description: Passing this option will prevent any package returned from containing more than this number of items, at the individual packaging level. This value overrides the top-level |
| Type: String (enumeration) |
Packing strategy options (applies to all use cases)
The following optional fields can be included with any of the above use cases to specify packing algorithm behavior.
Optional fields
Field | Details |
|---|---|
| Type: String (enumeration) |
| Type: Decimal |
| Type: Boolean |
Packing compression options (applies to all use cases)
The following optional fields can be included within the items array for any use case to specify compression behavior.
Optional fields
Field | Details |
|---|---|
| Type: Object ( |
| Type: Decimal |
| Type: Boolean |
| Type: Boolean |
| Type: Boolean |
Example cURL call
curl --request POST \
--url https://api.shipium.com/api/v1/packaging/planner \
--header 'accept: application/json' \
--header "$AUTHSTRING" \
--header 'content-type: application/json' \
--data 'INSERT REQUEST BODY FROM BELOW'Example request body
{
"packaging": [
{
"linearDimensions": {
"height": 1,
"length": 1,
"linearUnit": "in",
"width": 1
},
"maxContentWeight": {
"weight": 50,
"weightUnit": "lb"
},
"packagingMaterial": "box",
"packagingSizeName": "1x1x1",
"packagingWeight": {
"weight": 1,
"weightUnit": "lb"
},
"maxItemsPerPackage": 10
},
{
"linearDimensions": {
"height": 10,
"length": 10,
"linearUnit": "in",
"width": 10
},
"maxContentWeight": {
"weight": 50,
"weightUnit": "lb"
},
"packagingMaterial": "box",
"packagingSizeName": "10x10x10",
"packagingWeight": {
"weight": 1,
"weightUnit": "lb"
},
"maxItemsPerPackage": 20
},
{
"linearDimensions": {
"height": 6,
"length": 6,
"linearUnit": "in",
"width": 6
},
"maxContentWeight": {
"weight": 50,
"weightUnit": "lb"
},
"packagingMaterial": "box",
"packagingSizeName": "6x6x6",
"packagingWeight": {
"weight": 1,
"weightUnit": "lb"
},
"maxItemsPerPackage": 15
}
],
"referenceIdentifier": "PACKAGE_A",
"items": [
{
"productLinearDimensions": {
"width": 2,
"length": 2,
"height": 2,
"linearUnit": "in"
},
"productId": "item1",
"productWeight": {
"weight": 2,
"weightUnit": "oz"
},
"quantity": 1
},
{
"productLinearDimensions": {
"width": 4,
"length": 4,
"height": 4,
"linearUnit": "in"
},
"productId": "item2",
"productWeight": {
"weight": 1,
"weightUnit": "oz"
},
"quantity": 1
}
]
}Example standard response
{
"referenceIdentifier": "PACKAGE_A",
"packagePlanId": "5fd53424-c47f-4acd-8d8d-b950adf641ee",
"packageCount": 1,
"unpackableItems": [],
"packages": [
{
"packagePlanPackageId": "d696b20e-b060-4169-89e7-75178135b7f1",
"linearDimensions": {
"linearUnit": "in",
"length": 5.5,
"height": 5,
"width": 5
},
"maxContentWeight": {
"weight": 100,
"weightUnit": "oz"
},
"packagingWeight": {
"weight": 2,
"weightUnit": "oz"
},
"packagingMaterial": "box",
"packagingSizeName": "5x5x5",
"packageEstimatedWeight": {
"weight": 3,
"weightUnit": "oz"
},
"packageContents": [
{
"productLinearDimensions": {
"width": 1,
"length": 2,
"height": 1,
"linearUnit": "in"
},
"productId": "item2",
"productWeight": {
"weight": 2,
"weightUnit": "oz"
},
"quantity": 2,
"productDetails": []
}
]
}
],
"volumetricPackEfficiency": 46.55
}Example response for unpackable items
{
"referenceIdentifier": "PACKAGE_A",
"packagePlanId": "f5a6e6de-9df3-48f1-9171-dcce9947576a",
"packageCount": 1,
"unpackableItems": [
{
"productLinearDimensions": {
"width": 100,
"length": 200,
"height": 100,
"linearUnit": "in"
},
"productId": "bigolproductthatisstillsomehow2oz",
"productWeight": {
"weight": 2,
"weightUnit": "oz"
},
"quantity": 1,
"productDetails": []
}
],
"packages": [
{
"packagePlanPackageId": "27ed6590-f068-4168-8e2c-2fa0fbf73957",
"linearDimensions": {
"linearUnit": "in",
"length": 5.5,
"height": 5,
"width": 5
},
"maxContentWeight": {
"weight": 100,
"weightUnit": "oz"
},
"packagingWeight": {
"weight": 2,
"weightUnit": "oz"
},
"packagingMaterial": "box",
"packagingSizeName": "5x5x5",
"packageEstimatedWeight": {
"weight": 3,
"weightUnit": "oz"
},
"packageContents": [
{
"productLinearDimensions": {
"width": 1,
"length": 2,
"height": 1,
"linearUnit": "in"
},
"productId": "item2",
"productWeight": {
"weight": 2,
"weightUnit": "oz"
},
"quantity": 2,
"productDetails": []
}
]
}
],
"volumetricPackEfficiency": 46.55
}Example response for unpackable items and request to not include product details in response
{
"referenceIdentifier": "PACKAGE_A",
"packagePlanId": "e56cbc7d-a630-4ed6-9da8-4e77166b23e8",
"packageCount": 1,
"unpackableItems": [
{
"productId": "bigolproductthatisstillsomehow2oz",
"quantity": 1
}
],
"packages": [
{
"packagePlanPackageId": "4353ea95-4a7c-40f4-8998-5bd17a4bf676",
"linearDimensions": {
"linearUnit": "in",
"length": 5.5,
"height": 5,
"width": 5
},
"maxContentWeight": {
"weight": 100,
"weightUnit": "oz"
},
"packagingWeight": {
"weight": 2,
"weightUnit": "oz"
},
"packagingMaterial": "box",
"packagingSizeName": "5x5x5",
"packageEstimatedWeight": {
"weight": 3,
"weightUnit": "oz"
},
"packageContents": [
{
"productId": "item2",
"quantity": 2
}
]
}
],
"volumetricPackEfficiency": 46.55
}Retrieve packaging guidance by including packaging IDs in the API call
To use the API in this way, you'll need to include a packagingId value. You can include the value Shipium generated (Packaging ID) or the one you assigned to the packaging (Packaging ID Alias) when you configured your packaging in the Shipium Console.
Obtain the packagingId value needed for the API call
To retrieve the packagingId value to pass in the API call, you'll need to access the details of your newly created packaging by selecting Detail within its card on your Packaging homepage.
The Packaging ID value to copy is located near the top left of the details screen, as shown in the following screenshot. You'll include this value as the packagingId when calling Shipium's APIs.
The following tables provide all required and optional fields for calling the Packaging Planner API with packaging ID(s). You can find additional support in the Packaging Planner API Reference.
Required fields
Field | Details |
|---|---|
| Type: Boolean |
| Type: Array of item objects |
| Type: Array of strings |
Optional fields
Field | Details |
|---|---|
| Type: Integer (int32) |
| Type: String |
Example cURL call
curl --request POST \
--url https://api.shipium.com/api/v1/packaging/planner \
--header 'accept: application/json' \
--header "$AUTHSTRING" \
--header 'content-type: application/json' \
--data 'INSERT REQUEST BODY FROM BELOW'Example request body
{
"packagingIds": ["reno-fc-package-large","5463ceca-15f4-11ee-be56-0242ac120002"],
"referenceIdentifier": "BOX_9",
"items": [
{
"productLinearDimensions": {
"width": 2,
"length": 2,
"height": 2,
"linearUnit": "in"
},
"productId": "item1",
"productWeight": {
"weight": 2,
"weightUnit": "oz"
},
"quantity": 1
},
{
"productLinearDimensions": {
"width": 4,
"length": 4,
"height": 4,
"linearUnit": "in"
},
"productId": "item2",
"productWeight": {
"weight": 1,
"weightUnit": "oz"
},
"quantity": 1
}
]
}Example standard response
{
"referenceIdentifier": "BOX_9",
"packagePlanId": "01b727d9-dd1c-4b57-b51a-9b6d49b73534",
"packageCount": 1,
"packages": [
{
"packagePlanPackageId": "467b50bc-988e-4e9a-a520-4b6a63c9ced8",
"linearDimensions": {
"linearUnit": "in",
"length": 5.5,
"height": 5,
"width": 5
},
"maxContentWeight": {
"weight": 100,
"weightUnit": "oz"
},
"packagingWeight": {
"weight": 2,
"weightUnit": "oz"
},
"packagingMaterial": "box",
"packagingSizeName": "5x5x5",
"packageEstimatedWeight": {
"weight": 3,
"weightUnit": "oz"
},
"packagingTypeId": "12313123",
"packageContents": [
{
"productLinearDimensions": {
"width": 1,
"length": 2,
"height": 1,
"linearUnit": "in"
},
"productId": "item2",
"productWeight": {
"weight": 2,
"weightUnit": "oz"
},
"quantity": 2,
"productDetails": []
}
]
}
],
"volumetricPackEfficiency": 46.55
}Example response for request to not include product details in response
{
"referenceIdentifier": "BOX_9",
"packagePlanId": "77db2333-ddd2-4824-be9d-b7f5c11de3cc",
"packageCount": 1,
"packages": [
{
"packagePlanPackageId": "9077bcdd-911d-4b4c-88c7-b1a0a40f5eb0",
"linearDimensions": {
"linearUnit": "in",
"length": 5.5,
"height": 5,
"width": 5
},
"maxContentWeight": {
"weight": 100,
"weightUnit": "oz"
},
"packagingWeight": {
"weight": 2,
"weightUnit": "oz"
},
"packagingMaterial": "box",
"packagingSizeName": "5x5x5",
"packageEstimatedWeight": {
"weight": 3,
"weightUnit": "oz"
},
"packagingTypeId": "12313123",
"packageContents": [
{
"productId": "item2",
"quantity": 2
}
]
}
],
"volumetricPackEfficiency": 46.55
}Retrieve packaging guidance by including packaging set IDs in the API call
To use the API in this way, you'll need to include a packagingSetId value. You can include the value Shipium generated (Packaging Set ID) or the one you assigned to the packaging (Packaging Set ID Alias) when you configured your packaging in the Shipium Console.
Obtain the packagingSetId value needed for the API call
To retrieve the packagingSetId value to pass in the API call, you'll need to access the details of your newly created packaging set by selecting Detail within its card on your Packaging Set homepage.
The Packaging Set ID value to copy is located near the top left of the details screen, as shown in the following screenshot. You'll include this value as the packagingSetId when calling Shipium's APIs.
The following tables provide all required and optional fields for calling the Packaging Planner API with packaging set ID(s). You can find additional support in the Packaging Planner API Reference.
Required fields
Field | Details |
|---|---|
| Type: Array of item objects |
| Type: String |
| Type: Object ( |
| Type: Decimal |
| Type: Decimal |
| Type: Decimal |
| Type: String (enumeration) |
| Type: Object ( |
| Type: Decimal |
| Type: String (enumeration) |
| Type: Integer (int32) |
| Type: String |
Optional fields
Field | Details |
|---|---|
| Type: Boolean |
| Type: Integer (int32) |
| Type: String |
| Type: String (enumeration) |
| Type: String |
Example cURL call
curl --request POST \
--url https://api.shipium.com/api/v1/packaging/planner \
--header 'accept: application/json' \
--header "$AUTHSTRING" \
--header 'content-type: application/json' \
--data 'INSERT REQUEST BODY FROM BELOW'Example request body
{
"packagingSetId": "reno-fc-packaging",
"referenceIdentifier": "PACKAGE_B",
"items": [
{
"productLinearDimensions": {
"width": 2,
"length": 2,
"height": 2,
"linearUnit": "in"
},
"productId": "item1",
"productWeight": {
"weight": 2,
"weightUnit": "oz"
},
"quantity": 1
},
{
"productLinearDimensions": {
"width": 4,
"length": 4,
"height": 4,
"linearUnit": "in"
},
"productId": "item2",
"productReferenceIdentifier": "series8item",
"productWeight": {
"weight": 1,
"weightUnit": "oz"
},
"quantity": 1
}
]
}Example standard response
{
"referenceIdentifier": "PACKAGE_B",
"packagePlanId": "98e713de-ede9-4539-8cda-bf30df660415",
"packageCount": 1,
"unpackableItems": [
{
"productLinearDimensions": {
"width": 100,
"length": 200,
"height": 100,
"linearUnit": "in"
},
"productId": "bigolproductthatisstillsomehow2oz",
"productWeight": {
"weight": 2,
"weightUnit": "oz"
},
"quantity": 1,
"productDetails": []
}
],
"packages": [
{
"packagePlanPackageId": "d015ac15-2d06-48ee-88c3-1da475e5d0c7",
"linearDimensions": {
"linearUnit": "in",
"length": 5.5,
"height": 5,
"width": 5
},
"maxContentWeight": {
"weight": 100,
"weightUnit": "oz"
},
"packagingWeight": {
"weight": 2,
"weightUnit": "oz"
},
"packagingMaterial": "box",
"packagingTypeId": "medium",
"packagingSizeName": "5x5x5",
"packageEstimatedWeight": {
"weight": 3,
"weightUnit": "oz"
},
"packageContents": [
{
"productLinearDimensions": {
"width": 1,
"length": 2,
"height": 1,
"linearUnit": "in"
},
"productId": "item2",
"productReferenceIdentifier": "series8item",
"productWeight": {
"weight": 2,
"weightUnit": "oz"
},
"quantity": 2,
"productDetails": []
}
]
}
],
"volumetricPackEfficiency": 46.55
}Example response for unpackable items
{
"referenceIdentifier": "PACKAGE_B",
"packagePlanId": "718a2543-0c35-458b-83c0-f2446947e33c",
"packageCount": 1,
"unpackableItems": [
{
"productLinearDimensions": {
"width": 100,
"length": 200,
"height": 100,
"linearUnit": "in"
},
"productId": "bigolproductthatisstillsomehow2oz",
"productWeight": {
"weight": 2,
"weightUnit": "oz"
},
"quantity": 1,
"productDetails": []
}
],
"packages": [
{
"packagePlanPackageId": "555dfcac-30e4-4899-8347-aad2a9571718",
"linearDimensions": {
"linearUnit": "in",
"length": 5.5,
"height": 5,
"width": 5
},
"maxContentWeight": {
"weight": 100,
"weightUnit": "oz"
},
"packagingWeight": {
"weight": 2,
"weightUnit": "oz"
},
"packagingMaterial": "box",
"packagingTypeId": "medium",
"packagingSizeName": "5x5x5",
"packageEstimatedWeight": {
"weight": 3,
"weightUnit": "oz"
},
"packageContents": [
{
"productLinearDimensions": {
"width": 1,
"length": 2,
"height": 1,
"linearUnit": "in"
},
"productId": "item2",
"productReferenceIdentifier": "series8item",
"productWeight": {
"weight": 2,
"weightUnit": "oz"
},
"quantity": 2,
"productDetails": []
}
]
}
],
"volumetricPackEfficiency": 46.55
}Example response for unpackable items and request to not include product details in response
{
"referenceIdentifier": "PACKAGE_B",
"packagePlanId": "0c6e3be0-f8da-4dd1-8ef9-9da5f8ccb469",
"packageCount": 1,
"unpackableItems": [
{
"productId": "bigolproductthatisstillsomehow2oz",
"quantity": 1
}
],
"packages": [
{
"packagePlanPackageId": "0304a14a-a1e9-41b9-b545-935eaf9a392f",
"linearDimensions": {
"linearUnit": "in",
"length": 5.5,
"height": 5,
"width": 5
},
"maxContentWeight": {
"weight": 100,
"weightUnit": "oz"
},
"packagingWeight": {
"weight": 2,
"weightUnit": "oz"
},
"packagingMaterial": "box",
"packagingTypeId": "medium",
"packagingSizeName": "5x5x5",
"packageEstimatedWeight": {
"weight": 3,
"weightUnit": "oz"
},
"packageContents": [
{
"productId": "item2",
"quantity": 2
}
]
}
],
"volumetricPackEfficiency": 46.55
}Response attributes for the Packaging Planner API
The Packaging Planner response attributes for passing full linear dimensions, packaging IDs, and packaging set IDs in the API call are defined in the following table.
| Response attribute | Description |
|---|---|
packagePlanId | A universally unique identifier (UUID) value representing this unique package plan response |
packageCount | The number of boxes that the items were packed into. This will be 1 unless the items are evaluated not to fit into the largest box available. The prioritization is the use of one box. |
packages | The boxes that were selected and the items that were packed into each box |
packages.packagePlanPackageId | A UUID uniquely identifying this package as part of this unique plan |
packages.linearDimensions | Linear dimensions and unit of measurement of the box available for items to be packed into |
packages.linearDimensions.length | The numerical value of the longest side of the box |
packages.linearDimensions.width | The numerical value of the second longest side of the box |
packages.linearDimensions.height | The numerical value of the shortest side of the box |
packages.linearDimensions.linearUnit | Units dimensions specified in either centimeters or inches |
packages.maxContentWeight | Maximum total combined weight of the items packed into the box |
packages.maxContentWeight.weight | Maximum weight of the packed items |
packages.maxContentWeight.weightUnit | The unit of measurement the maximum weight is specified in |
packages.packageContents | A list of the items packed into the box |
packages.packageEstimatedWeight | The estimated weight of the packed box and all its contents |
packages.packageEstimatedWeight.weight | The weight of the packed box |
packages.packageEstimatedWeight.weightUnit | The unit of measurement the estimated weight is specified in |
packages.packagingTypeId | The Shipium ID value for the packaging that was selected. Note: This response attribute is only returned when calling the API with Packaging ID(s) or Packaging Set ID(s). |
packages.packagingSizeName | The name assigned to the specified box size |
packages.packagingWeight | The weight of the empty packaging |
packages.packagingWeight.weight | The weight of the unpacked, empty box |
packages.packagingWeight.weightUnit | The unit of measurement the packaging weight is specified in |
volumetricPackEfficiency | Calculation of the entire volume of packed items and the selected box's available volume |
maxItemsPerPackage | The maximum number of items allowed to be packed in the package |
referenceIdentifier | String passed to carriers as a reference (referenceIdentifier, referenceIdentifier2, etc.) |
Resources
Your Shipium team member is available to help along the way. However, you might find these resources helpful:
Updated about 11 hours ago
