> For the complete documentation index, see [llms.txt](https://docs.partner.aboutyou.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.partner.aboutyou.com/api/products/create-and-update-products.md).

# Create and Update Products

## Upsert Product

> Create or update products.\
> \
> Identical payloads sent within a short window (a few hours) are\
> de-duplicated: the same batchRequestId is returned and the upsert is not\
> reprocessed. Clients can detect this by comparing the returned\
> batchRequestId across submissions. Send stock and price changes through the\
> dedicated /stocks and /prices endpoints, which are always applied.\
> \
> Seller Center caches a downloaded image for at least three days and ignores\
> changes behind the same URL in that time. If a URL fails with HTTP 400, 401,\
> 403, 404 or 410, or fails validation, Seller Center reports the same error\
> for three days. To change an image sooner, send a new URL. Serve images with\
> an ETag or Last-Modified header, so Seller Center downloads an unchanged\
> image only once.\
> \
> \*\*Rate limit:\*\* 100 requests per minute

```json
{"openapi":"3.1.0","info":{"title":"Sellers Center API","version":"1.3.3"},"security":[{"APIKeyAuth":[]}],"components":{"securitySchemes":{"APIKeyAuth":{"type":"apiKey","in":"header","name":"X-API-Key"}},"schemas":{"BatchRequestResponseSchema":{"properties":{"batchRequestId":{"description":"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. Results are available for 7 days.","format":"uuid","title":"Batchrequestid","type":"string"}},"required":["batchRequestId"],"title":"BatchRequestResponseSchema","type":"object"},"BadRequestSchema":{"properties":{"message":{"description":"Error message","title":"Message","type":"string"}},"required":["message"],"title":"BadRequestSchema","type":"object"},"UpsertProductSchema":{"properties":{"items":{"description":"List of product variants to upsert.","items":{"$ref":"#/components/schemas/UpsertProductItemSchema"},"maxItems":100,"minItems":1,"title":"Items","type":"array"}},"required":["items"],"title":"UpsertProductSchema","type":"object"},"UpsertProductItemSchema":{"properties":{"style_key":{"description":"Unique style key for the product.","maxLength":120,"title":"Style Key","type":"string"},"colorway_key":{"anyOf":[{"maxLength":120,"type":"string"},{"type":"null"}],"description":"Reference key for the colorway, one style in one color combination. Sits between style_key and sku. When set, it identifies the product and the colors in this item are written to it. When omitted, the product is matched by its colors, which is deprecated: send the colorway_key returned by GET /products to adopt explicit keys without creating duplicate products.","title":"Colorway Key"},"sku":{"maxLength":120,"minLength":3,"title":"Sku","type":"string"},"ean":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"EAN-13 barcode (13 digits with valid GS1 prefix and checksum)","title":"Ean"},"hs_code":{"anyOf":[{"maxLength":20,"type":"string"},{"type":"null"}],"title":"Hs Code"},"name":{"anyOf":[{"maxLength":120,"type":"string"},{"type":"null"}],"description":"Include only the product/design name. Don't add categories, colors, materials etc. If there is no specific design name, leave the field empty.","title":"Name"},"description":{"anyOf":[{"maxLength":2500,"type":"string"},{"type":"null"}],"deprecated":true,"description":"Use descriptions instead","title":"Description"},"descriptions":{"anyOf":[{"$ref":"#/components/schemas/LocalizedDescriptionSchema"},{"type":"null"}]},"color":{"anyOf":[{"description":"ID (integer) of this property","minimum":1,"type":"integer"},{"items":{"description":"ID (integer) of this property","minimum":1,"type":"integer"},"minItems":1,"type":"array"}],"description":"Color attribute id, or a list of ids up to the configured maximum. A single id and a one-element list are equivalent.","title":"Color"},"size":{"anyOf":[{"description":"ID (integer) of this property","minimum":1,"type":"integer"},{"type":"null"}],"title":"Size"},"second_size":{"anyOf":[{"description":"ID (integer) of this property","minimum":1,"type":"integer"},{"type":"null"}],"title":"Second Size"},"brand":{"description":"ID (integer) of this property","minimum":1,"title":"Brand","type":"integer"},"category":{"description":"ID (integer) of this property","minimum":1,"title":"Category","type":"integer"},"category_secondary":{"anyOf":[{"description":"ID (integer) of this property","minimum":1,"type":"integer"},{"type":"null"}],"description":"Id of the unisex counterpart of `category`, to list the product in both. Omit it to list the product in `category` alone. Only a category's `unisex_counterpart` from GET /categories/ is accepted, and only while the unisex listing is offered.","title":"Category Secondary"},"quantity":{"anyOf":[{"minimum":0,"type":"integer"},{"type":"null"}],"description":"Quantity of the product variant.","title":"Quantity"},"weight":{"description":"Weight of the product in grams.","maximum":100000,"minimum":0,"title":"Weight","type":"integer"},"countries":{"anyOf":[{"items":{"description":"ISO 3166-1 alpha-2 country code","pattern":"^[A-Za-z]{2}$","type":"string"},"minItems":0,"type":"array"},{"type":"null"}],"title":"Countries"},"country_of_origin":{"description":"ISO 3166-1 alpha-2 country code","pattern":"^[A-Za-z]{2}$","title":"Country Of Origin","type":"string"},"attributes":{"description":"Additional category-specific attribute IDs; fields already provided as top-level fields (e.g. size, brand, color) can not be repeated here.","items":{"description":"ID (integer) of this property","minimum":1,"type":"integer"},"title":"Attributes","type":"array"},"material_composition_textile":{"anyOf":[{"items":{"$ref":"#/components/schemas/MaterialCompositionTextileSchema"},"type":"array"},{"type":"null"}],"title":"Material Composition Textile"},"material_composition_non_textile":{"anyOf":[{"items":{"$ref":"#/components/schemas/MaterialCompositionNonTextileSchema"},"type":"array"},{"type":"null"}],"title":"Material Composition Non Textile"},"prices":{"items":{"$ref":"#/components/schemas/PriceSchema"},"minItems":0,"title":"Prices","type":"array"},"images":{"description":"Image URLs. Seller Center caches image download results. If you change an image, give it a new URL so Seller Center recognizes the change immediately.","items":{"type":"string"},"maxItems":10,"minItems":1,"title":"Images","type":"array"}},"required":["style_key","sku","color","size","brand","category","weight","country_of_origin","attributes","prices","images"],"title":"UpsertProductItemSchema","type":"object"},"LocalizedDescriptionSchema":{"additionalProperties":{"type":"string"},"description":"Schema for handling localized descriptions with locale keys.","title":"LocalizedDescriptionSchema","type":"object"},"MaterialCompositionTextileSchema":{"properties":{"cluster_id":{"description":"ID (integer) of this property","minimum":1,"title":"Cluster Id","type":"integer"},"components":{"items":{"$ref":"#/components/schemas/TextileMaterialSchema"},"title":"Components","type":"array"}},"required":["cluster_id","components"],"title":"MaterialCompositionTextileSchema","type":"object"},"TextileMaterialSchema":{"properties":{"material_id":{"description":"ID (integer) of this property","minimum":1,"title":"Material Id","type":"integer"},"fraction":{"description":"Fraction of the material in the composition in percentage.","title":"Fraction","type":"integer"}},"required":["material_id","fraction"],"title":"TextileMaterialSchema","type":"object"},"MaterialCompositionNonTextileSchema":{"properties":{"cluster_id":{"description":"ID (integer) of this property","minimum":1,"title":"Cluster Id","type":"integer"},"components":{"items":{"$ref":"#/components/schemas/NonTextileMaterialSchema"},"title":"Components","type":"array"}},"required":["cluster_id","components"],"title":"MaterialCompositionNonTextileSchema","type":"object"},"NonTextileMaterialSchema":{"properties":{"material_id":{"description":"ID (integer) of this property","minimum":1,"title":"Material Id","type":"integer"}},"required":["material_id"],"title":"NonTextileMaterialSchema","type":"object"},"PriceSchema":{"properties":{"country_code":{"description":"ISO 3166-1 alpha-2 country code","pattern":"^[A-Za-z]{2}$","title":"Country Code","type":"string"},"currency":{"anyOf":[{"description":"ISO 4217 alpha-3 currency code","pattern":"^[A-Za-z]{3}$","type":"string"},{"type":"null"}],"description":"**Warning:** this field is currently optional, but will become mandatory soon - always send it. Currency the prices are denominated in. Must match the currency configured for the country - see the countries endpoint for the currency of each country.","title":"Currency"},"retail_price":{"exclusiveMinimum":0,"maximum":1000000,"title":"Retail Price","type":"number"},"sale_price":{"anyOf":[{"exclusiveMinimum":0,"maximum":1000000,"type":"number"},{"type":"null"}],"title":"Sale Price"}},"required":["country_code","retail_price"],"title":"PriceSchema","type":"object"}}},"paths":{"/api/v1/products/":{"post":{"operationId":"scapi_app_endpoints_product_api_upsert_product","summary":"Upsert Product","parameters":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BatchRequestResponseSchema"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestSchema"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestSchema"}}}},"default":{"headers":{"X-RateLimit-Limit":{"description":"Total requests allowed in the time window","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Seconds until the current window resets","schema":{"type":"integer"}}}}},"description":"Create or update products.\n\nIdentical payloads sent within a short window (a few hours) are\nde-duplicated: the same batchRequestId is returned and the upsert is not\nreprocessed. Clients can detect this by comparing the returned\nbatchRequestId across submissions. Send stock and price changes through the\ndedicated /stocks and /prices endpoints, which are always applied.\n\nSeller Center caches a downloaded image for at least three days and ignores\nchanges behind the same URL in that time. If a URL fails with HTTP 400, 401,\n403, 404 or 410, or fails validation, Seller Center reports the same error\nfor three days. To change an image sooner, send a new URL. Serve images with\nan ETag or Last-Modified header, so Seller Center downloads an unchanged\nimage only once.\n\n**Rate limit:** 100 requests per minute","tags":["Products"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpsertProductSchema"}}},"required":true}}}}}
```


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://docs.partner.aboutyou.com/api/products/create-and-update-products.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
