Skip to main content
POST
/
products
Create a product
curl --request POST \
  --url https://{domain}/api/site/products \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '
{
  "title": "Interior Door",
  "description": "<string>",
  "url": "interior-door",
  "hidden": true,
  "images": [
    "<string>"
  ],
  "categories": [
    {
      "id": 1,
      "name": "Doors",
      "url": "doors",
      "parentCategory": 0
    }
  ],
  "options": [
    {
      "name": "Material",
      "values": [
        "Wood",
        "Glass"
      ],
      "advanced": true
    }
  ],
  "variants": [
    {
      "options": [
        "Wood",
        "Single"
      ],
      "price": 199,
      "onSale": true,
      "regularPrice": 123,
      "salePrice": 123,
      "quantity": 123,
      "sku": "D-001",
      "weight": 123
    }
  ],
  "subscription": {
    "cycles": 123,
    "period": 123
  },
  "file": "<string>"
}
'
{
  "id": 111,
  "title": "Interior Door",
  "description": "<string>",
  "url": "interior-door",
  "hidden": true,
  "images": [
    "https://path-to-image.jpg",
    "https://path-to-another-image.jpg"
  ],
  "categories": [
    {
      "id": 1,
      "name": "Doors",
      "url": "doors",
      "parentCategory": 0
    }
  ],
  "options": [
    {
      "name": "Material",
      "values": [
        "Wood",
        "Glass"
      ],
      "advanced": true
    }
  ],
  "variants": [
    {
      "options": [
        "Wood",
        "Single"
      ],
      "price": 199,
      "onSale": true,
      "regularPrice": 123,
      "salePrice": 123,
      "quantity": 123,
      "sku": "D-001",
      "weight": 123
    }
  ],
  "subscription": {
    "cycles": 123,
    "period": 123
  },
  "file": "<string>"
}

Authorizations

Authorization
string
header
required

Pass your API key as: Authorization: Bearer <API KEY>.

Query Parameters

update_existing_product_by_url
boolean

If true and a product with the same URL exists, the existing product is updated instead.

Example:

true

Body

application/json
type
enum<string>
required
Available options:
physical,
digital,
service,
membership
title
string
required
Example:

"Interior Door"

description
string
url
string
Example:

"interior-door"

hidden
boolean
images
string<uri>[]
categories
object[]
options
object[]
variants
object[]
subscription
object

Subscription details for a subscription product.

file
string<uri>

Response

200 - application/json

The created or updated product.

id
integer

Unique identifier.

Example:

111

type
enum<string>

The type of the product.

Available options:
physical,
digital,
service,
membership
title
string
Example:

"Interior Door"

description
string

Supports light HTML formatting.

url
string

The product URL (handle) in your store.

Example:

"interior-door"

hidden
boolean

Whether the product is hidden in your store front.

images
string<uri>[]
Example:
[
"https://path-to-image.jpg",
"https://path-to-another-image.jpg"
]
categories
object[]
options
object[]
variants
object[]
subscription
object

Subscription details for a subscription product.

file
string<uri>

Digital products only - URL of the digital file being sold.

Last modified on June 20, 2026