Skip to content

Create a product

POST
/products/
curl --request POST \
--url 'https://api.semantico.ai/api/v1/products/?locale=en-US' \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{ "sku": "SKU-001", "barcode": "840000000001", "brand": "Acme", "category": "Root > Subcategory", "name": "Acme water bottle 750ml", "url": "https://example.com/product-page", "images": [ { "source_url": "https://example.com/image-1.jpg", "order": 0 } ], "variants": [ { "sku": "SKU-001-RED", "barcode": "840000000101", "name": "Red variant" } ] }'

Creates a new product, optionally with variants. If a product with a matching barcode, sku, mpn, asin, or external_id already exists, the request updates it idempotently. When variants is provided, the product is created as a product model and variant creation runs in the background.

locale
string
Example
en-US

Locale for name, description, and attributes. Defaults to the workspace default locale.

Media typeapplication/json

None of these fields are strictly required, but uniqueness rules apply to sku, barcode, mpn, and asin.

object
sku
string
barcode

EAN / barcode.

string
mpn
string
asin
string
brand
string
category

Human-readable category path, e.g. Root > Subcategory.

string
name
string
description
string
url
string format: uri
html_description
string
external_id
string
open_attributes
object
key
additional properties
any
crawl_configuration
object
reference_string
string
source_url
string format: uri
images
Array<object>
object
source_url
string format: uri
order
integer
metadata
object
key
additional properties
any
product_lists

Product list code values.

Array<string>
tags_to_update

Tag IDs.

Array<integer>
variants
Array<object> recursive
Example
{
"sku": "SKU-001",
"barcode": "840000000001",
"brand": "Acme",
"category": "Root > Subcategory",
"name": "Acme water bottle 750ml",
"url": "https://example.com/product-page",
"images": [
{
"source_url": "https://example.com/image-1.jpg",
"order": 0
}
],
"variants": [
{
"sku": "SKU-001-RED",
"barcode": "840000000101",
"name": "Red variant"
}
]
}

Matched and updated an existing product

Media typeapplication/json
object
sku
string
barcode

EAN / barcode.

string
mpn
string
asin
string
brand
string
category

Human-readable category path, e.g. Root > Subcategory.

string
name
string
description
string
url
string format: uri
html_description
string
external_id
string
open_attributes
object
key
additional properties
any
crawl_configuration
object
reference_string
string
source_url
string format: uri
images
Array<object>
object
source_url
string format: uri
order
integer
metadata
object
key
additional properties
any
product_lists

Product list code values.

Array<string>
tags_to_update

Tag IDs.

Array<integer>
variants
Array<object>

None of these fields are strictly required, but uniqueness rules apply to sku, barcode, mpn, and asin.

object
sku
string
barcode

EAN / barcode.

string
mpn
string
asin
string
brand
string
category

Human-readable category path, e.g. Root > Subcategory.

string
name
string
description
string
url
string format: uri
html_description
string
external_id
string
open_attributes
object
key
additional properties
any
crawl_configuration
object
reference_string
string
source_url
string format: uri
images
Array<object>
object
source_url
string format: uri
order
integer
metadata
object
key
additional properties
any
product_lists

Product list code values.

Array<string>
tags_to_update

Tag IDs.

Array<integer>
variants
Array<object> recursive
id
integer
is_product_model
boolean
created_at
string format: date-time
sections

Custom attributes for the product.

Array<object>
object
key
additional properties
any
Examplegenerated
{
"sku": "example",
"barcode": "example",
"mpn": "example",
"asin": "example",
"brand": "example",
"category": "example",
"name": "example",
"description": "example",
"url": "https://example.com",
"html_description": "example",
"external_id": "example",
"open_attributes": {},
"crawl_configuration": {
"reference_string": "example",
"source_url": "https://example.com"
},
"images": [
{
"source_url": "https://example.com",
"order": 1
}
],
"metadata": {},
"product_lists": [
"example"
],
"tags_to_update": [
1
],
"variants": [],
"id": 1,
"is_product_model": true,
"created_at": "2026-04-15T12:00:00Z",
"sections": [
{}
]
}

Product created

Media typeapplication/json
object
sku
string
barcode

EAN / barcode.

string
mpn
string
asin
string
brand
string
category

Human-readable category path, e.g. Root > Subcategory.

string
name
string
description
string
url
string format: uri
html_description
string
external_id
string
open_attributes
object
key
additional properties
any
crawl_configuration
object
reference_string
string
source_url
string format: uri
images
Array<object>
object
source_url
string format: uri
order
integer
metadata
object
key
additional properties
any
product_lists

Product list code values.

Array<string>
tags_to_update

Tag IDs.

Array<integer>
variants
Array<object>

None of these fields are strictly required, but uniqueness rules apply to sku, barcode, mpn, and asin.

object
sku
string
barcode

EAN / barcode.

string
mpn
string
asin
string
brand
string
category

Human-readable category path, e.g. Root > Subcategory.

string
name
string
description
string
url
string format: uri
html_description
string
external_id
string
open_attributes
object
key
additional properties
any
crawl_configuration
object
reference_string
string
source_url
string format: uri
images
Array<object>
object
source_url
string format: uri
order
integer
metadata
object
key
additional properties
any
product_lists

Product list code values.

Array<string>
tags_to_update

Tag IDs.

Array<integer>
variants
Array<object> recursive
id
integer
is_product_model
boolean
created_at
string format: date-time
sections

Custom attributes for the product.

Array<object>
object
key
additional properties
any
Examplegenerated
{
"sku": "example",
"barcode": "example",
"mpn": "example",
"asin": "example",
"brand": "example",
"category": "example",
"name": "example",
"description": "example",
"url": "https://example.com",
"html_description": "example",
"external_id": "example",
"open_attributes": {},
"crawl_configuration": {
"reference_string": "example",
"source_url": "https://example.com"
},
"images": [
{
"source_url": "https://example.com",
"order": 1
}
],
"metadata": {},
"product_lists": [
"example"
],
"tags_to_update": [
1
],
"variants": [],
"id": 1,
"is_product_model": true,
"created_at": "2026-04-15T12:00:00Z",
"sections": [
{}
]
}

Accepted — variants created in the background

Media typeapplication/json
object
background_task_id
integer
Examplegenerated
{
"background_task_id": 1
}

Field-level validation error.

Media typeapplication/json
object
key
additional properties
Array<string>
Example
{
"barcode": [
"A product with this barcode already exists."
]
}

Missing or invalid token.

Media typeapplication/json
object
detail
string
Examplegenerated
{
"detail": "example"
}