Search Documentation
Search for a documentation page...
Products API
REST API endpoints for browsing, creating, updating, and deleting products.
List Products
Returns a paginated list of products with variants, categories, and translations.
Query Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
limit | number | 10 | Products per page (1-100) |
offset | number | 0 | Number of products to skip |
cursor | string | — | Product UUID for keyset pagination |
category | string | — | Filter by category slug |
query | string | — | Search term for product name |
active | boolean | — | Filter by published status |
excludeBundles | boolean | false | Exclude bundle products |
orderBy | string | — | Sort field: price, name, or createdAt |
orderDirection | string | desc | Sort direction: asc or desc |
currency | string | — | Currency code for price display (e.g. EUR) |
lang | string | — | Locale code for translations (e.g. pl-PL) |
Response
Get Product
Returns a single product by UUID or URL slug, with full variant details, category, collections, and translations.
| Parameter | Type | Description |
|---|---|---|
currency | string | Currency code for variant price resolution |
lang | string | Locale code for translated slug lookup |
Supports ?lang= query parameter for translated slug lookup when translations are enabled.
Response
Create Product
Creates a product and its default variant in one call. Image URLs are downloaded and re-uploaded to the store's CDN. If a category name is provided, the category is found or created automatically.
Request Body
| Field | Type | Required | Description |
|---|---|---|---|
name | string | Yes | Product display name |
slug | string | Yes | URL-friendly identifier (^[a-z0-9-]+$) |
description | string | No | Plain text product description |
price | number | Yes | Price as a decimal (e.g. 29.99) |
images | string[] | No | Array of image URLs to upload |
category | string | No | Category name (auto-created if missing) |
quantity | number | No | Initial inventory quantity (default: 0) |
prices | object | No | Multi-currency prices (e.g. { "EUR": 25.99, "GBP": 22.50 }) |
Response (201)
Update Product
Partially updates a product. Only the provided fields are changed.
Request Body
| Field | Type | Description |
|---|---|---|
title | string | New product name |
description | string | New plain text description |
status | string | active (published) or draft |
Delete Product
Deletes a product if it has no order history. Products with orders are archived (status set to hidden) instead of deleted.
Create Variant
Adds a new variant to an existing product.
Request Body
| Field | Type | Required | Description |
|---|---|---|---|
sku | string | Yes | SKU code |
title | string | Yes | Variant display name (e.g. Large / Red) |
priceCents | number | Yes | Price in cents (e.g. 2999 = $29.99) |
imageUrl | string | No | Variant image URL |
stock | number | No | Inventory quantity (default: 0) |
Batch Create Products
Creates up to 100 products in a single request. Each product gets a default variant. Partial failures are reported in the errors array.
Request Body
JSON array of product objects:
| Field | Type | Required | Description |
|---|---|---|---|
name | string | Yes | Product name |
slug | string | No | URL slug (auto-generated from name) |
summary | string | No | Short description |
price | number | Yes | Price as decimal |
images | string[] | No | Image URLs |
status | string | No | draft, published, or hidden (default: draft) |
category_name | string | No | Category name |
collection_names | string[] | No | Collection names to add to |
sku | string | No | Stock keeping unit |
stock | number | No | Inventory quantity |
shippable | boolean | No | Requires shipping (default: true) |
Response
Import Products (CSV)
Import products from CSV. Supports multi-variant products (multiple rows with the same slug) and updates via product_id. Categories and collections are created or matched automatically.
Response
Product Reviews
List Reviews
Returns approved reviews with summary statistics.
| Parameter | Type | Default | Description |
|---|---|---|---|
limit | number | 10 | Reviews per page (1-100) |
offset | number | 0 | Reviews to skip |
lang | string | — | Locale code for translated slug lookup |
Create Review
Submits a review (pending approval by store owner).
| Field | Type | Required | Description |
|---|---|---|---|
author | string | Yes | Reviewer name (1-100 chars) |
email | string | Yes | Reviewer email (not returned in responses) |
content | string | Yes | Review text (1-5000 chars) |
rating | number | Yes | Star rating (1-5) |