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.

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 Calls

In 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.

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.

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

JSON

{
  "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

JSON

{
  "productCompressionFactor": {
    "compressionFactor": 0.2,
    "compressHeight": true,
    "compressWidth": false,
    "compressLength": false
  }
}

Packaging compression block in context of the items block

JSON

{
  "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
items Type: Array of item objects
Description: A list of the items to be packed into an available box
packaging Type: Array of packaging objects
Description: Dimensions and restrictions for available boxes to pack the items into. Must contain at least one item.
packaging.linearDimensions Type: Object (linearDimensions)
Description: The linear dimensions and unit of a box available for packing
packaging.linearDimensions.length Type: Decimal
Description: Length of the longest side of the box to be packed. Must be a value greater than zero.
packaging.linearDimensions.width Type: Decimal
Description: Length of the second longest side of the box to be packed. Must be a value greater than zero.
packaging.linearDimensions.height Type: Decimal
Description: Length of the shortest side of the box to be packed. Must be a value greater than zero.
packaging.linearDimensions.linearUnit Type: String (enumeration)
Values:in (inch), cm (centimeter)
Description: The unit of measurement in which the linear dimensions of the box are specified
packaging.maxContentWeight Type: Object (maxContentWeight)
Description: The maximum total combined weight of the items packed into the box
packaging.maxContentWeight.weight Type: Decimal
Description: The maximum weight of all the packed items. Must be a positive value.
packaging.maxContentWeight.weightUnit Type: String (enumeration)
Values:lb (pound), kg (kilogram)
Description: The unit of measurement in which the maximum weight is specified
packaging.packagingWeight Type: Object (packagingWeight)
Description: The weight of the empty box
packaging.packagingWeight.weight Type: Decimal
Description: The weight of the empty box. Must be a positive value.
packaging.packagingWeight.weightUnit Type: String (enumeration)
Values:lb (pound), kg (kilogram)
Description: The unit of measurement in which the empty box weight is specified
packaging.packagingMaterial Type: String (enumeration)
Values:box, envelope, flat_pack, mailing_tube, parcel_pallet
Description: The type of packaging used to create the package for the shipment
packaging.packagingSizeName Type: String
Example:A1, 12x12x6 box
Description: The name your organization assigned to the specified box size

Optional fields

Field Details
includeDetails Type: Boolean
Values:true or false
Description: A flag indicating whether to include dimensional details of the items to be packed in the API call response. Defaults to true, which results in full linear dimensions of the items being returned in the API call response.
maxItemsPerPackage 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.
referenceIdentifier Type: String
Description: String passed to carriers as a reference. This field can be expanded to include multiple reference identifiers by adding sequential numbers to the field name (e.g., referenceIdentifier2) up to 5 reference identifiers.
packaging.maxItemsPerPackage 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 maxItemsPerPackage value, if one was included. Must be a value greater than 0.
packaging.unsupportedProductDetails Type: String (enumeration)
Values:ormd (other regulated materials—domestic), lio (lithium-ion), fragile
Description: Restricted product types that cannot be packed into this box (e.g., hazmat)

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
packingStrategyOptions.packingAlgorithm Type: String (enumeration)
Values:standard, volumetric
Description: Specifies which packing algorithm to use. standard is a cubic packer that places items based on their size and how they fit together. volumetric is a "liquid" packing algorithm that fits items by ensuring no item dimension exceeds the package dimension, then assumes perfect volumetric packing.
packingStrategyOptions.packingAlgorithmOptions.volumetricPackingEfficiency Type: Decimal
Condition: Applies only when using the volumetric algorithm
Description: Constrains packing to be more (less than 1) or less (greater than 1) than the raw dimensions of the packaging. For example, a value of 0.9 allows the volume of packed items to be less than or equal to 90% of the packaging volume. Does not impact height, width, or length constraints—only volume limitations.
packingStrategyOptions.packingAlgorithmOptions.pureVolumetricPacking Type: Boolean
Values:true or false
Condition: Applies only when using the volumetric algorithm
Description: When true, does not place restrictions on product height, width, or length relative to the packaging size. Selects packaging based purely on volumetric size, choosing the smallest volume that satisfies the condition that the sum of (item volume × item quantity) for all items is less than or equal to the package volume multiplied by volumetricPackingEfficiency. Defaults to false.

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
items.productCompressionFactor Type: Object (productCompressionFactor)
Description: Compression factor settings that reflect the degree to which a product can be compressed in one or more dimensions (height, width, length)
items.productCompressionFactor.compressionFactor Type: Decimal
Description: A value less than 1 that 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 of 4, given the compression formula of 5*(1 - 0.2).
items.productCompressionFactor.compressHeight Type: Boolean
Values:true or false
Description: Indicates whether the compression factor should apply to the height dimension
items.productCompressionFactor.compressWidth Type: Boolean
Values:true or false
Description: Indicates whether the compression factor should apply to the width dimension
items.productCompressionFactor.compressLength Type: Boolean
Values:true or false
Description: Indicates whether the compression factor should apply to the length dimension

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 6 months ago


What’s Next