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

# Create or update products

`POST /v1/products`

## Request

- Base URL: `https://api.sandbox.usenash.com`
- URL: `https://api.sandbox.usenash.com/v1/products`
- Auth: none declared

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
      - `imageUrls` string[], nullable: Provider-specific image URLs for this product. When set, these override the product-level image_urls for this provider.
      - `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
    - `imageUrls` string[], nullable: Provider-specific image URLs for this product. When set, these override the product-level image_urls for this provider.
    - `enabled` boolean, nullable: Whether this provider config is enabled

## Other responses

- `422`: Unprocessable Content

---

[API](https://skmtc.dev/nash/apis/nash-api.md) - [All operations](https://skmtc.dev/nash/apis/nash-api/llms.txt) - [OpenAPI document](https://skmtc.dev/nash/apis/nash-api/revisions/e3713837c5c9?raw)
