Интеграция с «1С», «ERP», CRM-системами и CommerceAPI
Автоматический экспорт при заказе / Отправка POST данных о заказе в JSON формате
Автоматический экспорт при заказе вы можете включить в настройках сайта, во вкладке «Магазин», указав путь для отправки данных.На указанный адрес будет отправляться POST запрос, со всеми данными о заказе, в том числе и контактные данные заказчика, и перечень товаров. Контактные данные и информация о заказе будет передаваться в JSON формате, POST запросом.
Например, в 1с вы можете реализовать прием заказов через «HTTP сервис»->«SiteExchange» -> «POSTData»
Если после отправки запроса, ваш сервис вернет JSON данные, с содержанием «Number» или «crm_order_id», то к заказу будет добавлен внешний номер заказа.
Автоматический экспорт статистики продаж / Отправка POST данных о заказе в JSON формате
Автоматический экспорт статистики продаж вы можете включить в настройках сайта, во вкладке «Магазин», указав путь для отправки данных.На указанный адрес будет отправляться POST запрос, со всеми данными о заказе, которые изменяются в Статистике продаж. Информация будет передаваться POST запросом в JSON формате.
Например, в 1с вы можете реализовать прием заказов через «HTTP сервис»->«SiteExchange» -> «POSTData»
Кроме того вы можете включить внешний доступ к вашей статистике, указав «Ключ для доступа к статистике продаж».
Доступ к статистике продаж / JSON
Укажите ключ для доступа к статистике продаж в настройках, во вкладке «Магазин». Если вам необходимо получить доступ к статистике продаж внешним приложением, то вы можете выполнить (POST/GET или AJAX) запрос по адресу «
/ajax.php?statistic_sell» При этом необходимо указать ключ в запросе, с шифрованием MD5. Например, если у вас указан ключ «123», то в запросе это будет «
202cb962ac59075b964b07152d234b70».В таком случае запрос будет выглядеть так: «
/ajax.php?statistic_sell&key=202cb962ac59075b964b07152d234b70»
В запросе можно указать данные для сортировки или поиска (GET/POST параметры), которые можно взять на вашей странице статистики продаж в админ-центре (
/page.php?p=statistic_sell&mystat). Сортировка и выбор параметров осуществляется GET/POST запросом, например, «&sort_dateperiod=1week» означает, что будет отображаться статистика продаж за неделю. Данные отображаются в JSON формате.
Обратите внимание, что если вы используете открытые для посетителей запросы странице, то при помощи вашего ключа они смогут получить доступ к вашей статистике продаж.
Доступ к прайсу магазина / Полная выгрузка прайса в CSV
Укажите ключ для доступа к прайсу магазина в настройках, во вкладке «Магазин». Полная выгрузка прайса находится по адресу «/csv_export_products.csv»
При этом необходимо указать ключ в запросе, с шифрованием MD5. Например, если у вас указан ключ «123», то в запросе это будет «
202cb962ac59075b964b07152d234b70».В таком случае запрос будет выглядеть так: «
/csv_export_products.csv?key=202cb962ac59075b964b07152d234b70»
В запросе можно указать данные для сортировки и выборке полей, которые можно взять на вашей странице экспорта в админ-центре (/page.php?p=submit_catalog_page&subpage&export_from_shop). Сортировка и выбор параметров осуществляется GET/POST запросом, например, «
&export_product_access=export_product_access» означает, что будет выгружать поле с данными о доступе к товару. Данные отображаются в CSV формате.
Файл выгрузки кешируется для уменьшения нагрузки и обновляется раз в сутки. Удалить кеш можно при помощи кнопки «Очистить кеш XML/CSV выгрузок».
Пример: https://templatedemo437544.boostore.pro/csv_export_products.csv?key=202cb962ac59075b964b07152d234b70
Дополнительно реализован механизм обмена данными через API, схожий с WooCommerce API. API позволяет получать и обновлять инофмация о заказах и товарах, а также категориях. Инструкции и настройки в разделе «Магазин» - «Обмен данными JSON Commerce API».
Commerce API (Products/Categories/Sales Statistics)
Commerce API — Краткий мануал по методам
Ключ доступа
Для работы с API нужен ключ доступа (Consumer Secret), который вы создаете в резделе «Настройка», «Магазин», «Доступ к статистике продаж». Ключ формируется на основе Ключа для доступа к статистике продаж.
Типы ключей доступа
В зависимости от типа ключа, API может предоставлять разные уровни доступа:
| Ключ | Описание | Доступ |
|---|---|---|
| 1 | Полный доступ | Чтение и запись всех ресурсов |
| 2 | Чтение всех данных | Только чтение всех ресурсов |
| 3 | Чтение товаров | Только чтение товаров, категорий, производителей и коллекций |
| 4 | Управление товарами | Чтение всех данных + запись товаров, категорий, производителей и коллекций |
| 5 | Чтение заказов | Только чтение заказов и статистики продаж |
| 6 | Управление заказами | Чтение всех данных + запись заказов и статистики продаж |
| 7 | Управление статьями блога | Чтение всех данных + запись статей блога |
| 8 | Управление страницами | Чтение всех данных + запись страниц |
| 9 | Управление блоками/меню | Чтение всех данных + запись блоков/меню |
| 10 | Управление комментариями и отзывами | Чтение всех данных + запись комментариев и отзывов (товаров, страниц, статей, категорий) |
Ключ формируется на основе вашего Ключа для доступа к статистике продаж с добавлением соответствующего суффикса. Создайте в настройках магазина ключ для доступа к статистике продаж, система автоматически сгенерирует все варианты ключей.
Методы API (HTTP)
Все запросы идут на базовый URL вашего сайта, например: https://site.com/api/commerce/
1. Статистика продаж
| Метод | URL | Описание |
|---|---|---|
GET |
/orders |
Получить статистику заказов |
GET |
/orders/{id} |
Получить статистику отдельного заказа по ID |
GET |
/crm_orders/{id} |
Получить статистику отдельного заказа по внещнему CRM ID |
DELETE |
/orders/{id} |
Удалить заказ по ID |
DELETE |
/crm_orders/{id} |
Удалить заказ по внещнему CRM ID |
POST |
/orders |
Добавить новый заказ |
UPDATE |
/orders/{id} |
Обновить заказ по ID (PATCH/PUT/UPDATE) |
UPDATE |
/crm_orders/{id} |
Обновить заказ по внещнему CRM ID (PATCH/PUT/UPDATE) |
2. Товары
| Метод | URL | Описание |
|---|---|---|
POST |
/products |
Массовое добавление и обновление товаров |
GET |
/products |
Получить список товаров. Поддерживает пагинацию, сортировку, фильтрацию по категории, статусу, дате, языку (?lang=ru|ua|en|pl) и поиск по имени |
GET |
/products/{id} |
Просмотр отдельного товара по ID |
GET |
/products/sku/{sku} |
Просмотр отдельного товара по SKU (коду товара) |
UPDATE |
/products/{id} |
Обновить товар по ID (PATCH/PUT/UPDATE) |
UPDATE |
/products/sku/{sku} |
Обновить товар по SKU (коду товара) (PATCH/PUT/UPDATE) |
UPDATE |
/products |
Массовое обновление нескольких товаров (PATCH/PUT/UPDATE) |
DELETE |
/products/{id} |
Удалить товар по ID |
DELETE |
/products/sku/{sku} |
Удалить товар по SKU (коду товара) |
3. Категории магазина
| Метод | URL | Описание |
|---|---|---|
POST |
/products/categories |
Массовое добавление и обновление категорий |
GET |
/products/categories |
Получить список категорий товаров |
GET |
/products/categories/{id} |
Получить категорию по ID |
GET |
/products/categories/name/{name} |
Получить категорию по имени |
UPDATE |
/products/categories |
Массовое обновление нескольких категорий (PATCH/PUT/UPDATE) |
UPDATE |
/products/categories/{id} |
Обновить категорию по ID (PATCH/PUT/UPDATE) |
UPDATE |
/products/categories/name/{name} |
Обновить категорию по имени |
DELETE |
/products/categories/{id} |
Удалить категорию по ID (если нет товаров и подкатегорий) |
DELETE |
/products/categories/name/{name} |
Удалить категорию по имени |
Параметры родительских категорий
| Параметр | Тип | Описание |
|---|---|---|
category_parent_id |
int | ID родительской категории. Используется в первую очередь, если задан. |
category_parent_name |
string | Латинское имя (alias / slug) родительской категории. Используется, если category_parent_id не задан. |
category_lang |
string | Язык категории. Применяется для разрешения коллизий в именах. |
Принцип работы:
- Сначала проверяется
category_parent_id. - Если он не задан – используется
category_parent_name. - При совпадении имён – добавляется проверка по
category_lang.
Особое правило:
Чтобы добавить категорию в корневую (основную) категорию, необходимо указать category_parent_name = "main" и обязательно задать параметр category_lang.
Обновление и удаление:
update_exists (bool) – если true, обновляет категорию при повторном добавлении.
delete (bool) – если true, категория будет удалена.
📥 Импорт/экспорт категорий магазина через API:
Доступен код массового импорта и экспорта категорий магазина через Commerce API на GitHub.
📥 Скачать с GitHub
4. Производители
| Метод | URL | Описание |
|---|---|---|
POST |
/products/producers |
Массовое добавление и обновление производителей |
GET |
/products/producers |
Получить список производителей |
GET |
/products/producers/{id} |
Получить производителя по ID |
GET |
/products/producers/name/{name} |
Получить производителя по имени |
UPDATE |
/products/producers |
Массовое обновление нескольких производителей (PATCH/PUT/UPDATE) |
UPDATE |
/products/producers/{id} |
Обновить производителя по ID (PATCH/PUT/UPDATE) |
UPDATE |
/products/producers/name/{name} |
Обновить производителя по имени |
DELETE |
/products/producers/{id} |
Удалить производителя по ID (если нет товаров) |
DELETE |
/products/producers/name/{name} |
Удалить производителя по имени |
Параметры привязки производителей
| Параметр | Тип | Описание |
|---|---|---|
producer_parent_id |
int | ID родительского производителя (группы). Используется в первую очередь. |
producer_parent_name |
string | Латинское имя (alias / slug) родительского производителя. |
producer_lang |
string | Язык производителя для разрешения коллизий имен. |
Принцип работы:
- Сначала проверяется
producer_parent_id. - Если он не задан – используется
producer_parent_name. - При совпадении имён – добавляется проверка по
producer_lang.
Особое правило:
Чтобы добавить производителя в корневую (основную) группу производителей, необходимо указать producer_parent_name = "main" и обязательно задать параметр producer_lang.
Обновление и удаление:
update_exists (bool) – если true, обновляет производителя при повторном добавлении (по умолчанию false).
delete (bool) – если true, производитель будет удалён.
📥 Импорт/экспорт производителей через API:
Доступен код массового импорта и экспорта производителей через Commerce API на GitHub.
📥 Скачать с GitHub
5. Коллекции
| Метод | URL | Описание |
|---|---|---|
POST |
/products/collections |
Массовое добавление и обновление коллекций |
GET |
/products/collections |
Получить список коллекций |
GET |
/products/collections/{id} |
Получить коллекцию по ID |
GET |
/products/collections/name/{name} |
Получить коллекцию по имени |
UPDATE |
/products/collections |
Массовое обновление нескольких коллекций (PATCH/PUT/UPDATE) |
UPDATE |
/products/collections/{id} |
Обновить коллекцию по ID (PATCH/PUT/UPDATE) |
UPDATE |
/products/collections/name/{name} |
Обновить коллекцию по имени |
DELETE |
/products/collections/{id} |
Удалить коллекцию по ID (если нет товаров и подколлекций) |
DELETE |
/products/collections/name/{name} |
Удалить коллекцию по имени |
Параметры привязки коллекций
| Параметр | Тип | Описание |
|---|---|---|
collection_parent_id |
int | ID родительской коллекции. Используется в первую очередь. |
collection_parent_name |
string | Латинское имя (alias / slug) родительской коллекции. |
collection_lang |
string | Язык коллекции для разрешения коллизий имен. |
Принцип работы:
- Сначала проверяется
collection_parent_id. - Если он не задан – используется
collection_parent_name. - При совпадении имён – добавляется проверка по
collection_lang.
Особое правило:
Чтобы добавить коллекцию в корневую (основную) коллекцию, необходимо указать collection_parent_name = "main" и обязательно задать параметр collection_lang – язык родительской коллекции.
Обновление и удаление:
update_exists (bool) – если true, обновляет коллекцию при повторном добавлении (по умолчанию false).
delete (bool) – если true, коллекция будет удалена.
📥 Импорт/экспорт коллекций через API:
Доступен код массового импорта и экспорта коллекций через Commerce API на GitHub.
📥 Скачать с GitHub
6. Сортировка и пагинация
Для методов /orders, /products, /blog/articles и /pages доступны параметры для постраничного вывода и сортировки:
Параметры пагинации
| Параметр | Тип | Описание |
|---|---|---|
page |
int | Номер страницы (по умолчанию 1) |
per_page |
int | Кол-во элементов на страницу. По умолчанию: товары — 500, остальные — 200. Максимум: заказы и бронирования — 2000, товары — 5000, всё остальное — 2000. Pages: создание — до 100 страниц за запрос, обновление — до 500 страниц за запрос |
Параметры сортировки
| Параметр | Тип | Допустимые значения | Описание |
|---|---|---|---|
orderby |
string | id, title, price, date, views |
Поле для сортировки |
order |
string | asc, desc |
Направление сортировки |
Параметры языка
| Параметр | Тип | Допустимые значения | Описание |
|---|---|---|---|
l |
string | ru, ua, en, de, fr, es, it, pl |
Язык отображения значений |
Дополнительно для заказов
Можно фильтровать заказы по дате и статусу:
?after=YYYY-MM-DD— Начальная дата (в формате ISO)?before=YYYY-MM-DD— Конечная дата?status=pending|processing|on-hold|completed|cancelled|0|1|2|3|5|6|7|8— Статус заказа0— Не обработанные (pending)1— Заказ в обработке (processing)7— Заказ в обработке, ожидает поставки (on-hold)3— Обработанные (completed)8— Обработанные и завершённые (completed)2— Отменённые (cancelled)5— Отменённые: нет в наличии (cancelled)6— Отменённые: отказ (cancelled)?show_deleted=1— Показать скрытые заказы?id_min=10022— Только заказы с ID больше или равным указанному. Удобно для инкрементального импорта и снижения нагрузки?id_max=15000— Только заказы с ID меньше или равным указанному?limit=50— Ограничить количество возвращаемых заказов (не более 2000). Фильтрация выполняется на стороне API
Примеры
GET /orders?page=2&per_page=100&after=2024-06-01&before=2024-06-30
GET /products?orderby=price&order=asc&per_page=50
GET /booking?date_from=2024-06-01&date_to=2024-06-30&type=0
GET /booking?group_id=5&slug_search=yoga-morning
Пример авторизации в запросе
Способ 1 — через параметр запроса (простой):
?consumer_secret=ВАШ_СЕКРЕТ
⛔ Не публикуйте ключ в общий доступ!
Способ 2 — через заголовок Authorization (OAuth 1.0a):
Authorization: OAuth oauth_consumer_key="ВАШ_СЕКРЕТ"
🔗 Живой пример — запрос к API:
https://boostore.pro/api/commerce/orders?per_page=5&consumer_secret=your_authorization_token_hereДобавить новый заказ (POST /orders)
Чтобы создать новый заказ через API, нужно отправить POST-запрос на /orders с JSON-телом.
Обязательно должно быть указано минимум:
email— Email покупателя (обязательно!)line_items— Список добавляемых товаров
Параметры заказа
При создании заказа можно указывать дополнительные поля, например:
{
"first_name": "Name",
"last_name": "Soname",
"email": "alex@example.com",
"phone": "+380671112233",
"address": "Full address of not used address eform",
"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": [ ... ]
}
Описание поля total:
-
total— финальная сумма заказа (строка или число). Если это поле указано, оно будет использовано как итоговая цена заказа. - Если
totalне указано, сумма заказа будет автоматически пересчитана по сумме добавленных товаров вline_items. - Поле
totalне является обязательным и может быть использовано для заказов без товаров.
Формат line_items
Параметр line_items — это массив товаров, каждый товар задаётся объектом со следующими полями:
"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 — ID товара (обязательно!).
- quantity — Количество единиц товара (обязательно!).
- price — (необязательно) Если указана цена — берётся именно эта цена и не вычисляется по данным сайта.
-
currency — (необязательно) Валюта конкретного товара (например,
USDилиUAH). Если указана и отличается от общей валюты заказа (currency), система сконвертирует цену автоматически. - variation_id — ID разновидности (вариации товара) — способ указать разновидность, если она есть.
-
variation — Название или код разновидности — используется если нет
variation_id. Если указаны оба — приоритет уvariation_id.
Важно: Если общая валюта заказа (currency) не указана — будет использоваться валюта по умолчанию для сайта.
Если валюта товара отличается от общей валюты — цена конвертируется автоматически.
Параметры бронирования
Если заказ связан с бронированием, можно указать:
booking— целое число (0/1). Флаг, указывающий, есть ли у заказа бронирование. Установите1, чтобы пометить заказ как бронь.booking_data— объект. Детали бронирования (используется в POST/PUT/PATCH). Поля:
"booking_data": {
"slot_id": 123,
"slot_title": "Название слота",
"group_id": 0,
"start_time": 1710000000,
"end_time": 1710003600,
"duration": 3600,
"factor": 1.0,
"base_price": "100$",
"price": "100$",
"payment_required": true,
"status": 0,
"after_payment_status": 3,
"userid": 0,
"author": 0,
"dates_start_year": "2026",
"dates_start_date": "2026-07-07",
"dates_start_time": "10:00:00",
"dates_end_year": "2026",
"dates_end_date": "2026-07-07",
"dates_end_time": "11:00:00"
}
- slot_id — ID слота бронирования (обязательно).
- slot_title — Название слота.
- group_id — ID группы для группировки слотов.
- start_time — Время начала (Unix timestamp).
- end_time — Время окончания (Unix timestamp).
- duration — Длительность в секундах.
- factor — Коэффициент-множитель.
- base_price — Базовая цена (строка с символом валюты).
- price — Итоговая цена (строка с символом валюты).
- payment_required — Требуется ли оплата (true/false).
- status — Статус бронирования (0-8). Где: 0 — новый, 1 — в обработке, 2 — отменён, 3 — выполнен/завершён, 4-8 — дополнительные статусы.
- after_payment_status — Статус, который устанавливается заказу после успешной оплаты. Диапазон значений тот же, что и у status (0-8).
- userid — ID пользователя-покупателя.
- author — ID автора/менеджера, создавшего бронь.
- dates_start_* / dates_end_* — Даты и время в человеческом формате (опционально).
🛡️ Защита от дублей: При создании или обновлении заказа с booking_data система автоматически проверяет, не занят ли указанный временной интервал другим неотменённым заказом (статусы 2, 5, 6 считаются отменёнными — слот свободен). Если слот занят — API вернёт ошибку 409 Conflict.
Обновление товаров
Обновление товара осуществляется через HTTP-метод UPDATE (или PATCH/PUT) по URL с указанием ID товара или его SKU (кода товара), либо сразу нескольких товаров одним запросом:
/products/{id}— обновление товара по ID/products/sku/{sku}— обновление товара по коду (SKU)/products— массовое обновление нескольких товаров (до 5000 за один запрос)
При массовом обновлении путь /products не содержит ID или SKU. В этом случае необходимо передавать массив объектов товаров в параметре products. Каждый элемент массива должен содержать хотя бы id или sku. Если указан id, он имеет приоритет и может использоваться для замены кода товара (sku). Если id не указан, поиск осуществляется по sku - коду товара.
При обновлении передается полный набор данных товара в формате JSON. Все переданные данные заменяют существующие значения, включая:
- Основные свойства товара (название, описание, цены, статус и др.)
- Атрибуты (характеристики)
- Вариации (разновидности товара)
- Изображения
- Категории и теги
- Дополнительные настройки и мета-поля
Обновление вариаций происходит с использованием следующего алгоритма для каждой вариации из массива variations:
- Если в вариации указан
id, обновление производится по нему. - Если
idотсутствует, но указанsku(код вариации), поиск и обновление происходит по нему. - Если нет ни
id, ниsku, но естьtitle(название вариации), поиск и обновление производится по названию. - Если вариация не найдена по указанным критериям, создается новая вариация с заданными параметрами.
Обновление по SKU удобно, когда ID вариации неизвестен, но известен уникальный код.
При обновлении все поля, указанные в JSON, заменят текущие значения товара; чтобы оставить какое-то поле без изменений, просто не включайте его в запрос.
- Дубликаты разновидностей: если в массиве разновидностей встречаются повторяющиеся по коду (SKU) и названию (title), такие разновидности будут пропущены — одна и та же комплектация не добавится дважды.
- Главное изображение: в массиве
imagesглавным считается то, что под индексом0. Еслиimages[0]отсутствует или не загружено, главным станет первое успешно загруженное изображение. - Максимум изображений: для одного товара можно загрузить не более 10 изображений. Если попытаться загрузить больше, лишние файлы будут проигнорированы.
-
Работа с изображениями:
- Удаление изображений: чтобы удалить изображение по индексу, укажите для элемента массива
imagesзначение"delete". Например,images[2] = "delete"удалит файл с индексом 2. Можно удалять и загружать одновременно, указывая несколько ключей:images[3] = "delete",images[1] = "https://...". - Пропуски индексов изображений: если указать пустую строку или
false, этот индекс будет пропущен без ошибок. - Перезапись изображений: параметр
images_replace: еслиtrue, система перезапишет существующие файлы изображений по переданным индексам (удалит старый файл и кеш). Еслиfalseили не указан — перезапись запрещена. - Пропуск занятых индексов: параметр
images_skip_index: еслиtrue, то при занятом индексе и запрещённой перезаписи система найдёт следующий свободный индекс и сохранит файл туда. Еслиfalseили не указан — индекс берётся строго как передан. - Сохранение под новым индексом при конфликте: параметр
images_replace_new_index: еслиtrue, то при занятом индексе и отключённых перезаписи и автоматическом пропуске файл будет сохранён под новым свободным индексом. Если все три параметраfalseили не заданы и индекс занят — файл не будет загружен.
- Удаление изображений: чтобы удалить изображение по индексу, укажите для элемента массива
Параметры товара
Доступные значения вы можете посмотреть в коде примеров ниже. Также приведена дополнительная расшифровка некоторых значений, которая может быть полезна.
-
Доступные значения
price_forДля каждого товара можно указать параметр
price_for, который задаёт единицу измерения цены. Допустимо использовать числовой код или текст (например, «За 1 кг» или «Per 1 kg»). Вот полный список значений:Можно использовать как числовое значение, так и текст — система автоматически распознает и приведёт к правильному коду.
-
Доступные значения
stock_statusДля каждого товара можно указать параметр
stock_status, который определяет статус доступности товара и его поведение на сайте. Можно использовать числовой код или ключевое слово — система распознает оба варианта.Можно использовать как числовое значение, так и текст — система автоматически распознает и приведёт к правильному коду.
Если для товара выбран вариант
3, он будет скрыт из списков товаров на сайте. Если выбран вариант4, товар будет виден, но его нельзя будет добавить в корзину. Вариант5показывает покупателю, что наличие нужно уточнить. -
Акция и Доступные значения
promotion_expires_jobДля каждого товара можно указать параметр
promotion_expires_job, который управляет тем, что делать с акцией после истечения её срока.
Можно использовать числовой код или ключевое слово — система распознает оба варианта.Можно указывать как числовое значение, так и текст — система автоматически распознает и приведёт к нужному коду.
Важно: Для активации таймера акции обязательно укажите
promotionравным1— это означает, что акция активна.Также необходимо указать дату окончания акции в параметре
promotion_expires— она может быть задана как UNIX-время (например,time()), так и в форматеYYYY-MM-DDTHH:MM:SS+00:00(например,2025-06-28T00:00:00+00:00).
Псевдонимы полей (WooCommerce-совместимость):
content = description, excerpt = short_description,
cat_id / rubric_id = category_id,
sale_price = price, original_price = regular_price,
menu_order = priority, wholesale_price = price_cost,
slug = name (если указаны оба, приоритет у slug).
📦 Пример реального ответа GET /products/{id}
Для получения актуальных полей вашего товара выполните GET /products/{id} или GET /products/sku/{sku}. Ниже — пример ответа для товара Salomon Quest 4D 3 GTX (ID: 483472):
{
"id": 483472,
"sku": "Q4D3-BLK_ru",
"title": "Salomon Quest 4D 3 GTX",
"permalink": "https://yourdomain.com/ru/pers_shop/demo_ru/salomonquest4d3gtx.htm",
"access": true,
"language": "ru",
"multilangid": 483641,
"price": 220.00,
"regular_price": 280,
"currency": "USD",
"stock_status_value": "В наличии",
"stock_status": 0,
"stock_quantity": 0,
"featured": false,
"new": 1,
"reducedprice": false,
"discount": null,
"moq": 0,
"promotion": 0,
"promotion_text": null,
"promotion_expires": null,
"bought_with": null,
"products_synonyms": null,
"categories": [
{ "id": 28143, "name": "demo_ru", "title": "Демонстрационная категория" }
],
"producer": {
"id": 4806,
"name": "salomon_ru",
"title": "Salomon",
"lang": "ru"
},
"images": [
{ "src": "https://yourdomain.com/upload/shop_catalog/s15992/483472/483472_0.jpg", "name": "483472_0.jpg" },
{ "src": "https://yourdomain.com/upload/shop_catalog/s15992/483472/483472_1.webp", "name": "483472_1.webp" }
],
"type": 0,
"attributes": [
{ "id": 0, "name": "Product type", "options": [""] }
],
"variations_exists": 8,
"variations": [
{ "id": 749582, "sku": "Q4D3-BLK_36", "title": "36", "stock_status": 0, "stock_status_value": "В наличии" },
{ "id": 749590, "sku": "Q4D3-BLK_37", "title": "37", "stock_status": 4, "stock_status_value": "Наличие уточняйте" },
{ "id": 749602, "sku": "Q4D3-BLK_38", "title": "38", "stock_status": 0, "stock_status_value": "В наличии" }
],
"weight": 0,
"weight_units": 0,
"dimensions": {
"length": 0, "width": 0, "height": 0, "units": 0
},
"short_description": null,
"description": "Флагманская модель для многодневного трекинга...",
"description_tab_1": "Salomon Quest 4D 3 GTX: Непревзойденная Поддержка и Защита...",
"meta_title": null,
"meta_description": null,
"meta_keywords": null,
"video": null,
"priority": 0,
"rating": 0,
"comments": 0,
"views": 569,
"orders": 0,
"shipping_price": 0,
"add_date": "2025-10-25T00:16:09+00:00",
"last_edit": "2026-04-10T18:30:57+00:00"
}
💡 Полный пример вы можете получить, выполнив GET запрос к API товаров вашего магазина.
Добавление товаров
Этот метод позволяет добавить один или несколько товаров одним запросом (до 3000 за один запрос).
Формат запроса полностью совпадает с методом обновления: можно передавать массив products
или одиночный товар.
- Поиск по ID: при добавлении нового товара поле
idдолжно быть пустым или отсутствовать. Еслиidуказан и товар с таким ID уже существует, то система обновит этот товар вместо создания нового. - Поиск по коду (SKU): перед добавлением система проверяет, есть ли товар с таким SKU. Если такой товар найден, он будет обновлён, а не создан заново.
Вы можете добавить новые товары и обновить существующие одним запросом.
📥 Импорт/экспорт товаров через API:
Доступен код массового импорта и экспорта товаров через Commerce API на GitHub.
📥 Скачать с GitHub
7. Каталог статей (блог)
| Метод | URL | Описание |
|---|---|---|
POST |
/blog/articles |
Массовое добавление и обновление статей |
GET |
/blog/articles |
Получить список статей. Поддерживает пагинацию (?page=N&per_page=N), сортировку (?orderby=id|name|position|datestamp&order=asc|desc) и фильтрацию (?category_id=N или ?category_id=1,2,3, ?category=name, ?status=0|1, ?date_after=YYYY-MM-DD, ?date_before=YYYY-MM-DD, ?lang=ru|ua|en|pl) |
GET |
/blog/articles/{id} |
Просмотр отдельной статьи по ID |
UPDATE |
/blog/articles/{id} |
Обновить статью по ID (PATCH/PUT/UPDATE) |
UPDATE |
/blog/articles |
Массовое обновление нескольких статей (PATCH/PUT/UPDATE) |
GET |
/blog/articles/slug/{slug} |
Получить статью по системному имени (slug) |
UPDATE |
/blog/articles/slug/{slug} |
Обновить статью по системному имени (slug) (PATCH/PUT/UPDATE) |
DELETE |
/blog/articles/slug/{slug} |
Удалить статью по системному имени (slug) |
DELETE |
/blog/articles/{id} |
Удалить статью по ID |
Поля статьи
| Параметр | Тип | Описание |
|---|---|---|
title |
string | Заголовок статьи (отображается внутри страницы, H1) |
meta_title |
string | Мета-заголовок (title) |
meta_description |
string | Мета-описание |
meta_keywords |
string | Ключевые слова |
description |
text | Полный текст статьи |
short_description |
text | Краткое описание (анонс) статьи |
name |
string | ЧПУ ссылка (URL slug). Латиница и дефисы (например: moya-statya) |
slug |
string | ЧПУ ссылка (URL slug). Аналог name. Латиница и дефисы |
language |
string | Язык статьи (ru, en, ua, pl и др.) |
category_id |
int | ID рубрики (категории блога) из blog_catalog_value. Обязательно для новой статьи |
status |
int | Доступ: 1 — опубликовано (доступно), 0 — скрыто (недоступно) |
priority |
int | Приоритет (позиция сортировки, 0–29) |
datestamp |
int (unix) | Дата публикации (Unix timestamp) или строка в формате ISO 8601 |
schema |
int | Тип Schema.org разметки (0–9).0 — WebPage (по умолчанию)1 — Article6 — BlogPosting7 — NewsArticle2 — AboutPage3 — ContactPage4 — CollectionPage5 — ProfilePage9 — FAQPage8 — Без разметки
|
planned |
int | Отложенная публикация: 0/1 |
settings_comments |
string | Настройки комментариев |
settings_rating |
int | Настройки рейтинга: 0/1 |
update_exists |
bool | Если true, обновляет статью при повторном добавлении (по умолчанию false) |
delete |
bool | Если true, статья будет удалена (soft delete) |
tags |
string | Метки статьи через запятую (до 8 шт.). Сохраняются в отдельную таблицу тегов |
multilangid |
string | ID статьи на других языках. Объединяет переводы одной статьи для связи на разных языках сайта |
slug_search |
string | Поиск статьи по системному имени (slug) для обновления. Альтернатива ID. Не сохраняется в БД |
Фильтрация списка статей (GET)
При получении списка статей (GET /blog/articles) доступны параметры фильтрации:
| Параметр | Тип | Описание |
|---|---|---|
category_id | int/string | ID рубрики (категории). Можно указать одно число или несколько через запятую: ?category_id=1,2,3 |
category | string | Имя рубрики (slug). Можно указать одно имя или несколько через запятую: ?category=sitecreate_ru,blog_news. Альтернатива category_id |
status | int | Фильтр по доступу: 1 — опубликовано (доступно), 0 — скрыто (недоступно) |
date_after | string | Начальная дата публикации (ISO 8601). Пример: ?date_after=2026-07-01 |
date_before | string | Конечная дата публикации (ISO 8601). Пример: ?date_before=2026-07-31 |
lang | string | Язык статьи: ru, ua, en, pl и др. |
id_min | int | Загружать только статьи с ID больше или равным указанному. Пример: ?id_min=10022. Удобно для инкрементального импорта и снижения нагрузки |
id_max | int | Загружать только статьи с ID меньше или равным указанному. Пример: ?id_max=15000 |
limit | int | Ограничить количество возвращаемых записей (не более 2000). Пример: ?limit=50. Фильтрация выполняется на стороне API |
Также доступны стандартные параметры сортировки: orderby (id, name, position, datestamp) и order (asc, desc).
Псевдонимы полей (WooCommerce-совместимость):
content = description, excerpt = short_description,
cat_id / rubric_id / category = category_id,
date / date_created / date_created_gmt = datestamp,
slug = name (если указаны оба, приоритет у slug).
Массовое добавление и обновление
POST/PUT/PATCH на /blog/articles принимает как один объект статьи, так и массив объектов в поле articles:
{
"articles": [
{
"title": "Моя статья",
"slug": "moya-statya",
"language": "ru",
"category_id": 5,
"description": "<p>Текст статьи</p>",
"short_description": "Анонс",
"meta_title": "Моя статья | Сайт",
"tags": "кроссовки, найк, адидас, спортивная обувь",
"status": 1,
"priority": 5,
"schema": 6
},
{
"title": "Another article",
"slug": "another-article",
"language": "en",
"category_id": 10,
"description": "<p>Article text</p>",
"status": 1
}
]
}
Обновление и удаление:
update_exists (bool) – если true, обновляет статью при повторном добавлении (по умолчанию false).
delete (bool) – если true, статья будет удалена (soft delete: скрыта из списков).
slug_search (string) – поиск статьи по системному имени (slug/name) для обновления через PUT/PATCH/POST. Если id не указан, статья ищется по slug_search. При указании обоих сначала выполняется поиск по ID, при неудаче — по slug_search. Учитывает язык статьи (параметр language или язык категории).
При удалении автоматически пересчитывается счётчик статей в родительской категории.
📥 Импорт/экспорт статей через API:
Доступен код массового импорта и экспорта статей блога через Commerce API на GitHub.
📥 Скачать с GitHub
8. Страницы сайта
| Метод | URL | Описание |
|---|---|---|
POST |
/pages |
Массовое добавление и обновление страниц |
GET |
/pages |
Получить список страниц. Поддерживает пагинацию (?page=N&per_page=N), сортировку (?orderby=id|name|position|datestamp&order=asc|desc) и фильтрацию (?status=0|1, ?date_after=YYYY-MM-DD, ?date_before=YYYY-MM-DD, ?lang=ru|ua|en|pl) |
GET |
/pages/{id} |
Просмотр отдельной страницы по ID |
GET |
/pages/slug/{slug} |
Получить страницу по системному имени (slug) |
UPDATE |
/pages/{id} |
Обновить страницу по ID (PATCH/PUT/UPDATE) |
UPDATE |
/pages |
Массовое обновление нескольких страниц (PATCH/PUT/UPDATE) |
DELETE |
/pages/{id} |
Удалить страницу по ID |
Поля страницы
| Параметр | Тип | Описание |
|---|---|---|
title |
string | Заголовок страницы (отображается на странице, H1) |
meta_title |
string | Мета-заголовок (title) |
meta_description |
string | Мета-описание |
meta_keywords |
string | Ключевые слова |
meta_html |
text | Произвольный HTML-код для вставки в <head> |
description |
text | Полный текст страницы (HTML) |
short_description |
text | Краткое описание страницы |
name |
string | URL slug. Только латинские буквы, цифры, дефисы и точки (например, my-page) |
slug |
string | URL slug. То же что и name. Только латинские буквы, цифры, дефисы и точки |
language |
string | Язык страницы (ru, en, ua, pl и др.) |
status |
int | Доступ: 1 — опубликовано (доступно), 0 — скрыто (недоступно) |
priority |
int | Приоритет (позиция сортировки) |
datestamp |
int (unix) | Дата публикации (Unix timestamp) или строка ISO 8601 |
show_tree |
int | Показывать дерево категорий: 0/1/2 (0 — как в настройках, 1 — скрыть, 2 — показать) |
show |
int | Показывать: 1/true/show/visible — показать, 0/false/hide/hidden — скрыть |
schema |
int | Тип разметки Schema.org (0–9).0 — WebPage (по умолчанию)1 — Article6 — BlogPosting7 — NewsArticle2 — AboutPage3 — ContactPage4 — CollectionPage5 — ProfilePage9 — FAQPage8 — Без разметки |
settings_comments |
string | Настройки комментариев |
settings_rating |
int | Настройки рейтинга: 0/1 |
settings_tags |
int | Настройки тегов: 0/1 |
password |
string | Пароль для доступа к странице |
multilangid |
string | ID страниц на других языках. Связывает переводы одной страницы |
slug_search |
string | Поиск страницы по системному имени (slug) для обновления. Альтернатива ID. Не сохраняется в БД |
tags |
string | Теги страницы, через запятую (до 8). Хранятся в отдельной таблице тегов |
Фильтрация GET /pages
При получении списка страниц (GET /pages) поддерживаются следующие параметры фильтрации:
| Параметр | Тип | Описание |
|---|---|---|
status | int | Фильтр доступа: 1 — опубликовано (доступно), 0 — скрыто (недоступно) |
date_after | string | Начальная дата публикации (ISO 8601). Пример: ?date_after=2026-07-01 |
date_before | string | Конечная дата публикации (ISO 8601). Пример: ?date_before=2026-07-31 |
lang | string | Язык страницы: ru, ua, en, pl и др. |
id_min | int | Загружать только страницы с ID больше или равным указанному. Пример: ?id_min=10022. Удобно для инкрементального импорта и снижения нагрузки |
id_max | int | Загружать только страницы с ID меньше или равным указанному. Пример: ?id_max=15000 |
limit | int | Ограничить количество возвращаемых записей (не более 2000). Пример: ?limit=50. Фильтрация выполняется на стороне API |
Также доступны стандартные параметры сортировки: orderby (id, name, position, datestamp) и order (asc, desc).
Псевдонимы полей (совместимость с WooCommerce):
content = description, excerpt = short_description,
slug = name (если указаны оба, slug имеет приоритет).
Массовое добавление/обновление (пример JSON)
{
"pages": [
{
"title": "О компании",
"slug": "about-us",
"language": "ru",
"description": "<p>Текст страницы о компании</p>",
"meta_title": "О компании | Сайт",
"status": 1,
"priority": 10
},
{
"title": "Контакты",
"slug": "contacts",
"language": "ru",
"description": "<p>Контактная информация</p>",
"status": 1
}
]
}
Обновление и удаление:
update_exists (bool) – если true, обновляет страницу при повторном добавлении (по умолчанию false).
delete (bool) – если true, страница будет удалена (soft delete: скрыта из списков).
slug_search (string) – поиск страницы по системному имени (slug/name) для обновления через PUT/PATCH/POST. Если id не указан, страница ищется по slug_search. При указании обоих сначала выполняется поиск по ID, при неудаче — по slug_search. Учитывает язык страницы (параметр language).
📥 Импорт/экспорт страниц через API:
Доступен код массового импорта и экспорта страниц через Commerce API на GitHub.
📥 Скачать с GitHub
9. Блоки/Меню
| Метод | URL | Описание |
|---|---|---|
POST |
/blocks |
Массовое добавление и обновление блоков/меню |
GET |
/blocks |
Получить список блоков. Поддерживает пагинацию (?page=N&per_page=N), сортировку (?orderby=id|name|title|position|menu_order&order=asc|desc) и фильтрацию (?status=0|1, ?position=header|footer|..., ?lang=ru|ua|en|pl, ?slug=name) |
GET |
/blocks/{id} |
Просмотр отдельного блока по ID |
GET |
/blocks/slug/{slug} |
Получить блок по системному имени (slug) |
UPDATE |
/blocks/{id} |
Обновить блок по ID (PATCH/PUT/UPDATE) |
UPDATE |
/blocks |
Массовое обновление нескольких блоков (PATCH/PUT/UPDATE) |
DELETE |
/blocks/{id} |
Удалить блок по ID |
Поля блока
| Параметр | Тип | Описание |
|---|---|---|
id | int | ID блока |
name | string | Системное имя (slug). Только латиница, цифры, дефисы (например, my-block) |
title | string | Заголовок блока |
description | text | Содержимое блока (HTML, SHORTCODE, BBCODE) |
position | string | Позиция: left, right, top, buttom, header, header_meta, header_meta_data, header_before_meta_data, footer |
menu_order | int | Порядок сортировки (чем больше, тем выше) |
language | string | Язык блока: ru, ua, en, pl, all |
show | int | Видимость: 0 — скрыто, 1 — всем, 2 — только пользователям, 3 — только гостям, 4 — только админам, 5 — только админу сайта, 6 — админу и менеджеру |
show_on_page | int | Тип страниц: 0 — всюду, 1 — простые, 2 — блог, 4 — новости, 6 — магазин, 7 — не на главной, 8 — на главной, 9 — поиск |
show_on_device | int | Устройства: 0 — все, 1 — компьютеры, 2 — мобильные |
access | int | Доступ к блоку |
querystring_show | text | URL/пути для показа (построчно, без HTML) |
querystring_hide | text | URL/пути для скрытия (построчно, без HTML) |
querystrpos_show | text | Фрагменты URL для показа (построчно, без HTML) |
querystrpos_hide | text | Фрагменты URL для скрытия (построчно, без HTML) |
script | int | Создавать JS-файл из текста: 0/1 |
script_async | int | Тип скрипта: 0 — нет, 1 — async, 2 — defer, >2 — CSS-файл |
div | int | HTML-обёртка: 0 — нет, 1 — span, 2 — div, 3 — aside, 4 — section, 5 — nav |
Фильтрация GET /blocks
При получении списка блоков (GET /blocks) поддерживаются следующие параметры:
| Параметр | Тип | Описание |
|---|---|---|
status | int | Фильтр по видимости: 0 — скрытые, 1 — видимые |
position | string | Фильтр по позиции: header, footer, left и др. |
lang | string | Язык блока: ru, ua, en, pl и др. |
slug | string | Поиск по системному имени |
id_min | int | Загружать только блоки с ID больше или равным указанному. Пример: ?id_min=10022. Удобно для инкрементального импорта и снижения нагрузки |
id_max | int | Загружать только блоки с ID меньше или равным указанному. Пример: ?id_max=15000 |
limit | int | Ограничить количество возвращаемых записей (не более 2000). Пример: ?limit=50. Фильтрация выполняется на стороне API |
Также доступны стандартные параметры сортировки: orderby (id, name, title, position, menu_order) и order (asc, desc).
Псевдонимы полей (совместимость с WooCommerce):
content = description, priority = menu_order, slug = name (если указаны оба, slug имеет приоритет).
Массовое добавление/обновление (пример JSON)
{
"blocks": [
{
"name": "about-sidebar",
"title": "О компании",
"language": "ru",
"description": "<p>Текст блока</p>",
"position": "left",
"menu_order": 10,
"show": 1
},
{
"name": "footer-contacts",
"title": "Контакты",
"language": "ru",
"description": "<p>Контактная информация</p>",
"position": "footer",
"show": 1
}
]
}
Обновление и удаление:
update_exists (bool) – если true, обновляет блок при повторном добавлении (по умолчанию false).
delete (bool) – если true, блок будет удалён.
slug_search (string) – поиск блока по системному имени (slug/name) для обновления через PUT/PATCH/POST. Если id не указан, блок ищется по slug_search.
Защищённые системные имена:
google — полностью исключён из API (не импортируется и не экспортируется).
mobile_menu_widget, footer_widget, main_menu_widget — доступны только для чтения (GET).
smart_search_menu, smart_search_menu_select, slide_menu_widget, slider, slider2, slider3, slider_noscript — служебные блоки с особыми правилами обработки.
📥 Импорт/экспорт блоков через API:
Доступен код массового импорта и экспорта блоков/меню через Commerce API на GitHub.
📥 Скачать с GitHub
Booking API — управление слотами бронирования
API для управления слотами бронирования. Endpoint: /api/commerce/booking.
Важно: Endpoint /booking работает с таблицей booking_slots — шаблонами/определениями слотов (расписание, типы повторения, цены). Реальную доступность (свободен ли слот в данный момент) возвращает внутренний /api_booking.jsonp?action=get_booking_slot_time, используемый виджетом на сайте.
Доступные методы:
GET /booking— получить список слотов-шаблонов (расписание)GET /booking/{id}— получить шаблон слота по IDGET /booking/slug/{slug}— получить шаблон слота по name (наименованию)POST /booking— создать новый шаблон слотаPUT /booking[/{id}]— обновить шаблон слота (приоритет поиска: ID → group_id → slug_search)PATCH /booking[/{id}]— частичное обновление (аналог PUT)DELETE /booking/{id}— удалить шаблон слота по IDDELETE /booking/slug/{slug}— удалить шаблон слота по name
Поля слота бронирования (booking_slots):
id | int | ID слота (auto_increment) |
date | string (Y-m-d) | Дата слота |
time_start | string (H:i:s) | Время начала |
time_end | string (H:i:s) | Время окончания |
group_id | int | ID группы слотов |
group_title | string | Название группы (name) |
group_price | float | Цена группы |
access | int | Доступ: 0 — всем, 1 — отключён, 2 — только авторизованным |
type | int | Тип: 0 — разовый, 1 — ежедневно, 2 — еженедельно, 3 — ежемесячно |
recurrence_day | string | Дни недели для повторения, через запятую (1=Пн..7=Вс). Пример: "1,3,5" |
recurrence_month | string | Месяцы для повторения, через запятую (1..12). Пример: "3,6,9,12" |
description | string | Описание слота (HTML) |
author | string | Автор |
Полный список полей: api/api_commerce/booking/api_meta_booking_fields.php.
Фильтрация GET /booking: параметры ?date_from=, ?date_to=, ?group_id=, ?type=, ?access=, ?slug_search=, ?id_min= (только ID ≥), ?id_max= (только ID ≤), ?limit= (лимит записей, не более 2000).
🔗 Примеры запросов:
GET /booking?date_from=2024-06-01&date_to=2024-06-30&type=0GET /booking?group_id=5&slug_search=yoga-morning
Приоритет поиска слота для обновления/удаления (PUT/PATCH/DELETE):
id(из URL или тела запроса) — ID слотаgroup_id(из тела запроса) — ID группы (если в группе ровно 1 слот)slug_search(из тела запроса) — поиск по наименованию (name/group_title)
Если слот не найден по slug_search — создаётся новый (upsert).
Пример создания разового слота (POST, type=0):
{
"date": "2026-07-15",
"time_start": "10:00:00",
"time_end": "11:00:00",
"group_title": "yoga-morning",
"group_price": 25.00,
"type": 0,
"access": 0
}
Пример создания еженедельного слота (POST, type=2):
{
"time_start": "09:00:00",
"time_end": "18:00:00",
"group_title": "work-hours",
"group_price": 50.00,
"type": 2,
"recurrence_day": "1,2,3,4,5",
"access": 0
}
Пример обновления по group_id (PUT):
{
"group_id": 5,
"group_price": 30.00,
"description": "<p>Обновлённое описание</p>"
}
Пример обновления по slug_search (PUT):
{
"slug_search": "yoga-morning",
"group_price": 35.00
}
Комментарии и отзывы (Comments / Reviews)
Методы /comments позволяют читать, добавлять, обновлять и удалять комментарии и отзывы для товаров, страниц, статей блога и категорий. Система автоматически пересчитывает средний рейтинг и количество отзывов у объекта (аналогично веб-версии), включая многоязычные версии (multilang).
Параметр type определяет, с какой системой вы работаете: отзывы товаров (type=shop) или комментарии страниц, статей блога и категорий (type=pages, обязателен параметр page_type).
Объект (страница/товар) задаётся единым полем page_id — это ID страницы (для товаров — ID товара), к которой относится отзыв. Привязка к сайту проверяется на стороне API, передавать её не нужно.
Multilang определяется автоматически. Параметр multilang не принимается от клиента: список языковых версий объекта берётся из его группы multilangid, и рейтинг пересчитывается по всем версиям.
| Метод | URL | Описание |
|---|---|---|
| GET | /comments | Список комментариев (с фильтрами) |
| GET | /comments/{id} | Получить один комментарий по ID |
| POST | /comments | Добавить новый комментарий/отзыв |
| PUT / PATCH | /comments | Обновить существующий комментарий (передайте id) |
| DELETE | /comments/{id} | Удалить комментарий (и все ответы на него) |
Параметры
Система комментариев определяется параметром type, а для страниц/статей/категорий дополнительно page_type:
| type | page_type (для type=pages) | Объект |
|---|---|---|
| shop | product_page | Товары (page_id) |
| pages | page | Страницы сайта |
| pages | blog_page | Статьи блога |
| pages | blog_category | Категории блога |
| pages | shop_category | Категории магазина |
| pages | shop_producer | Производители |
| pages | shop_collection | Коллекции |
Фильтрация списка (GET /comments)
При получении списка комментариев доступны следующие параметры фильтрации:
| Параметр | Тип | Описание |
|---|---|---|
page_id | int | ID страницы/товара — только отзывы для этого объекта |
parent_id | int | Только ответы на указанный комментарий |
hide | int | 0 — опубликованные, 1 — скрытые/на модерации |
rating | int | Только отзывы с указанной оценкой (1–5) |
author_email | string | Только отзывы указанного автора (по email) |
id_min | int | Только отзывы с ID больше или равным указанному. Пример: ?id_min=10022. Удобно для инкрементального импорта и снижения нагрузки |
id_max | int | Только отзывы с ID меньше или равным указанному. Пример: ?id_max=15000 |
limit | int | Ограничить количество возвращаемых записей (не более 2000). Пример: ?limit=50. Фильтрация выполняется на стороне API |
Поля комментария
| Поле | Тип | Описание |
|---|---|---|
| id | int | ID комментария |
| page_id | int | ID страницы (для товаров — ID товара), к которой относится отзыв (обязательно) |
| page_type | string | Тип объекта: product_page (товар) или page/blog_page/blog_category/shop_category/shop_producer/shop_collection для type=pages |
| parent_id | int | ID родительского отзыва (0 = корневой, иначе ответ) |
| author_name | string | Имя автора (обязательно) |
| author_email | string | Email автора |
| author_userid | int | ID пользователя автора (0 — гость) |
| rating | int | Оценка 1–5 (для корневых отзывов обязательно) |
| text | string | Текст отзыва (до 5000 символов) |
| text_good | string | Достоинства (до 2000 символов, только для отзывов товаров) |
| text_bad | string | Недостатки (до 2000 символов, только для отзывов товаров) |
| hide | int | 0 — опубликован, 1 — на модерации/скрыт |
Пример получения отзывов товаров (GET)
GET https://site.com/api/commerce/comments?type=product_page&page_id=489311
Authorization: Bearer ВАШ_КЛЮЧ
Пример получения комментариев статьи (GET)
GET https://site.com/api/commerce/comments?type=pages&page_type=blog_page&page_id=14093
Authorization: Bearer ВАШ_КЛЮЧ
Пример добавления отзыва к товару (POST)
{
"comments": [
{
"type": "product_page",
"page_type": "product_page",
"page_id": 489311,
"author_name": "Иван",
"author_email": "ivan@example.com",
"rating": 5,
"text": "Отличный товар, рекомендую!",
"text_good": "Качество",
"text_bad": "Нет"
}
]
}
Запрос: POST https://site.com/api/commerce/comments?type=product_page
После добавления рейтинг товара пересчитывается автоматически (среднее по всем опубликованным отзывам с оценкой, включая все многоязычные версии товара — они определяются автоматически по группе multilangid).
Пример добавления комментария к статье (POST)
{
"comments": [
{
"type": "pages",
"page_type": "blog_page",
"page_id": 14093,
"author_name": "Мария",
"author_email": "maria@example.com",
"rating": 4,
"text": "Полезная статья, спасибо!",
"hide": 0
}
]
}
Запрос: POST https://site.com/api/commerce/comments?type=pages&page_type=blog_page
Пример обновления отзыва (PUT)
{
"comments": [
{
"id": 2982,
"type": "product_page",
"page_type": "product_page",
"rating": 3,
"text": "Обновлённый текст отзыва"
}
]
}
Запрос: PUT https://site.com/api/commerce/comments?type=product_page
Пример ответа (добавление)
{
"code": "success",
"message": "Comment added successfully",
"comments": {
"code": "success",
"added": 2982,
"updated": "",
"id": 2982,
"hash": "7243df3f8ca25d057750284c7b536097",
"type": "product_page",
"skipped": [],
"errors": [],
"errors_global": []
}
}
Пример ответа (список)
{
"comments": [
{
"id": 2982,
"parent_id": 0,
"author_name": "Иван",
"author_email": "ivan@example.com",
"rating": 5,
"text": "Отличный товар, рекомендую!",
"hide": 0,
"page_id": 489311,
"page_type": "product_page",
"producer_extend": 9360
}
],
"type": "product_page",
"page": 1,
"per_page": 200,
"total": 124,
"total_pages": 1
}
Удаление отзыва (DELETE)
DELETE https://site.com/api/commerce/comments/2982?type=product_page
Authorization: Bearer ВАШ_КЛЮЧ
При удалении автоматически удаляются все ответы на отзыв, а рейтинг и количество отзывов пересчитываются.
Примечания по безопасности
- Текст очищается теми же фильтрами, что и в веб-версии (удаление HTML-тегов и экранирование спецсимволов).
- Все значения передаются через экранирование SQL (
mysqrelescstr), числовые поля черезintval. - Рейтинг для корневого отзыва обязателен (1–5); для ответов рейтинг не применяется.
- Привязка комментария к сайту выполняется автоматически на стороне API.
- Перед добавлением/обновлением API проверяет существование страницы (товара) с указанным
page_idиpage_typeи её принадлежность сайту; иначе отзыв не создаётся. - Поля
text_good/text_bad(«Достоинства»/«Недостатки») применяются только для отзывов товаров; для страниц/статей/категорий они игнорируются. - Многоязычность (
multilang) определяется автоматически по группеmultilangidобъекта и не принимается от клиента. - Пересчёт рейтинга и количества отзывов выполняется для всех поддерживаемых типов страниц (товары, страницы, статьи, категории блога, категории магазина, производители, коллекции), у которых включена оценка.
- Типы страниц
announcement_*иnews_*через этот API не управляются (комментарии для них не используются).
Это базовое описание основных методов для работы с Commerce API / WooCommerce API v3 по заказам, товарам и категориям.
Ниже расположены скрипты с примерами, которые помогут правильно использовать методы API на практике.