Setting the file. One moment.
Subchapter 8.97
references/stores/create-product-catalog-v1.mdMarkdown4 KBView on GitHub
Use POST https://www.wixapis.com/stores/v1/products to create a product.
CRITICAL: Description accepts an HTML string in V1 (unlike V3 which requires rich text nodes).
curl -X POST 'https://www.wixapis.com/stores/v1/products' \
-H 'Content-Type: application/json' \
-H 'Authorization: <AUTH>' \
-d '{
"product": {
"name": "Air Max Runner",
"description": "<p>Premium running sneaker with advanced cushioning technology.</p>",
"visible": true,
"productType": "physical",
"priceData": {
"price": 129.99
}
}
}'Key V1 fields:
| Field | Type | Notes |
|---|---|---|
name | string | Required. Max 80 characters |
description | string | HTML string — NOT rich text nodes (e.g. "<p>text</p>") |
productType | string | "physical" only (digital not supported via API) |
priceData.price | number | Product base price |
visible | boolean | Whether the product is visible to customers |
In V1, options are defined via productOptions. Variants are auto-generated from the choices — you do not need to define them manually.
curl -X POST 'https://www.wixapis.com/stores/v1/products' \
-H 'Content-Type: application/json' \
-H 'Authorization: <AUTH>' \
-d '{
"product": {
"name": "Colombian Arabica",
"description": "<p>The best organic coffee that Colombia has to offer.</p>",
"visible": true,
"productType": "physical",
"priceData": {
"price": 35
},
"productOptions": [
{
"name": "Weight",
"optionType": "drop_down",
"choices": [
{ "value": "250g", "description": "250g", "inStock": true, "visible": true },
{ "value": "500g", "description": "500g", "inStock": true, "visible": true }
]
},
{
"name": "Ground for",
"optionType": "drop_down",
"choices": [
{ "value": "Stovetop", "description": "Stovetop", "inStock": true, "visible": true },
{ "value": "Filter", "description": "Filter", "inStock": true, "visible": true }
]
}
]
}
}'V1 Options structure:
optionType: "drop_down" for text choices, "color" for color swatcheschoices[].description: Display name shown to customerschoices[].value: Internal value (use hex color code for color type, e.g. "#000000")choices[].inStock: Whether this choice is in stockchoices[].visible: Whether this choice is visible to customersVariants in V1 responses are returned as an object with option name keys:
"choices": {
"Weight": "250g",
"Ground for": "Stovetop"
}This is different from V3 which uses an array structure.
| Feature | Catalog V1 | Catalog V3 |
|---|---|---|
| Create endpoint | POST /stores/v1/products | POST /stores/v3/products |
| Description | HTML string ("<p>text</p>") | Rich text nodes object |
| Options field | productOptions | options |
| Option type field | optionType (drop_down, color) | optionRenderType (TEXT_CHOICES, SWATCH_CHOICES) |
| Choice visibility | choices[].visible | choices[].isVisible |
| Variants | Auto-generated from choices | Must be explicitly defined in variantsInfo.variants |
| Variant choices | Object: {"Weight": "250g"} | Array of optionChoiceNames |
| Price field | priceData.price (number) | price.actualPrice.amount (string) |
/stores/v3/ endpoints on a CATALOG_V1 site — they return 428 Precondition Required.productType only supports "physical" via the API.