---
title: "Create or update products"
method: POST
path: "/v1/products"
tags: ["Store Catalog"]
---

# Create or update products

`POST /v1/products`

Create new products or update existing ones in the store catalog. Products are matched by external identifier for upsert logic.

## Request body

- ProductsInputSerializer
  - `products` ProductInputSerializer[], required — List of products to create
    - `externalIdentifier` string, nullable — The external ID of the product from an external system
    - `sku` string, nullable — The Stock Keeping Unit (SKU) for the product
    - `name` string, required — The name of the product
    - `description` string, nullable — The description of the product
    - `imageUrls` string[], nullable — List of image URLs for the product
    - `categories` string[], required — List of categories the product belongs to
    - `weight` number, required — The weight of the product
    - `dimensions` DimensionInputSerializer, required
      - `depth` number, nullable — The depth dimension of the product
      - `width` number, nullable — The width dimension of the product
      - `height` number, nullable — The height dimension of the product
    - `identifiers` IdentifierInputSerializer[], required — List of identifiers for the product
      - `type` string, required — The type of identifier
      - `value` string, required — The value of the identifier
    - `attributes` string[], nullable — List of attributes for the product
    - `details` DetailsInputSerializer
      - `weightedItemInfo` WeightedItemInfoInputSerializer
        - `weightPerItem` number, nullable — The weight per individual item
        - `weightUnit` string, nullable — The unit of weight measurement
      - `sizeSpecification` SizeSpecificationInputSerializer
        - `value` number, nullable — The size value
        - `description` string, nullable — Description of the size specification
      - `packSizeSpecification` PackSizeSpecificationInputSerializer
        - `value` string, nullable — The size value
        - `description` string, nullable — Description of the size specification
      - `skillsRequired` string[], nullable — Skills required for handling this product
      - `dropoffServiceTimeSeconds` integer, nullable — Service time in seconds for handling this product at the dropoff (e.g. install, setup)
    - `providerConfigs` ProviderConfigInputSerializer[], nullable — Provider-specific configurations for this product
      - `provider` string, required — Provider name
      - `serviceType` string, required — Service type (e.g., pick_and_deliver, marketplace)
      - `categories` string[], nullable — Provider-specific categories for this product
      - `enabled` boolean, nullable — Whether this provider config is enabled

## Response `200`

OK

- ProductOutputSerializer[] — Expected output when listing products, it will return an array of ProductOutputSerializer.
  - `id` string, required
  - `externalIdentifier` string, nullable — The external ID of the product from an external system
  - `sku` string, nullable — The Stock Keeping Unit (SKU) for the product
  - `name` string, required — The name of the product
  - `description` string, nullable — The description of the product
  - `imageUrls` string[], nullable — List of image URLs for the product
  - `categories` string[], nullable — List of categories the product belongs to
  - `weight` number, nullable — The weight of the product
  - `dimensions` DimensionOutputSerializer
    - `depth` number, nullable — The depth dimension of the product
    - `width` number, nullable — The width dimension of the product
    - `height` number, nullable — The height dimension of the product
  - `identifiers` IdentifierOutputSerializer[], nullable — List of identifiers for the product
    - `type` string, required — The type of identifier
    - `value` string, required — The value of the identifier
  - `attributes` string[], nullable — List of attributes for the product
  - `details` DetailsOutputSerializer
    - `weightedItemInfo` WeightedItemInfoOutputSerializer
      - `weightPerItem` number, nullable — The weight per individual item
      - `weightUnit` string, nullable — The unit of weight measurement
    - `sizeSpecification` SizeSpecificationOutputSerializer
      - `value` number, nullable — The size value
      - `description` string, nullable — Description of the size specification
    - `packSizeSpecification` PackSizeSpecificationOutputSerializer
      - `value` string, nullable — The size value
      - `description` string, nullable — Description of the size specification
  - `providerConfigs` ProviderConfigOutputSerializer[], nullable — Provider-specific configurations for this product
    - `provider` string, required — Provider name
    - `serviceType` string, required — Service type (e.g., pick_and_deliver, marketplace)
    - `categories` string[], nullable — Provider-specific categories for this product
    - `enabled` boolean, nullable — Whether this provider config is enabled

## Other responses

- `422` — Unprocessable Content

---

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