Products
Products
Create and update products with support for branches, variations, and modifiers.
POST
You can create or update products in bulk by their SKU. If a product with the specified SKU already exists, it is updated; otherwise, it is created. Products can be assigned to a branch, have multiple variations, and modifier groups.Documentation Index
Fetch the complete documentation index at: https://docs.jelou.ai/llms.txt
Use this file to discover all available pages before exploring further.
Your store ID in Jelou Shop.
List of products to create or update (max. 500 per request).
Product fields
Each object withinresources accepts the following fields:
Unique product identifier (max. 255 characters).
Product name (max. 255 characters).
Product price (min. 0).
Product description.
Indicates whether the price includes taxes.
Individual product tax rate (between
0 and 100). Example: 15 for 15%, 12 for 12%. Only applies when enable_per_product_tax is active in the store settings. If not sent or is 0, the store’s global rate is used.Product status (active/inactive).
Inventory type:
limited or unlimited.Available quantity. Applies only when
stock_type is limited.URL of the product in your store (max. 2048 characters).
Discount type:
value (fixed amount) or percentage.Discount value (min. 0).
List of category names. They are created automatically if they do not exist.
List of public image URLs for the product.
Enables a note field on the product detail page, allowing the customer to add a comment when adding the product to the cart (e.g., “No onions”, “Gift wrap”).
Placeholder text displayed in the note field (max. 255 characters). If not specified, a generic default text is used.
Code of the branch to which the product is assigned. The branch must already exist.
List of product variations.
Product modifier groups (add-ons). Common in food delivery (e.g., “Choose your Drinks”, “Pick your Sauces”). If the field is absent, existing modifiers are preserved. If it is an empty array
[], all modifiers are deleted. If it has data, modifiers are completely replaced.Modifiers are stored on the product and returned automatically in all endpoints that return products.
Full example
This example creates three products: a t-shirt with size variations, a simple pair of pants, and a pizza with modifier groups.Replace
{app_id} with your store ID and <API_KEY> with the token provided by Jelou.Behavior
Asynchronous processing
Asynchronous processing
The endpoint returns
202 Accepted immediately. Products are processed in the background.Non-existent branch
Non-existent branch
If the branch code does not match any branch in the store, the product is created without a branch assignment. No error is produced.
Automatic categories
Automatic categories
If a category does not exist, it is created automatically within the store and the corresponding branch.
Asynchronous images
Asynchronous images
Images are downloaded and processed in the background after the product is created.
Variations by SKU
Variations by SKU
Variations are identified by their SKU. If a variation with that SKU already exists, it is updated instead of creating a new one.
Modifiers
Modifiers
If
modifier_groups is absent in the payload, existing modifiers are preserved. If it is an empty array [], all modifiers are deleted. If it has data, modifiers are completely replaced.Validation errors
If the data does not meet the validation rules, the API responds with422 and details the fields with errors.
Common error messages
Common error messages
| Field | Message |
|---|---|
resources | At least one product is required. |
resources | Cannot process more than 500 products at once. |
resources.*.sku | Each product must have a SKU. |
resources.*.name | Each product must have a name. |
resources.*.price | Each product must have a price. / Price cannot be negative. |
resources.*.stock_type | Stock type must be either limited or unlimited. |
resources.*.images.* | Each image must be a valid URL. |
resources.*.variations.*.stock_type | Variation stock type must be either limited or unlimited. |
resources.*.variations.*.stock | Variation stock must be an integer. / Cannot be negative. |
resources.*.modifier_groups.*.code | Each modifier group must have a code. |
resources.*.modifier_groups.*.name | Each modifier group must have a name. |
resources.*.modifier_groups.*.options | Each modifier group must have at least one option. |
resources.*.modifier_groups.*.options.*.code | Each modifier option must have a code. |
resources.*.modifier_groups.*.options.*.name | Each modifier option must have a name. |
resources.*.tax | Tax rate must be a number. |
resources.*.tax | Tax rate cannot be negative. |
resources.*.tax | Tax rate cannot exceed 100. |
Limits
- Maximum 500 products per request.
- Maximum 10,000 products per 60-second window per store (rate limit). If exceeded, the API responds with
429 Too Many Requests. - All products are validated before being processed.