---
title: "Upsert Product"
method: POST
path: "/api/v1/products/"
tags: ["Products"]
---

# Upsert Product

`POST /api/v1/products/`

**Rate limit:** 100 requests per minute

## Request body

- UpsertProductSchema
  - `items` UpsertProductItemSchema[], required — List of product variants to upsert.
    - `style_key` string, required — Unique style key for the product.
    - `sku` string, required
    - `ean` string, nullable — EAN-13 barcode (13 digits with valid GS1 prefix and checksum)
    - `hs_code` string, nullable
    - `name` string, nullable — Include only the product/design name. Don't add categories, colors, materials etc. If there is no specific design name, leave the field empty.
    - `description` string, nullable — Use descriptions instead
    - `descriptions` LocalizedDescriptionSchema — Schema for handling localized descriptions with locale keys.
    - `color` integer, required — ID (integer) of this property
    - `size` integer, nullable, required — ID (integer) of this property
    - `second_size` integer, nullable — ID (integer) of this property
    - `brand` integer, required — ID (integer) of this property
    - `category` integer, required — ID (integer) of this property
    - `quantity` integer, nullable — Quantity of the product variant.
    - `weight` integer, required — Weight of the product in grams.
    - `countries` string[], nullable
    - `country_of_origin` string, required — ISO 3166-1 alpha-2 country code
    - `attributes` integer[], required — Additional category-specific attribute IDs; fields already provided as top-level fields (e.g. size, brand, color) can not be repeated here.
    - `material_composition_textile` MaterialCompositionTextileSchema[], nullable
      - `cluster_id` integer, required — ID (integer) of this property
      - `components` TextileMaterialSchema[], required
        - `material_id` integer, required — ID (integer) of this property
        - `fraction` integer, required — Fraction of the material in the composition in percentage.
    - `material_composition_non_textile` MaterialCompositionNonTextileSchema[], nullable
      - `cluster_id` integer, required — ID (integer) of this property
      - `components` NonTextileMaterialSchema[], required
        - `material_id` integer, required — ID (integer) of this property
    - `prices` PriceSchema[], required
      - `country_code` string, required — ISO 3166-1 alpha-2 country code
      - `retail_price` number, required
      - `sale_price` number, nullable
    - `images` string[], required

## Response `200`

OK

- BatchRequestResponseSchema
  - `batchRequestId` string, uuid, required — ID of the asynchronous batch request. Identical payloads from the same merchant within the deduplication window return the existing in-flight ID instead of queuing a new batch. Poll the results endpoint with this ID to retrieve the outcome.

## Other responses

- `400` — Bad Request
- `401` — Unauthorized
- `default`

---

[API](https://skmtc.dev/aboutyou/apis/sellers-center-api.md) · [All operations](https://skmtc.dev/aboutyou/apis/sellers-center-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/aboutyou/sellers-center-api/revisions/578d18d6e63c/schema)
