---
title: "Create Product"
method: POST
path: "/v1/integrations/product"
tags: ["Products"]
---

# Create Product

`POST /v1/integrations/product`

This endpoint allows merchants to create products within ShipMonk. Once created, product data is immutable via API — updates must be made via the ShipMonk web app. SKUs must be unique within the account. ShipMonk will reject non-unique SKUs with a 400 error.

The required_packaging field defines the minimum packaging suitable for a product. When fulfilling an order, ShipMonk selects the smallest packaging type that satisfies every item in the shipment — for example, if an order contains one product that can ship in a poly mailer and another that requires a box, the entire order ships in a box.
Field country_of_origin accepts a 2-letter ISO 3166-1 alpha-2 country code.

## Fragile products
Fragile products must have required_packaging set to box. Submitting any other value will return a 400 error.

## Request body

- ShipMonkPublicApiProductProductCreateCreateProductInput
  - `product_key` string, required — Unique identifier for the product in your external system. Must be unique across all your products.
  - `sku` string, required — Stock Keeping Unit (SKU) identifying the product. Must be unique across all active products in your account.
  - `name` string, required — Human-readable product name displayed in the UI and on documents.
  - `required_packaging` 'poly_mailer' | 'bubble_mailer' | 'box' | 'slap_a_label' | 'custom', required
  - `fragile` boolean, required — Whether the product requires fragile handling during fulfillment. If true, required_packaging must be box.
  - `replacement_cost` number, double, required — Cost to replace the product, used for insurance and claims. Must be positive, in the currency given by currency_code.
  - `customs_declaration_value` number, double, required — Declared customs value per unit, used to calculate duties and taxes on international shipments. Must be positive, in the currency given by currency_code.
  - `country_of_origin` string, required — Country of origin as an ISO 3166-1 alpha-2 code (e.g. US, DE, CN), used on customs documentation for international shipments.
  - `barcodes` string[], required — Barcodes associated with the product (e.g. UPC, EAN, ISBN). Each barcode must be 1-255 characters; pass an empty array if none.
  - `dimensions_in` ShipMonkPublicApiProductProductCreateDimensionsInInput
    - `width` number, double, required — Product width in inches. Must be positive.
    - `height` number, double, required — Product height in inches. Must be positive.
    - `length` number, double, required — Product length in inches. Must be positive.
  - `weight_lb` number, double, nullable — Product weight in pounds (decimal). Must be positive. Omit or set null if weight is unknown.
  - `currency_code` string — ISO 4217 currency code (e.g. USD, EUR) for replacement_cost and customs_declaration_value. Defaults to USD.
  - `hs_code` string, nullable — Default Harmonized System (HS) code used on customs declarations when no region-specific code in hs_codes matches. Max 255 characters.
  - `hs_codes` ShipMonkPublicApiProductProductCreateIntegrationHsCodePerRegionInput[] — Region-specific Harmonized System (HS) codes used for customs classification per destination region. Takes precedence over hs_code when a matching region is found.
    - `hs_code` string, required — Harmonized System (HS) code for customs classification. Must be 1-255 characters.
    - `region` 'us' | 'uk' | 'eu', required
  - `image_url` string, nullable — Publicly accessible URL of the product image. Must be a valid URL and unique across all your products.
  - `custom_data` ShipMonkPublicApiProductProductCreateIntegrationCustomDataItemInput[] — Custom key/value metadata to attach to the product, typically used for integration-specific data.
    - `name` string, required — Key of the custom data item. Must be 2-255 characters.
    - `value` string, required — Value of the custom data item. Maximum 65536 characters.
  - `product_handling_units` ShipMonkPublicApiProductProductCreateProductHandlingUnitInput[] — List of handling units (inner carton, master carton, pallet) describing the product's packaging hierarchy used for receiving and storage. Omit if the product ships as individual units only.
    - `type` 'inner_carton' | 'master_carton' | 'pallet', required
    - `weight_lb` number, double, nullable — Weight of the handling unit in pounds; must be positive. Provide when known to support shipping and storage calculations.
    - `dimensions_in` ShipMonkPublicApiProductProductCreateDimensionsInInput
      - `width` number, double, required — Product width in inches. Must be positive.
      - `height` number, double, required — Product height in inches. Must be positive.
      - `length` number, double, required — Product length in inches. Must be positive.
    - `count` integer, nullable, required — Number of individual product units contained in this handling unit. Must be a positive integer.
  - `lot_control_settings` ShipMonkPublicApiProductProductCreateIntegrationProductLotControlSettingInput
    - `is_lot_number_required` boolean, required — When true, a lot number must be captured every time this product is received into inventory.
    - `is_expiration_date_required` boolean, required — When true, an expiration date must be captured every time this product is received into inventory.
    - `is_labeled_with_expiration_date_only` boolean — When true, the product label shows only the expiration date (without the lot number). Can only be enabled when both is_lot_number_required and is_expiration_date_required are true.

## Response `200`

Success

- object
  - `status` integer, required
  - `data` FulfillmentAccountApiBundleApiResourceMessageOutput, required
    - `message` string, required

---

[API](https://skmtc.net/shipmonk/apis/shipmonk-api.md) · [All operations](https://skmtc.net/shipmonk/apis/shipmonk-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/shipmonk/shipmonk-api/revisions/5dc3234a38a5/schema)
