← Files WixARCHIVED FILE

skills/wix-manage/references/stores/create-product-catalog-v1.md

4.45 KB · Oct 3, 2026 · 06:02 UTC

↓ Download file

---
name: "Create Product (Catalog V1)"
description: Create products using the Catalog V1 Products API. Use this recipe when the site's catalog version is CATALOG_V1. Covers simple product creation, product with options, and key V1 request structure differences from V3.
---
# RECIPE: Business Recipe - Create Product (Catalog V1)

## STEP 1: Create a Simple Product

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).

```bash
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 |

---

## STEP 2: Create a Product with Options

In V1, options are defined via `productOptions`. Variants are **auto-generated** from the choices — you do not need to define them manually.

```bash
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 swatches
- `choices[].description`: Display name shown to customers
- `choices[].value`: Internal value (use hex color code for `color` type, e.g. `"#000000"`)
- `choices[].inStock`: Whether this choice is in stock
- `choices[].visible`: Whether this choice is visible to customers

**Variants in V1 responses** are returned as an object with option name keys:
```json
"choices": {
  "Weight": "250g",
  "Ground for": "Stovetop"
}
```
This is different from V3 which uses an array structure.

---

## Key Differences from V3

| 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) |

---

## Important Notes

- **Never use `/stores/v3/` endpoints on a CATALOG_V1 site** — they return `428 Precondition Required`.
- Check the site's catalog version in dynamic context before choosing endpoints.
- `productType` only supports `"physical"` via the API.
- To add media to a product, use the separate **Add Product Media** endpoint after creation.
- To query products on a V1 site, see [Query Products (Catalog V1)](query-products-catalog-v1.md).

## References

- [V1 Create Product](https://dev.wix.com/docs/api-reference/business-solutions/stores/catalog-v1/catalog/create-product)
- [Catalog Versioning Overview](https://dev.wix.com/docs/api-reference/business-solutions/stores/catalog-versioning/introduction)

SHA-256: 78b0106a1c0c098910550ac3a96f8f2e3f549798ec246a3312f85171d5ad6dee