---
title: "Create custom package type"
method: POST
path: "/v1/packages"
tags: ["package_types"]
---

# Create custom package type

`POST /v1/packages`

Create a custom package type to better assist in getting accurate rate estimates

## Request body

- CreatePackageTypeRequestBody — A custom package type for API requests. Requires custom_ prefix for package_code.
  - `package_id` string — A string that uniquely identifies a ShipEngine resource, such as a carrier, label, shipment, etc.
  - `package_code` string, required — A unique, user-defined identifier for the custom package type. Must start with "custom_".
  - `name` string, required
  - `dimensions` Dimensions — The dimensions of a package
    - `unit` 'inch' | 'centimeter', required — The dimension units that are supported by ShipEngine.
    - `length` number, required — The length of the package, in the specified unit
    - `width` number, required — The width of the package, in the specified unit
    - `height` number, required — The height of the package, in the specified unit
  - `description` string, nullable — Provides a helpful description for the custom package.

## Response `200`

The request was a success.

- CreatePackageTypeResponseBody — A custom package type from API responses. May include UI-created packages without custom_ prefix.
  - `package_id` string — A string that uniquely identifies a ShipEngine resource, such as a carrier, label, shipment, etc.
  - `package_code` string, required — A unique identifier for the custom package type. API-created packages start with "custom_". UI-created packages may use other codes.
  - `name` string, required
  - `dimensions` Dimensions — The dimensions of a package
    - `unit` 'inch' | 'centimeter', required — The dimension units that are supported by ShipEngine.
    - `length` number, required — The length of the package, in the specified unit
    - `width` number, required — The width of the package, in the specified unit
    - `height` number, required — The height of the package, in the specified unit
  - `description` string, nullable — Provides a helpful description for the custom package.

## Other responses

- `400` — The request contained errors.
- `500` — An error occurred on ShipEngine's side. > This error will automatically be reported to our engineers.

## Changes

- **2026-08-15** `f3a66d204565` — 12 warning
  - added the new `freight_connection_inactive` enum value to the `errors/items/allOf[subschema #1: error]/error_code/allOf[subschema #1: error_code]/` response property for the response status `400`
  - added the new `freight_connection_inactive` enum value to the `errors/items/allOf[subschema #1: error]/error_code/allOf[subschema #1: error_code]/` response property for the response status `500`
  - added the new `freight_provider_id_required` enum value to the `errors/items/allOf[subschema #1: error]/error_code/allOf[subschema #1: error_code]/` response property for the response status `400`
  - added the new `freight_provider_id_required` enum value to the `errors/items/allOf[subschema #1: error]/error_code/allOf[subschema #1: error_code]/` response property for the response status `500`
  - …8 more

[Change history](https://skmtc.dev/shipstation/apis/shipengine-api/changes/v1/packages/post.md)

---

[API](https://skmtc.dev/shipstation/apis/shipengine-api.md) · [All operations](https://skmtc.dev/shipstation/apis/shipengine-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/shipstation/shipengine-api/revisions/8d8a7cf79204/schema)
