Інтеграція з «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} |
Оновити категорію за іменем |
Параметри батьківських категорій
| Параметр | Тип | Опис |
|---|---|---|
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-stattya) |
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-stattya",
"language": "ua",
"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 |
Отримати список сторінок. Підтримує пагінацію, сортування та фільтрацію |
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) — Мета-заголовок
meta_description (string) — Мета-опис
meta_keywords (string) — Ключові слова
meta_html (text) — Довільний HTML для вставки в <head>
description (text) — Повний текст сторінки
short_description (text) — Короткий опис
name / slug (string) — URL slug (латинські літери, цифри, дефіси, крапки)
language (string) — Мова сторінки
status (int) — 1 = опубліковано, 0 = приховано
priority (int) — Пріоритет (сортування)
datestamp (int) — Дата публікації (Unix timestamp)
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 — Article
6 — BlogPosting
7 — NewsArticle
2 — AboutPage
3 — ContactPage
4 — CollectionPage
5 — ProfilePage
9 — FAQPage
8 — Без розмітки
settings_comments / settings_rating / settings_tags — Налаштування коментарів/оцінок/тегів
password (string) — Пароль доступу
multilangid (string) — ID в інших мовах
slug_search (string) — Пошук за slug для оновлення
tags (string) — Теги, через кому (до 8)
Фільтрація
?status=0|1, ?date_after=YYYY-MM-DD, ?date_before=YYYY-MM-DD, ?lang=ru|ua|en|pl
За ID: ?id_min=10022 (лише ID ≥), ?id_max=15000 (лише ID ≤)
Ліміт: ?limit=50 (не більше 2000, фільтрація на стороні API)
Сортування: ?orderby=id|name|position|datestamp&order=asc|desc
Приклад JSON
{
"pages": [
{"title": "Про нас", "slug": "about-us", "language": "ua", "description": "<p>Текст</p>", "status": 1},
{"title": "Контакти", "slug": "contacts", "language": "ua", "description": "<p>Контакти</p>", "status": 1}
]
}
Псевдоніми полів: content = description, excerpt = short_description, slug = name
update_exists (bool) — оновлення при повторному додаванні.
delete (bool) — видалення (soft delete).
slug_search (string) — пошук за slug для PUT/PATCH.
📥 Імпорт/експорт сторінок через API:
Доступний код масового імпорту та експорту сторінок через Commerce API на GitHub.
📥 Завантажити з GitHub
9. Блоки/Меню
| Метод | URL | Опис |
|---|---|---|
POST |
/blocks |
Масове додавання та оновлення блоків/меню |
GET |
/blocks |
Отримати список блоків. Підтримує пагінацію, сортування та фільтрацію |
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). Латиниця, цифри, дефіси
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
Фільтрація
?status=0|1, ?position=header|footer|..., ?lang=ru|ua|en|pl, ?slug=name
За ID: ?id_min=10022 (лише ID ≥), ?id_max=15000 (лише ID ≤)
Ліміт: ?limit=50 (не більше 2000, фільтрація на стороні API)
Сортування: ?orderby=id|name|title|position|menu_order&order=asc|desc
Приклад JSON
{
"blocks": [
{"name": "about-sidebar", "title": "Про нас", "language": "ua", "description": "<p>Текст</p>", "position": "left", "menu_order": 10, "show": 1},
{"name": "footer-contacts", "title": "Контакти", "language": "ua", "description": "<p>Контакти</p>", "position": "footer", "show": 1}
]
}
Псевдоніми полів: content = description, priority = menu_order, slug = name
update_exists (bool) — оновлення при повторному додаванні.
delete (bool) — видалення.
slug_search (string) — пошук за slug для PUT/PATCH.
Захищені системні імена:
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.
- Перед додаванням/оновленням перевіряється існування сторінки (товару) з вказаним
page_idтаpage_typeі її належність сайту; інакше відгук не створюється. - Поля
text_good/text_bad(«Переваги»/«Недоліки») застосовуються лише для відгуків товарів; для сторінок/статей/категорій вони ігноруються. - Багатомовність (
multilang) визначається автоматично за групоюmultilangidоб'єкта і не приймається від клієнта. - Перерахунок рейтингу та кількості відгуків виконується для всіх підтримуваних типів сторінок (товари, сторінки, статті, категорії блогу, категорії магазину, виробники, колекції), у яких увімкнено оцінку.
- Типи сторінок
announcement_*таnews_*через цей API не керуються (коментарі для них не використовуються).
Це базовий опис основних методів для роботи з Commerce API / WooCommerce API v3 по замовленнях, товарах і категоріях.
Нижче розташовані скрипти з прикладами, які допоможуть правильно використовувати методи API на практиці.