Integration with «1C», «ERP», CRM systems and CommerceAPI
Automatic order export / Sending POST order data in JSON format
You can enable automatic order export in the site settings, in the «Shop» tab, by specifying the path for data submission.A POST request will be sent to the specified address with all order data, including customer contact information and the list of products. Contact details and order information will be transmitted in JSON format via POST request.
For example, in 1C you can implement order reception via «HTTP Service»->«SiteExchange» -> «POSTData»
If after sending the request your service returns JSON data containing «Number» or «crm_order_id», an external order number will be added to the order.
Automatic sales statistics export / Sending POST order data in JSON format
You can enable automatic sales statistics export in the site settings, in the «Shop» tab, by specifying the path for data submission.A POST request will be sent to the specified address with all order data that changes in Sales Statistics. Information will be transmitted via POST request in JSON format.
For example, in 1C you can implement order reception via «HTTP Service»->«SiteExchange» -> «POSTData»
You can also enable external access to your statistics by specifying a «Sales statistics access key».
Access to sales statistics / JSON
Specify the sales statistics access key in the settings, in the «Shop» tab. If you need to access sales statistics from an external application, you can make a (POST/GET or AJAX) request to «
/ajax.php?statistic_sell» You must specify the key in the request, with MD5 encryption. For example, if your key is «123», in the request it will be «
202cb962ac59075b964b07152d234b70».In this case the request will look like: «
/ajax.php?statistic_sell&key=202cb962ac59075b964b07152d234b70»
In the request you can specify sorting or search data (GET/POST parameters), which can be taken from your sales statistics page in the admin center (
/page.php?p=statistic_sell&mystat). Sorting and parameter selection is done via GET/POST request, for example, «&sort_dateperiod=1week» means that sales statistics for the week will be displayed. Data is displayed in JSON format.
Please note that if you use visitor-accessible page requests, they will be able to access your sales statistics using your key.
Access to store price list / Full CSV price list export
Specify the store price list access key in the settings, in the «Shop» tab. The full price list export is available at «/csv_export_products.csv»
You must specify the key in the request, with MD5 encryption. For example, if your key is «123», in the request it will be «
202cb962ac59075b964b07152d234b70».In this case the request will look like: «
/csv_export_products.csv?key=202cb962ac59075b964b07152d234b70»
In the request you can specify sorting data and field selection, which can be taken from your export page in the admin center (/page.php?p=submit_catalog_page&subpage&export_from_shop). Sorting and parameter selection is done via GET/POST request, for example, «
&export_product_access=export_product_access» means that the field with product access data will be exported. Data is displayed in CSV format.
The export file is cached to reduce load and is updated once a day. You can delete the cache using the «Clear XML/CSV export cache» button.
Example: https://templatedemo437544.boostore.pro/csv_export_products.csv?key=202cb962ac59075b964b07152d234b70
Additionally, a data exchange mechanism via API, similar to WooCommerce API, is implemented. The API allows you to receive and update information about orders, products, and categories. Instructions and settings are in the «Shop» section - «JSON Commerce API Data Exchange».
Commerce API (Products/Categories/Sales Statistics)
Commerce API — Quick Manual on Methods
Access Key
To work with the API, you need an access key (Consumer Secret), which you create in the section "Settings", "Shop", "Sales Statistics Access". The key is generated based on the Sales Statistics Access Key.
API Methods (HTTP)
All requests go to the base URL of your site, for example: https://site.com/api/commerce/
1. Sales Statistics
| Method | URL | Description |
|---|---|---|
| GET | /orders | Get order statistics |
| GET | /orders/{id} | Get statistics of a single order by ID |
| GET | /crm_orders/{id} | Get statistics of a single order by external CRM ID |
| DELETE | /orders/{id} | Delete order by ID |
| DELETE | /crm_orders/{id} | Delete order by external CRM ID |
| POST | /orders | Add a new order |
| UPDATE | /orders/{id} | Update order by ID (PATCH/PUT/UPDATE) |
| UPDATE | /crm_orders/{id} | Update order by external CRM ID (PATCH/PUT/UPDATE) |
2. Products
| Method | URL | Description |
|---|---|---|
| GET | /products | Get product list |
| GET | /products/{id} | View single product by ID |
| GET | /products/sku/{sku} | View single product by SKU (product code) |
| POST | /products | Mass adding of new products |
| UPDATE | /products/{id} | Update product by ID (PATCH/PUT/UPDATE) |
| UPDATE | /products/sku/{sku} | Update product by SKU (product code) (PATCH/PUT/UPDATE) |
| UPDATE | /products | Mass update of multiple products (PATCH/PUT/UPDATE) |
| DELETE | /products/{id} | Delete product by ID |
| DELETE | /products/sku/{sku} | Delete product by SKU (product code) |
3. Product Categories
| Method | URL | Description |
|---|---|---|
| POST | /products/categories | Bulk add and update categories |
| GET | /products/categories | Get a list of product categories |
| GET | /products/categories/{id} | Get a category by ID |
| GET | /products/categories/id/{id} | Get a category by ID (alternative option) |
| GET | /products/categories/name/{name} | Get a category by name |
| UPDATE | /products/categories | Bulk update multiple categories (PATCH/PUT/UPDATE) |
| UPDATE | /products/categories/{id} | Update a category by ID (PATCH/PUT/UPDATE) |
| UPDATE | /products/categories/id/{id} | Update a category by ID (alternative option) |
| UPDATE | /products/categories/name/{name} | Update a category by name |
Parent category parameters
| Parameter | Type | Description |
|---|---|---|
category_parent_id |
int | Parent category ID. Used with the highest priority if provided. |
category_parent_name |
string | Latin name (alias / slug, URL for opening the category) of the parent category. Used if category_parent_id is not provided. In case of duplicates, you can specify category_lang. |
category_lang |
string | Category language. Used to resolve conflicts of identical category_parent_name in different languages. |
How it works:
category_parent_idis checked first.- If not provided –
category_parent_nameis used. - If names match – an additional check by
category_langis performed.
Special rule:
To add a category to the root (main) category, you must specify category_parent_name = "main" and also set category_lang – the language of the parent category.
Update and Deletion:
update_exists (bool) – if true, updates the category if it already exists (default false).
delete (bool) – if true, the category will be deleted.
4. Producers
| Method | URL | Description |
|---|---|---|
| POST | /products/producers | Bulk add and update producers |
| GET | /products/producers | Get a list of producers |
| GET | /products/producers/{id} | Get a producer by ID |
| GET | /products/producers/id/{id} | Get a producer by ID (alternative option) |
| GET | /products/producers/name/{name} | Get a producer by name |
| UPDATE | /products/producers | Bulk update multiple producers (PATCH/PUT/UPDATE) |
| UPDATE | /products/producers/{id} | Update a producer by ID (PATCH/PUT/UPDATE) |
| UPDATE | /products/producers/id/{id} | Update a producer by ID (alternative option) |
| UPDATE | /products/producers/name/{name} | Update a producer by name |
Producer binding parameters
| Parameter | Type | Description |
|---|---|---|
producer_parent_id |
int | Parent producer (group) ID. Used with the highest priority if provided. |
producer_parent_name |
string | Latin name (alias / slug, URL for opening the producer). Used if producer_parent_id is not provided. In case of duplicates, you can specify producer_lang. |
producer_lang |
string | Producer language. Used to resolve conflicts of identical producer_parent_name in different languages. |
How it works:
producer_parent_idis checked first.- If not provided –
producer_parent_nameis used. - If names match – an additional check by
producer_langis performed.
Special rule:
To add a producer to the root (main) producer group, you must specify producer_parent_name = "main" and also set producer_lang – the language of the parent group.
Update and Deletion:
update_exists (bool) – if true, updates the producer if it already exists (default false).
delete (bool) – if true, the producer will be deleted.
5. Collections
| Method | URL | Description |
|---|---|---|
| POST | /products/collections | Bulk add and update collections |
| GET | /products/collections | Get a list of collections |
| GET | /products/collections/{id} | Get a collection by ID |
| GET | /products/collections/id/{id} | Get a collection by ID (alternative option) |
| GET | /products/collections/name/{name} | Get a collection by name |
| UPDATE | /products/collections | Bulk update multiple collections (PATCH/PUT/UPDATE) |
| UPDATE | /products/collections/{id} | Update a collection by ID (PATCH/PUT/UPDATE) |
| UPDATE | /products/collections/id/{id} | Update a collection by ID (alternative option) |
| UPDATE | /products/collections/name/{name} | Update a collection by name |
Collection binding parameters
| Parameter | Type | Description |
|---|---|---|
collection_parent_id |
int | Parent collection ID. Used with the highest priority if provided. |
collection_parent_name |
string | Latin name (alias / slug, URL for opening the collection). Used if collection_parent_id is not provided. In case of duplicates, you can specify collection_lang. |
collection_lang |
string | Collection language. Used to resolve conflicts of identical collection_parent_name in different languages. |
How it works:
collection_parent_idis checked first.- If not provided –
collection_parent_nameis used. - If names match – an additional check by
collection_langis performed.
Special rule:
To add a collection to the root (main) collection, you must specify collection_parent_name = "main" and also set collection_lang – the language of the parent collection.
Update and Deletion:
update_exists (bool) – if true, updates the collection if it already exists (default false).
delete (bool) – if true, the collection will be deleted.
6. Sorting and Pagination
For the methods /orders and /products, parameters for pagination and sorting are available:
Pagination Parameters
| Parameter | Type | Description |
|---|---|---|
page | int | Page number (default 1) |
per_page | int | Number of items per page (default 90, maximum 2000) |
Sorting Parameters
| Parameter | Type | Allowed values | Description |
|---|---|---|---|
orderby | string | id, title, price, date, views | Field to sort by |
order | string | asc, desc | Sort direction |
Language options
| Parameter | Тип | Allowed values | Description |
|---|---|---|---|
l | string | ru, ua, en, de, fr, es, it, pl | Language for displaying values |
Additional for Orders
You can filter orders by date and status:
?after=YYYY-MM-DD— Start date (ISO format)?before=YYYY-MM-DD— End date?status=pending|processing|on-hold|completed|cancelled|0|1|2|3|5|6|7|8— Order status (can specify WooCommerce textual status or numeric code)0— Pending1— Processing7— Processing, awaiting shipment (on-hold)3— Completed8— Completed and closed2— Cancelled5— Cancelled: out of stock6— Cancelled: refusal?show_deleted=1— Show hidden orders
Examples
GET /orders?page=2&per_page=100&after=2024-06-01&before=2024-06-30
GET /products?orderby=price&order=asc&per_page=50
Example of Authorization in Request
The request includes keys:
?consumer_secret=YOUR_SECRET (warning: do not publish the key publicly!)
Or via Authorization header with OAuth 1.0a.
Add New Order (POST /orders)
To create a new order via API, you need to send a POST request to /orders with a JSON body.
At minimum, you must specify:
email— Customer's email (required!)line_items— List of items to add
Order Parameters
When creating an order, you can specify additional fields, for example:
{
"first_name": "Name",
"last_name": "Surname",
"email": "alex@example.com",
"phone": "+380671112233",
"address": "Full address if address eform is not used",
"buyer_address_eform1": "State",
"buyer_address_eform2": "City",
"buyer_address_eform3": "Street",
"buyer_address_eform4": "House number",
"buyer_address_eform5": "Flat",
"postcode": "01001",
"total": "999",
"status": "processing",
"status_for_customer": "processing",
"line_items": [ ... ]
}
About the total field:
total— Final order amount (string or number). If specified, this value will be used as the final order price.- If
totalis not specified, the order amount will be automatically calculated based on the sum of the addedline_items. - The
totalfield is optional and can be used for orders without products.
line_items Format
The line_items parameter is an array of items. Each item is an object with the following fields:
"line_items": [
{
"product_id": 478734,
"quantity": 1,
"price": 100,
"currency": "USD"
},
{
"product_id": 478268,
"quantity": 10,
"variation": "51"
},
{
"product_id": 478266,
"quantity": 1,
"variation_id": 735302
}
]
- product_id — Product ID (required!).
- quantity — Quantity of units (required!).
- price — (optional) If specified, this price will be used instead of the site's calculated price.
- currency — (optional) Currency for this specific product (e.g.,
USDorUAH). If specified and different from the order's maincurrency, the price will be automatically converted. - variation_id — ID of the product variation — use this to specify a variation if available.
- variation — Name or code of the variation — used if
variation_idis not specified. If both are provided,variation_idtakes priority.
Important: If the main order currency is not specified, the site's default currency will be used.
If an item's currency differs from the main currency — the price will be converted automatically.
Updating Products
Product updates are done using the HTTP UPDATE method (or PATCH/PUT) by URL with the product ID or SKU, or multiple products in one request:
/products/{id}— update product by ID/products/sku/{sku}— update product by SKU/products— bulk update multiple products (up to 5000 in one request)
When using bulk update, the path /products does not contain an ID or SKU. In this case, you must send an array of product objects in the products parameter. Each element must contain at least id or sku. If id is specified, it has priority and can replace sku. If id is not specified, the search is done by sku.
The update request must contain the full product data in JSON format. All sent data replaces the existing values, including:
- Main product properties (title, description, prices, status, etc.)
- Attributes
- Variations
- Images
- Categories and tags
- Additional settings and meta fields
Variations are updated using the following logic for each variation in the variations array:
- If
idis specified, the update is done by it. - If
idis missing butskuis specified, the update is done by SKU. - If both
idandskuare missing buttitleis specified, the update is done by title. - If no match is found by these, a new variation is created with the given parameters.
Updating by SKU is convenient when the variation ID is unknown but a unique code is available.
During an update, all fields included in the JSON will overwrite the current product values; to leave a field unchanged, simply omit it from the request.
- Duplicate variations: If the
variationsarray contains duplicates by SKU or title, they will be skipped — the same variation will not be added twice. - Main image: In the
imagesarray, the image at index0is considered the main one. Ifimages[0]is missing or not uploaded, the first successfully uploaded image will be used as the main one. - Maximum images: You can upload up to 10 images for a single product. If you try to upload more, extra files will be ignored.
-
Image handling:
- Delete images: To delete an image by index, set the
imagesarray element to"delete". For example,images[2] = "delete"will remove the file at index 2. You can delete and upload at the same time by setting multiple keys:images[3] = "delete",images[1] = "https://...". - Skipping image indexes: If you specify an empty string or
false, that index will be skipped without an error. - Overwrite images: The
images_replaceparameter: Iftrue, the system will overwrite existing image files for the given indexes (removes old file and cache). Iffalseor not set — overwriting is disabled. - Skip occupied indexes: The
images_skip_indexparameter: Iftrueand the index is occupied but overwriting is disabled, the system will find the next free index and save the file there. Iffalseor not set — the file will be saved strictly to the given index. - Save to new index on conflict: The
images_replace_new_indexparameter: Iftrue, then if the index is occupied and both overwriting and auto-skip are disabled, the file will be saved under the next free index. If all three parameters arefalseor not set and the index is occupied — the file will not be uploaded.
- Delete images: To delete an image by index, set the
Product Parameters
You can see the available values in the example code below. There is also additional explanation of some values that may be useful.
-
Available values for
price_forFor each product, you can specify the
price_forparameter that defines the unit for pricing. You can use a numeric code or text (for example, “Per 1 kg”). Here is the complete list of values:You can use either a numeric value or text — the system will automatically recognize and map it to the correct code.
-
Available values for
stock_statusFor each product, you can set the
stock_statusparameter, which defines the product’s availability status and how it behaves on the site. You can use either a numeric code or a keyword — the system will recognize both.You can use either a number or text — the system will automatically detect it and convert it to the correct code.
If a product is set to
3, it will be hidden from product listings on the site. If it’s set to4, the product will be visible but cannot be added to the cart. Option5shows the buyer that availability needs to be confirmed. -
Promotion and available values for
promotion_expires_jobFor each product, you can set the
promotion_expires_jobparameter, which controls what happens to a promotion after its end date.
You can use either a numeric code or a keyword — the system will recognize both.You can use either a number or text — the system will automatically detect it and convert it to the correct code.
Important: To activate the promotion timer, be sure to set
promotionto1— this means the promotion is active.Also, you must specify the promotion end date in the
promotion_expiresparameter — this can be given as a UNIX timestamp (for example,time()) or in the formatYYYY-MM-DDTHH:MM:SS+00:00(for example,2025-06-28T00:00:00+00:00).
Adding Products
This method allows you to add one or multiple products in a single request (up to 3000 at once).
The request format is exactly the same as for updating: you can send an array of products
or a single product.
- ID check: When adding a new product, the
idfield must be empty or not specified. Ifidis given and a product with that ID already exists, the system will update that product instead of creating a new one. - SKU check: Before adding, the system checks if a product with the given SKU exists. If found, it will be updated instead of creating a duplicate.
You can add new products and update existing ones in a single request.
This is a basic overview of the main methods for working with the Commerce API / WooCommerce API v3 for orders, products, and categories.
Below are example scripts to help you properly use the API methods in practice.