Інтеграція з «1С», «ERP», CRM-системами та CommerceAPI

Назад

Інтеграція з «1С», «ERP», CRM-системами та CommerceAPI

Автоматичний експорт при замовленні / Відправка POST даних про замовлення у JSON форматі

Автоматичний експорт при замовленні ви можете включити в налаштуваннях сайту, у вкладці «Магазин», вказавши шлях для відправки даних.
На вказану адресу буде відправлятися POST запит, з усіма даними про замовлення, в тому числі контактні дані замовника та перелік товарів. Контактні дані та інформація про замовлення буде передаватися у JSON форматі, POST запитом.
Наприклад, в 1С ви можете реалізувати прийом замовлень через «HTTP сервіс»->«SiteExchange» -> «POSTData»

Після оформлення замовлення, на вказану вище адресу буде відправлений POST запит з наступними даними:
 Code: JSON
{
  "ORDER": {
    "buyer_name": "NAME",
    "buyer_soname": "SONAME",
    "buyer_phone": "PHONENUMBER123",
    "buyer_email": "email@email.com",
    "buyer_address": "ADDRESS",
    "delivery_storehouse_title": "Extend PICKUP POINT (Selected)",
    "buyer_address_eform0": "Extend ADDRESS (Selected)",
    "buyer_address_eform1": "Extend ADDRESS (Region)",
    "buyer_address_eform2": "Extend ADDRESS (City)",
    "buyer_address_eform3": "Extend ADDRESS (Street)",
    "buyer_address_eform4": "Extend ADDRESS (Home number)",
    "buyer_address_eform5": "FLAT",
    "buyer_address_eform6": "Extend ADDRESS (Branch number)",
    "buyer_sendedtext": "ADD TEXT",
    "post": "1596538754",
    "lang": "en",
    "form_delivery": "",
    "form_delivery_country_code": "",
    "order_id": "XXXXX",
    "customer_id": "XXXX",
    "order_discount": "",
    "order_hash": "55d4ed2ed42b2c116d9927c2b2ce7fef",
    "time": "2025-06-28T12:31:49+00:00",
    "delivery": "",
    "delivery_id": 0,
    "abtesting": 0,
    "referral_group": "",
    "group": "",
    "referral_url": "https://boostore.pro/....",
    "referral_utm": "",
    "site_id": "10954",
    "site_url": "boostore.pro",
    "transaction_id": "XXXXX",
    "total": 2264,
    "currency": "UAH",
    "shipping": "0",
    "items": [
      {
        "id": "284430",
        "name": "Adidas Originals Streetball Trainers FX9701 (42)",
        "sku": "200976_42",
        "sku_parent": "200976",
        "variant": "42",
        "category": "sport_shoes",
        "quantity": "1",
        "price": "686",
        "currency": "UAH",
        "variations_id": "409151"
      },
      {
        "id": "284436",
        "name": "Shoe bag with pocket Kite Education College",
        "sku": "200982",
        "sku_parent": "200982",
        "variant": "",
        "category": "bags_for_shoes",
        "quantity": "1",
        "price": "736",
        "currency": "UAH",
        "variations_id": 0
      },
      {
        "id": "284438",
        "name": "ASICS Gel-Venture 8 Gs Trainers (43)",
        "sku": "200984_43",
        "sku_parent": "200984",
        "variant": "43",
        "category": "sport_shoes",
        "quantity": "1",
        "price": "842",
        "currency": "UAH",
        "variations_id": "409154"
      }
    ]
  }
}


Якщо після відправки запиту, ваш сервіс поверне JSON дані з вмістом «Number» або «crm_order_id», то до замовлення буде додано зовнішній номер замовлення.

Автоматичний експорт статистики продажів / Відправка POST даних про замовлення у JSON форматі

Автоматичний експорт статистики продажів ви можете включити в налаштуваннях сайту, у вкладці «Магазин», вказавши шлях для відправки даних.
На вказану адресу буде відправлятися POST запит, з усіма даними про замовлення, які змінюються в Статистиці продажів. Інформація буде передаватися POST запитом у JSON форматі.
Наприклад, в 1С ви можете реалізувати прийом замовлень через «HTTP сервіс»->«SiteExchange» -> «POSTData»
Крім того ви можете включити зовнішній доступ до вашої статистики, вказавши «Ключ для доступу до статистики продажів».

Після зміни статусу замовлення (крім швидкого редагування статусів), на вказану вище адресу буде відправлений POST запит у JSON форматі з наступними даними:
 Code: JSON
{
  "ORDER": {
    "crm_order_id": "123",
    "total": "2264",
    "currency": "UAH",
    "discount": "",
    "discount_before": "",
    "total_before": "2264",
    "currency_before": "UAH",
    "shop_cart_statistic_selldone_datestump_unsted": "0",
    "status": "0",
    "status_pay": "0",
    "allow_online_pay": "0",
    "status_for_customer": "0",
    "delivery_status": "0",
    "products_preview": "",
    "admin_note": "",
    "delivery_selected_id_before": "3482",
    "delivery_selected_id": "3482",
    "delivery_track_id": "",
    "delivery_track_id_link": "",
    "buyer_name": "NAME SONAME",
    "buyer_phone": "PHONENUMBER123",
    "buyer_address": "ADDRESS",
    "buyer_address_eform0": "Extend ADDRESS (Selected)",
    "buyer_address_eform1": "Extend ADDRESS (Region)",
    "buyer_address_eform2": "Extend ADDRESS (City)",
    "buyer_address_eform3": "Extend ADDRESS (Street)",
    "buyer_address_eform4": "Extend ADDRESS (Home number)",
    "buyer_address_eform5": "Extend ADDRESS (Flat)",
    "buyer_address_eform6": "Extend ADDRESS (Branch number)",
    "buyer_email": "email@email.com",
    "payment_method": "PaymentMethod (Selected)",
    "group": "",
    "referral_group": "",
    "referral_url": "http://boostore.pro",
    "referral_utm": "",
    "site_manager_id_operator": "1",
    "buyer_id": "16532",
    "manager_id_operator": "0",
    "order_products": "284430|284436|284438",
    "order_products_sku": "200976_42|200982|200984_43",
    "order_products_num": "1|1|1",
    "order_products_variations_id": "409151|407678|409154",
    "order_products_prices": "686|736|842",
    "order_products_currency": "UAH|UAH|UAH",
    "order_products_titles": "Adidas Originals Streetball Trainers FX9701|Shoe bag with pocket Kite Education College|ASICS Gel-Venture 8 Gs Trainers",
    "order_products_variations_titles": "42||43",
    "order_products_prices_without_discount": "||",
    "post": "1596578917",

    "Save": "Save",
    "order_id": 63738,
    "order_discount": "",
    "time": "2025-06-28T12:31:49+00:00",
    "delivery": null,
    "delivery_id": "3482",
    "referral_group": "",
    "group": "",
    "referral_url": "http://boostore.pro/ru/pers_shop/sport_shoes/284438.htm",
    "referral_utm": "",
    "site_url": "boostore.pro",
    "transaction_id": 63738,
    "crm_oder_id": "123",
    "total": "2264",
    "currency": "UAH",
    "items": [
      {
        "id": "284430",
        "name": "Adidas Originals Streetball Trainers FX9701",
        "sku": "200976_42",
        "variant": "42",
        "quantity": "1",
        "price": "686",
        "currency": "UAH",
        "variations_id": "409151",
        "price_without_discount": ""
      },
      {
        "id": "284436",
        "name": "Shoe bag with pocket Kite Education College",
        "sku": "200982",
        "variant": "",
        "quantity": "1",
        "price": "736",
        "currency": "UAH",
        "variations_id": "407678",
        "price_without_discount": ""
      },
      {
        "id": "284438",
        "name": "ASICS Gel-Venture 8 Gs Trainers",
        "sku": "200984_43",
        "variant": "43",
        "quantity": "1",
        "price": "842",
        "currency": "UAH",
        "variations_id": "409154",
        "price_without_discount": ""
      }
    ]
  }
}
'status' - '3', статус угоди // 0 - Не оброблено, 1 - Замовлення в обробці, 3 - Оброблено, 2 - Скасовано, 5 - Скасовано (Немає в наявності), 6 - Скасовано (Відмова), delete - Видалити замовлення

'status_pay' - '0', Статус замовлення // 0-Не вказано, 1 - Оплачено онлайн, не перевірено, 4 - Оплачено онлайн і перевірено, 2 - Оплачено, 3 - Передплачено, 5 - Очікується оплата

'status_for_customer' - '1', Статус для покупця // 0 - Не оброблено, 1 - Обробляється, 3 - Відправлено / Оброблено, 2 - Скасовано

'admin_note' - 'Примітка адміністратору'

'delivery_status' - '0', 0 - Не вказано, 1 - Доставлено, 2 - Не доставлено, 3 - Очікується відправка, 4 - Передано кур'єру, 5 - В дорозі, 6 - Відправлено на поштове відділення, 7 - Відправлено на адресу отримувача, 8 - Доставлено на поштове відділення, 9 - Доставлено на адресу отримувача

'crm_order_id' - 'XXX', Зовнішній код замовлення (для використання в сторонніх CRM)

Детальніше ознайомитися з полями ви можете в статистиці продажів, при редагуванні замовлення.


При зміні товарів у замовленні, відправляється JSON запит з переліком item, а також номер замовлення:
 Code: JSON
{
  "ORDER": {
    "crm_order_id": "123",
    "order_id": 63738,
    "total": "2264",
    "currency": "UAH",
    "discount": "",
    "discount_before": "",
    "total_before": "2264",
    "currency_before": "UAH",
    "shop_cart_statistic_selldone_datestump_unsted": "0",
    "status": "0",
    "status_pay": "0",
    "allow_online_pay": "0",
    "status_for_customer": "0",
    "delivery_status": "0",
    "products_preview": "",
    "admin_note": "",
    "delivery_selected_id_before": "3482",
    "delivery_selected_id": "3482",
    "delivery_track_id": "",
    "delivery_track_id_link": "",
    "buyer_name": "NAME SONAME",
    "buyer_phone": "PHONENUMBER123",
    "buyer_address": "ADDRESS",
    "buyer_address_eform0": "Extend ADDRESS (Selected)",
    "buyer_address_eform1": "Extend ADDRESS (Region)",
    "buyer_address_eform2": "Extend ADDRESS (City)",
    "buyer_address_eform3": "Extend ADDRESS (Street)",
    "buyer_address_eform4": "Extend ADDRESS (Home number)",
    "buyer_address_eform5": "Extend ADDRESS (Flat)",
    "buyer_address_eform6": "Extend ADDRESS (Branch number)",
    "buyer_email": "email@email.com",
    "payment_method": "PaymentMethod (Selected)",
    "group": "",
    "referral_group": "",
    "referral_url": "http://boostore.pro",
    "referral_utm": "",
    "site_manager_id_operator": "1",
    "buyer_id": "16532",
    "manager_id_operator": "0",
    "order_products": "284430|284436|284438",
    "order_products_sku": "200976_42|200982|200984_43",
    "order_products_num": "1|1|1",
    "order_products_variations_id": "409151|407678|409154",
    "order_products_prices": "686|736|842",
    "order_products_currency": "UAH|UAH|UAH",
    "order_products_titles": "Adidas Originals Streetball Trainers FX9701|Shoe bag with pocket Kite Education College|ASICS Gel-Venture 8 Gs Trainers",
    "order_products_variations_titles": "42||43",
    "order_products_prices_without_discount": "||",
    "post": "1596578917",

    "Save": "Save",
    
    "order_discount": "",
    "time": "2025-06-28T12:31:49+00:00",
    "delivery": null,
    "delivery_id": "3482",
    "referral_group": "",
    "group": "",
    "referral_url": "http://boostore.pro/ru/pers_shop/sport_shoes/284438.htm",
    "referral_utm": "",
    "site_url": "boostore.pro",
    "transaction_id": 63738,
    

    "items": [
      {
        "id": "284430",
        "name": "Adidas Originals Streetball Trainers FX9701",
        "sku": "200976_42",
        "variant": "42",
        "quantity": "1",
        "price": "686",
        "currency": "UAH",
        "variations_id": "409151",
        "price_without_discount": ""
      },
      {
        "id": "284436",
        "name": "Shoe bag with pocket Kite Education College",
        "sku": "200982",
        "variant": "",
        "quantity": "1",
        "price": "736",
        "currency": "UAH",
        "variations_id": "407678",
        "price_without_discount": ""
      },
      {
        "id": "284438",
        "name": "ASICS Gel-Venture 8 Gs Trainers",
        "sku": "200984_43",
        "variant": "43",
        "quantity": "1",
        "price": "842",
        "currency": "UAH",
        "variations_id": "409154",
        "price_without_discount": ""
      }
    ]
  }
}

Доступ до статистики продажів / 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 (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 Мова категорії. Застосовується для вирішення колізій в іменах.

Принцип роботи:

  1. Спочатку перевіряється category_parent_id.
  2. Якщо він не заданий – використовується category_parent_name.
  3. При збігу імен – додається перевірка за category_lang.

Особливе правило:
Щоб додати категорію в кореневу (основну) категорію, необхідно вказати category_parent_name = "main" та обов'язково задати параметр category_lang.

Оновлення та видалення:
update_exists (bool) – якщо true, оновлює категорію при повторному додаванні.
delete (bool) – якщо true, категорія буде видалена.

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 Мова виробника для вирішення колізій імен.

Принцип роботи:

  1. Спочатку перевіряється producer_parent_id.
  2. Якщо він не заданий – використовується producer_parent_name.
  3. При збігу імен – додається перевірка за producer_lang.

Особливе правило:
Щоб додати виробника в кореневу (основну) групу виробників, необхідно вказати producer_parent_name = "main" та обов'язково задати параметр producer_lang.

Оновлення та видалення:
update_exists (bool) – якщо true, оновлює виробника при повторному додаванні (за замовчуванням false).
delete (bool) – якщо true, виробник буде видалений.

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 Мова колекції для вирішення колізій імен.

Принцип роботи:

  1. Спочатку перевіряється collection_parent_id.
  2. Якщо він не заданий – використовується collection_parent_name.
  3. При збігу імен – додається перевірка за collection_lang.

Особливе правило:
Щоб додати колекцію в кореневу (основну) колекцію, необхідно вказати collection_parent_name = "main" та обов'язково задати параметр collection_lang – мова батьківської колекції.

Оновлення та видалення:
update_exists (bool) – якщо true, оновлює колекцію при повторному додаванні (за замовчуванням false).
delete (bool) – якщо true, колекція буде видалена.

6. Сортування та пагінація

Для методів /orders, /products та /blog/articles доступні параметри для посторінкового виведення та сортування:

Параметри пагінації

ПараметрТипОпис
page int Номер сторінки (за замовчуванням 1)
per_page int Кіл-ть елементів на сторінку. За замовчуванням: товари — 500, інші — 200. Максимум: замовлення та бронювання — 2000, товари — 5000, все інше — 2000

Параметри сортування

ПараметрТипДопустимі значенняОпис
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 — Показати приховані замовлення

Приклади

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="ВАШ_СЕКРЕТ"


Додати нове замовлення (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_idID товару (обов'язково!).
  • quantityКількість одиниць товару (обов'язково!).
  • price(необов'язково) Якщо вказана ціна — береться саме ця ціна і не обчислюється за даними сайту.
  • currency(необов'язково) Валюта конкретного товару (наприклад, USD або UAH). Якщо вказана та відрізняється від загальної валюти замовлення (currency), система сконвертує ціну автоматично.
  • variation_idID різновиду (варіації товару) — спосіб вказати різновид, якщо він є.
  • 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:

  1. Якщо у варіації вказаний id, оновлення проводиться за ним.
  2. Якщо id відсутній, але вказаний sku (код варіації), пошук та оновлення відбувається за ним.
  3. Якщо немає ні id, ні sku, але є title (назва варіації), пошук та оновлення проводиться за назвою.
  4. Якщо варіація не знайдена за вказаними критеріями, створюється нова варіація із заданими параметрами.

Оновлення за 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»). Ось повний список значень:

    Показати / Сховати
    • 0 — Не вказано
    • 1 — За 1 шт
    • 2 — За 100 шт
    • 3 — За 1000 шт
    • 4 — За 1 упаковку
    • 5 — За 1 кг
    • 6 — За 1000 кг
    • 7 — За 1 м² (квадратний метр)
    • 8 — За 1 метр
    • 9 — За 1 км
    • 10 — За комплект
    • 11 — За 1 годину
    • 12 — За 1 день
    • 13 — За 1 місяць
    • 14 — За 1 рік
    • 15 — За сотку
    • 16 — За акр
    • 17 — За гектар
    • 18 — За ділянку
    • 19 — За об'єкт
    • 30 — За 1 мл (мілілітр)
    • 31 — За 1 л (літр)
    • 32 — За 1 км³ (кубічний кілометр)
    • 33 — За 1 м³ (кубічний метр)
    • 34 — За 1 дм³ (кубічний дециметр)
    • 35 — За 1 см³ (кубічний сантиметр)
    • 36 — За 1 мм³ (кубічний міліметр)
    • 37 — За 1 hl (гектолітр)
    • 38 — За 100 грам
    • 39 — За 1 фунт
    • 40 — За 1 грам
    • 41 — За 10 кг
    • 42 — За 1 центнер (100 кг)
    • 43 — За 1 тонну
    • 44 — За 1 ар
    • 45 — За 1 пару
    • 46 — За 1 дюжину
    • 47 — За 1 галон
    • 48 — За 1 барель
    • 49 — За 1 хвилину
    • 50 — За 1 тиждень
    • 51 — За 1 послугу
    • 52 — За 1 поїздку
    • 53 — За 1 людину
    • 54 — За 1 машину
    • 55 — За 1 м.п. (метр погонний)

    Можна використовувати як числове значення, так і текст — система автоматично розпізнає і приведе до правильного коду.

  • Доступні значення stock_status

    Для кожного товару можна вказати параметр stock_status, який визначає статус доступності товару та його поведінку на сайті. Можна використовувати числовий код або ключове слово — система розпізнає обидва варіанти.

    Показати / Сховати
    • 0 — В наявності
    • 1 — Немає в наявності
    • 2 — Під замовлення
    • 3 — Немає в наявності + Сховати товар зі списку
    • 4 — Немає в наявності + Заборонити додавати товар у кошик
    • 5 — Наявність уточнюйте

    Можна використовувати як числове значення, так і текст — система автоматично розпізнає і приведе до правильного коду.

    Якщо для товару вибраний варіант 3, він буде прихований зі списків товарів на сайті. Якщо вибраний варіант 4, товар буде видимий, але його не можна буде додати в кошик. Варіант 5 показує покупцю, що наявність потрібно уточнити.

  • Акція та Доступні значення promotion_expires_job

    Для кожного товару можна вказати параметр promotion_expires_job, який керує тим, що робити з акцією після закінчення її терміну.
    Можна використовувати числовий код або ключове слово — система розпізнає обидва варіанти.

    Показати / Сховати
    • 0 — Нічого не робити (сховати таймер)
    • 1 — Перенести «Стара ціна» в основну ціну та видалити стару ціну
    • 2 — Прибрати позначку «Акція»
    • 3 — Перенести «Стара ціна» в основну ціну та прибрати позначку «Акція»
    • 5 — Запустити таймер заново терміном на 1 день
    • 6 — Запустити таймер заново терміном на 10 днів
    • 7 — Запустити таймер заново з попереднім терміном (дата таймера мінус дата останнього редагування)
    • 8 — Прибрати позначку «Акція» та видалити «Стара ціна»

    Можна вказувати як числове значення, так і текст — система автоматично розпізнає і приведе до потрібного коду.

    Важно: Для активації таймера акції обов'язково вкажіть promotion рівним 1 — це означає, що акція активна.

    Також необхідно вказати дату закінчення акції в параметрі promotion_expires — вона може бути задана як UNIX-час (наприклад, time()), так і у форматі YYYY-MM-DDTHH:MM:SS+00:00 (наприклад, 2025-06-28T00:00:00+00:00).

  • Більше значень

    Доступні значення title

    Текст (максимум 255 символів) — найменування товару


    Доступні значення sku

    Текст (максимум 100 символів) — код товару


    Доступні значення status
    • 1 — Доступ відкритий
    • 0 — Доступ закритий (403)

    Доступні значення xml

    Увімкнути/Вимкнути вивантаження товару в XML (Google Merchant та інші)

    • 1 — Вивантаження увімкнено
    • 0 — Вивантаження вимкнено

    Доступні значення xml_markup

    Параметр керує застосуванням націнок при вивантаженні товарів в XML (Google Merchant та інші рекламні каталоги).

    • 0 — Увімк: Націнка застосовується за замовчуванням
    • 1 — Вимк: Без націнок (оригінальна ціна)
    • 2 — Без націнки Rozetka
    • 3 — Без націнки Prom.ua
    • 4 — Без націнки Epricentrk.ua
    • 5 — Вимк: Rozetka, Prom, Epicentrk
    • 6 — Без формульної націнки

    Доступні значення noimport

    Увімкнути/Вимкнути оновлення товару при імпорті (Магазин — Імпортувати товари)

    • 1 — Оновлювати при імпорті
    • 0 — Не оновлювати при імпорті

    Доступні значення delete
    • 0 — Не видаляти
    • 1 — Видалити товар

    Доступні значення show_period

    Період розміщення товару. Дозволяє сховати товар після закінчення вказаного терміну.

    • 0 — На завжди
    • 1 — 1 день
    • 2 — Тиждень
    • 3 — Місяць
    • 4 — Півроку
    • 5 — Рік

    Доступні значення priority

    Число від 0 до 100. Чим більше — тим вище товар у списку.


    Доступні значення custom_label_4

    Текст (максимум 95 символів)


    Доступні значення meta_title

    Текст (максимум 255 символів)


    Доступні значення meta_description

    Текст (максимум 500 символів)


    Доступні значення meta_keywords

    Текст (максимум 2000 символів)


    Доступні значення multilangid

    Текст (максимум 50 символів)


    Доступні значення categories

    Масив зі значеннями

    • id — ID категорії
    • name — Найменування категорії
    • lang — Мова категорії

    Доступні значення producer

    Масив зі значеннями

    • id — ID виробника
    • name — Найменування виробника
    • lang — Мова виробника

    Доступні значення producer_country

    Текст (максимум 100 символів)


    Доступні значення collection

    Масив зі значеннями

    • id — ID колекції
    • name — Найменування колекції
    • lang — Мова колекції

    Доступні значення short_description

    Текст (максимум 2000 символів) — короткий опис товару (якщо увімкнено в стилістиці сайту, то відображається при перегляді списку товарів)


    Доступні значення description

    Текст довгий — повний опис товару, відображається при окремому перегляді картки товару


    Доступні значення description_tab_1

    Текст довгий — вкладка 1 з описом (Заголовок вкладки вкажіть у налаштуваннях магазину)


    Доступні значення description_tab_2

    Текст довгий — вкладка 2


    Доступні значення description_tab_3

    Текст довгий — вкладка 3


    Доступні значення description_tab_4

    Текст довгий — вкладка 4


    Доступні значення description_tab_5

    Текст довгий — вкладка 5


    Доступні значення bought_with

    Текст (максимум 255 символів) — список значень З товарами купують, через кому (ID або SKU товарів)


    Доступні значення bought_with_email

    Текст (максимум 255 символів) — список значень З товарами купують, що надсилається покупцю на пошту при замовленні, через кому (ID або SKU товарів)


    Доступні значення discount

    Текст (максимум 20 символів) — розмір знижки (інформаційне поле про знижку, відображається і в списку товарів і при окремому перегляді)


    Доступні значення new

    Позначити товар як Новинка

    • 0 — Не встановлено
    • 1 — Встановлено

    Доступні значення featured

    Позначити товар як Хіт продажів

    • 0 — Не встановлено
    • 1 — Встановлено

    Доступні значення promotion

    Позначити товар як Акція

    • 0 — Не встановлено
    • 1 — Встановлено

    Доступні значення reducedprice

    Позначити товар як Ціна знижена

    • 0 — Не встановлено
    • 1 — Встановлено

    Доступні значення shipping
    • 0 — Не вказані
    • 1 — Встановлені

    Доступні значення shipping_settings (пов'язані з shipping)
    • 2 — Із Загальних налаштувань
    • 0 — Немає доставки
    • 1 — Є доставка
    • 3 — Вказати тільки примітку щодо доставки

    Доступні значення shipping_price (пов'язані з shipping_settings)

    Текст (максимум 40 символів)


    Доступні значення shipping_note (пов'язані з shipping_settings)

    Текст (довгий)


    Доступні значення shipping_days (пов'язані з shipping_settings)

    Текст (максимум 10 символів)


    Доступні значення shipping_sum (пов'язані з shipping_settings)
    • 0 — Не враховувати кількість товару
    • 1 — Враховувати кількість товару
    • 2 — Не додавати доставку до суми замовлення

    Доступні значення attributes

    Масив з характеристиками — відображаються в картці товару, враховуються при порівнянні товару та в пошуковому фільтрі

    • id — ID характеристики (якщо є)
    • name — Назва характеристики (пошук відбувався або за name або за value_parent_id / value_ints)
    • options — Масив значень характеристики
    • value_ints — Масив числових ID значень (якщо є)
    • value_parent_id — Батьківський ID характеристики (якщо є)

    Приклад:
    [
      {
        "id": 1298,
        "name": "Product type",
        "options": ["Кросівки"]
      },
      {
        "name": "Виробник",
        "options": ["Adidas"],
        "value_ints": [10081],
        "value_parent_id": 1762
      },
      {
        "name": "Розмір",
        "options": ["43", "43,5"],
        "value_ints": [10107, 10108],
        "value_parent_id": 1763
      }
    ]

    Доступні значення name

    Системне ім'я (slug) для SEO-посилання (рядок, максимум 255 символів)


    Доступні значення type

    ID типу товару (число) — для фільтрації та атрибутів


    Доступні значення currency

    Код валюти (рядок, наприклад USD, UAH, EUR)


    Доступні значення tags

    Теги, через кому (максимум 8 тегів)


    Доступні значення weight

    Вага товару (число)


    Доступні значення weight_units
    • 0 — Грами
    • 1 — Кілограми

    Доступні значення dimensions

    Масив габаритів товару

    • length — Довжина
    • width — Ширина
    • height — Висота
    • units — Одиниці: 0 = сантиметри, 1 = метри

    Доступні значення sku_show
    • 0 — Не показувати код товару (SKU) публічно
    • 1 — Показувати код товару (SKU)

    Доступні значення moq

    Мінімальна кількість товару для замовлення (число)


    Доступні значення show_stock
    • 0 — Не показувати залишок на сторінці товару
    • 1 — Показувати залишок

    Доступні значення show_tree
    • 0 — Не показувати дерево категорій
    • 1 — Показувати дерево категорій

    Доступні значення update_exists
    • 0 / false — Пропустити якщо запис існує
    • 1 / true — Оновити існуючий запис

    Доступні значення supplier

    Масив зі значеннями

    • id — ID постачальника
    • name — Найменування постачальника
    • lang — Мова постачальника

    Доступні значення price_cost

    Собівартість товару (рядок, максимум 20 символів)


    Доступні значення bulk_prices

    Масив оптових цін

    • moq — Мінімальна кількість для оптової ціни
    • price — Оптова ціна

    Доступні значення products_synonyms

    Список ID товарів для групування, через кому (рядок, максимум 255 символів)


    Доступні значення video

    URL відео (рядок)


    Доступні значення video_duration

    Тривалість відео у форматі HH:MM:SS (рядок)


    Доступні значення variations_type

    Тип розміру для Google Merchant

    • 0 — За замовчуванням з налаштувань категорії
    • 1 — Колір
    • 2 — Патерн
    • 3 — Матеріал
    • 4 — Вікова група
    • 5 — Стать
    • 6 — Розмір

    Доступні значення variations_title

    Заголовок над селектором варіацій (рядок)


    Доступні значення variations_require
    • 0 — Вибір варіації не обов'язковий
    • 1 — Вибір варіації обов'язковий перед покупкою

    Доступні значення variations_cartexplode
    • 0 — Стандартне відображення в кошику
    • 1 — Роздільне відображення варіацій в кошику

    Доступні значення variations_only_update
    • false — Видаляти старі варіації перед додаванням нових
    • true — Додавати нові варіації без видалення старих

    Інші значення

    Інші значення ви можете дізнатися, отримавши методом GET /products або в прикладах нижче

Псевдоніми полів (сумісність з 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. Якщо такий товар знайдений, він буде оновлений, а не створений заново.

Ви можете додати нові товари та оновити існуючі одним запитом.

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 — Article
6 — BlogPosting
7 — NewsArticle
2 — AboutPage
3 — ContactPage
4 — CollectionPage
5 — ProfilePage
9 — FAQPage
8 — Без розмітки
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_idint/stringID рубрики (категорії). Можна вказати одне число або кілька через кому: ?category_id=1,2,3
categorystringІм'я рубрики (slug). Альтернатива category_id
statusintФільтр за доступом: 1 — опубліковано (доступно), 0 — приховано (недоступно)
date_afterstringПочаткова дата публікації (ISO 8601). Приклад: ?date_after=2026-07-01
date_beforestringКінцева дата публікації (ISO 8601). Приклад: ?date_before=2026-07-31
langstringМова статті: ru, ua, en, pl та ін.

Також доступні стандартні параметри сортування: 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 →

Booking API — керування слотами бронювання

API для керування слотами бронювання. Endpoint: /api/commerce/booking.

Важливо: Endpoint /booking працює з таблицею booking_slots — шаблонами/визначеннями слотів (розклад, типи повторення, ціни). Реальну доступність (чи вільний слот зараз) повертає внутрішній /api_booking.jsonp?action=get_booking_slot_time, який використовує віджет на сайті.

Доступні методи:

  • GET /booking — отримати список слотів-шаблонів (розклад)
  • GET /booking/{id} — отримати шаблон слота за ID
  • GET /booking/slug/{slug} — отримати шаблон слота за name (найменуванням)
  • POST /booking — створити новий шаблон слота
  • PUT /booking[/{id}] — оновити шаблон слота (пріоритет пошуку: ID → group_id → slug_search)
  • PATCH /booking[/{id}] — часткове оновлення (аналог PUT)
  • DELETE /booking/{id} — видалити шаблон слота за ID
  • DELETE /booking/slug/{slug} — видалити шаблон слота за name

Поля слота бронювання (booking_slots):

idintID слота (auto_increment)
datestring (Y-m-d)Дата слота
time_startstring (H:i:s)Час початку
time_endstring (H:i:s)Час закінчення
group_idintID групи слотів
group_titlestringНазва групи (name)
group_pricefloatЦіна групи
accessintДоступ: 0 — всім, 1 — вимкнено, 2 — лише авторизованим
typeintТип: 0 — разовий, 1 — щоденно, 2 — щотижня, 3 — щомісяця
recurrence_daystringДні тижня для повторення, через кому (1=Пн..7=Нд). Приклад: "1,3,5"
recurrence_monthstringМісяці для повторення, через кому (1..12). Приклад: "3,6,9,12"
descriptionstringОпис слота (HTML)
authorstringАвтор

Повний список полів: api/api_commerce/booking/api_meta_booking_fields.php.

Фільтрація GET /booking: параметри ?date_from=, ?date_to=, ?group_id=, ?type=, ?access=, ?slug_search=.

🔗 Приклади запитів:

GET /booking?date_from=2024-06-01&date_to=2024-06-30&type=0
GET /booking?group_id=5&slug_search=yoga-morning

Пріоритет пошуку слота для оновлення/видалення (PUT/PATCH/DELETE):

  1. id (з URL або тіла запиту) — ID слота
  2. group_id (з тіла запиту) — ID групи (якщо в групі рівно 1 слот)
  3. 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
}


Це базовий опис основних методів для роботи з Commerce API / WooCommerce API v3 по замовленнях, товарах і категоріях.
Нижче розташовані скрипти з прикладами, які допоможуть правильно використовувати методи API на практиці.


  • Script: Api: ORDER DETAILS

     Code: PHP
    ORDER DETAILS
      $url = "https://boostore.pro/api/commerce/orders/ORDERID"; // Set the endpoint URL (replace with your actual API endpoint)
      $authKey = "your_authorization_token_here"; // Authorization token (use your real key)
      $ch = curl_init($url); // Initialize cURL session
      // Set cURL options
      curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // Return response as string
      curl_setopt($ch, CURLOPT_HTTPHEADER, [
      "Authorization: Bearer " . $authKey, // Set Authorization header
      "Content-Type: application/json" // Optional: declare expected response type
      ]);
      // Execute request
      $response = curl_exec($ch);
      // Check for cURL error
      if (curl_errno($ch)) {
      echo "Request error: " . curl_error($ch);
      } else {
      // Parse and print the JSON response
      $data = json_decode($response, true);
      print_r($data); // Output server response
      }
      // Close cURL session
      curl_close($ch);
      
  • Script: Api: UPDATE ORDER

     Code: PHP
    UPDATE ORDER
      $url = "https://boostore.pro/api/commerce/orders/ORDERID"; // Order API endpoint
      $authKey = "your_authorization_token_here"; // Authorization token
      // Data to update (use API keys, not raw DB field names)
      $updateData = [
      "first_name"  => "Alex",
      "last_name"   => "Las",
      "email"       => "alex@example.com",
      "phone"       => "+380671112233",
      // Full address in plain text (if needed)
      "address"   => "Full address not tied to structured eform fields",
      // Structured address fields (eform system)
      "buyer_address_eform1" => "Region / State",         
      "buyer_address_eform2" => "City",                   
      "buyer_address_eform3" => "Street",                 
      "buyer_address_eform4" => "House number",           
      "buyer_address_eform5" => "Apartment",              
      "buyer_address_eform6"             => "01001",       // Zip/Postal code/Department
      // Order details
      "total" => "999",                        // Total price
      "status" => "processing",                // Internal status or number
      "status_for_customer" => "completed",    // Customer-facing status or number
      ];
      $ch = curl_init($url); 
      // cURL options
      curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
      curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PATCH");
      curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($updateData, JSON_UNESCAPED_UNICODE));
      curl_setopt($ch, CURLOPT_HTTPHEADER, [
      "Authorization: Bearer " . $authKey,
      "Content-Type: application/json"
      ]);
      $response = curl_exec($ch);
      if (curl_errno($ch)) {
      echo "Request error: " . curl_error($ch);
      } else {
      $data = json_decode($response, true);
      print_r($data); 
      }
      curl_close($ch);
  • Script: Api: CREATE ORDER

     Code: PHP
    CREATE ORDER
      $url = "https://boostore.pro/api/commerce/orders"; // Order API endpoint
      $authKey = "your_authorization_token_here"; // Authorization token (use your real key)
      // Order data + products
      $orderData = [
      // Buyer info
      "first_name"  => "Name",                // Buyer's first name
      "last_name"   => "Soname",              // Buyer's last name
      "email"       => "alex@example.com",    // Buyer's email (required)
      "phone"       => "+380671112233",       // Buyer's phone number
      "address"     => "Full address of not used address eform", // General address
      "buyer_address_eform1" => "State",      // State / Region
      "buyer_address_eform2" => "City",       // City
      "buyer_address_eform3" => "Street",     // Street
      "buyer_address_eform4" => "house number", // House number
      "buyer_address_eform5" => "flat",       // Apartment / Flat
      "postcode"    => "01001",               // Postcode / ZIP
      // Total order amount (optional)
      // If you set "total", it will be used as the final order total.
      // If you skip "total", the system will calculate the total automatically
      // based on the products in "line_items".
      //"total"       => "999",
      "status"      => "processing",          // Internal status
      "status_for_customer" => "processing",  // Status shown to the customer
      "currency"   => "USD",                  // Order currency
      // Products in the order
      "line_items" => [
        [
         "product_id" => 478734,         // Product ID (required)
         "quantity"   => 0,               // Quantity (required) / default - 1
         "price"      => 100,            // Custom price (optional, overrides site price)
        ],
        [
         "product_id" => 478268,
         "quantity"   => 10,
         "variation" => "51"             // Variation name or code
        ],
        [
         "product_id" => 478266,
         "quantity"   => 1,
         "variation_id" => 735302        // Variation ID (priority over "variation")
        ]
       ]
      ];
      
      $ch = curl_init($url);
      curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
      curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
      curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($orderData, JSON_UNESCAPED_UNICODE));
      curl_setopt($ch, CURLOPT_HTTPHEADER, [
      "Authorization: Bearer " . $authKey,
      "Content-Type: application/json"
      ]);
    
      $response = curl_exec($ch);
      if (curl_errno($ch)) {
      echo "Request error: " . curl_error($ch);
      } else {
      $data = json_decode($response, true);
      print_r($data);
      }
      curl_close($ch);
      
  • Script: Api: CREATE ORDER WITH BOOKING

     Code: PHP
    CREATE ORDER WITH BOOKING
      $url = "https://boostore.pro/api/commerce/orders"; // Order API endpoint
      $authKey = "your_authorization_token_here"; // Authorization token (use your real key)
      // Order data with booking
      $orderData = [
      "first_name"  => "Name",
      "last_name"   => "Soname",
      "email"       => "alex@example.com",
      "phone"       => "+380671112233",
      "status"      => "processing",
      "status_for_customer" => "processing",
      "currency"    => "USD",
      // Booking flag
      "booking"     => 1,
      // Booking details
      "booking_data" => [
        "slot_id"              => 123,          // Booking slot ID (required)
        "slot_title"           => "Conference Hall",
        "group_id"             => 0,
        "start_time"           => 1710000000,   // Unix timestamp
        "end_time"             => 1710003600,   // Unix timestamp
        "duration"             => 3600,         // Duration in seconds
        "factor"               => 1.0,          // Coefficient
        "base_price"           => "100$",
        "price"                => "100$",
        "payment_required"     => true,
        "status"               => 0,           // Booking status: 0=new, 1=processing, 2=cancelled, 3=completed, 4-8=extra
        "after_payment_status" => 3,           // Status set after payment (0-8, same range)
        "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"
      ],
      // Products (optional for booking orders)
      "line_items" => [
        [
         "product_id" => 478734,
         "quantity"   => 1,
        ]
       ]
      ];
      
      $ch = curl_init($url);
      curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
      curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
      curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($orderData, JSON_UNESCAPED_UNICODE));
      curl_setopt($ch, CURLOPT_HTTPHEADER, [
      "Authorization: Bearer " . $authKey,
      "Content-Type: application/json"
      ]);
    
      $response = curl_exec($ch);
      if (curl_errno($ch)) {
      echo "Request error: " . curl_error($ch);
      } else {
      $data = json_decode($response, true);
      print_r($data);
      }
      curl_close($ch);
      
  • Script: Api: UPDATE ORDER BOOKING

     Code: PHP
    UPDATE ORDER BOOKING
      $orderId = 12345; // Existing order ID
      $url = "https://boostore.pro/api/commerce/orders/" . $orderId; // Order API endpoint with ID
      $authKey = "your_authorization_token_here"; // Authorization token
    
      $updateData = [
      "booking"     => 1,                   // Set booking flag (0 to remove)
      "booking_data" => [
        "slot_id"              => 456,      // New slot ID (if changed)
        "slot_title"           => "VIP Room",
        "group_id"             => 1,
        "start_time"           => 1710086400,
        "end_time"             => 1710090000,
        "duration"             => 3600,
        "factor"               => 1.5,
        "base_price"           => "150$",
        "price"                => "225$",
        "payment_required"     => true,
        "status"               => 1,        // Booking status: 0=new, 1=processing, 2=cancelled, 3=completed, 4-8=extra
        "after_payment_status" => 3,        // Status set after payment (0-8)
        "userid"               => 42,
        "author"               => 1
      ]
      ];
    
      $ch = curl_init($url);
      curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
      curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PATCH");
      curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($updateData, JSON_UNESCAPED_UNICODE));
      curl_setopt($ch, CURLOPT_HTTPHEADER, [
      "Authorization: Bearer " . $authKey,
      "Content-Type: application/json"
      ]);
    
      $response = curl_exec($ch);
      if (curl_errno($ch)) {
      echo "Request error: " . curl_error($ch);
      } else {
      $data = json_decode($response, true);
      print_r($data);
      }
      curl_close($ch);
      
  • Script: Api: UPDATE PRODUCT

     Code: PHP
    UPDATE PRODUCT
     $url = "https://boostore.pro/api/commerce/products/PRODUCT_ID"; // Product API update endpoint
      $authKey = "your_authorization_token_here"; // Authorization token (use your real key)
    // Product data
    $productData = [
      "id" => 479077, // Product ID is ignored here because it's specified in the URL
      "name" => "Basketballshoes_Demo", // SEO URL link
      "title" => "Basketball shoes Converse All Star BB Prototype CX", // Product title (required for new)
      "type" => 1298, // Product type for filtering and attributes
      "access" => true, // Product availability (true = active)
      "description" => "<p>Sneakers Converse All Star BB Prototype CX — Basketball shoes...</p>", // Full product description (HTML allowed)
      "short_description" => "", // Short description of product 
      "sku" => "AO2515C", // Product SKU code
      "sku_show" => 0, // Whether to show SKU publicly (0 = no)
      "price" => "3000", // Current price
      "currency" => "UAH", // Currency code
      "regular_price" => "5760", // Old (regular) price 
      "price_for" => "0", // Unit for pricing (see documentation for accepted values  https://boostore.pro/en/docs/import-products/#faq_import_products)
      "stock_quantity" => 0, // Quantity in stock (0 - unlimited)
      "stock_status" => 0, // Stock status (0 = in stock, 1 = out of stock, others see docs)
      "weight" => 0, // Weight value
      "weight_units" => 0, // Weight units: 0 = grams, 1 = kilograms
      "dimensions" => [
        "length" => 0, // Length
        "width"  => 0, // Width
        "height" => 0, // Height
        "units"  => "0", // Dimension units: 0 = centimeters, 1 = meters
     ],
     "categories" => [
        ["id" => 30519, "name" => null], // Product category (by ID, name, or both)
      ],
      "tags" => "tag1, tag2", // Tags, comma separated, max 8 tags
     "images" => [
        "0" => "-uploadshopcat-s16572/479077/479077_1.webp", // Local image path (won`t be uploaded)
        "1" => "https://boostore.pro/upload/shop_catalog/s16572/479077/479077_2.webp", // Remote image URL (will be downloaded and attached)
      ],
     "images_replace" => false, // By default: do NOT replace images with the same index. If true, replace existing images by index.
     "images_skip_index" => false, // If true, find next free index if the given index is occupied and save image there.
     "images_replace_new_index" => false, // If true, even if replace and skip are false, save under new free index if original index is occupied.
     "variations_only_update" => false, // If true, new variations will be added without deleting old ones; otherwise all old variations are removed before adding new
     "variations" => [
      [
        "priority" => 0, // Display priority of the variation
        "id" => 736413, // Variation ID for updating existing variation; if not provided, search by SKU or title
        "sku" => "SKU1234", // Variation SKU (recommended)
        "title" => "42", // Variation name (required)
        "status" => "true", // access ( true / false / forbidden)
        "description" => "",
        "stock_status" => 0, // Stock status, same logic as main product
        "show_stock" => 0, // Whether to show stock count
        "instock" => 10, // Quantity in stock for this variation
        "image_num" => 0, // Image index linked to this variation
        "price" => "+100", // Price adjustment: absolute, or relative (+/-)
        "price_old" => "120", // Old price
        "price_cost" => "80", // Cost price
        "bulk_prices" => [ // Bulk pricing rules
          [
          "moq" => 10, 
           "price" => 5000
          ], // Price if order >= 10 units
          [
          "moq" => 15, 
          "price" => 4500
          ], // Price if order >= 15 units
      ],
      "dimensions" => [ // Variation dimensions, same units as product
        "length" => 0, // Length
        "width" => 0,  // Width
        "height" => 0, // Height
        "units" => 0,  // Dimension units: 0 = centimeters, 1 = meters
      ],
      ],
      [
        "priority" => 0,
        "title" => "43",
        "description" => "",
        "stock_status" => 0,
        "show_stock" => 1,
        "instock" => 1,
        "image_num" => 2,
        "price" => "+100",
        "price_old" => "120",
        "price_cost" => "80",
        "bulk_prices" => [
      ["moq" => 10, "price" => 5000],
      ["moq" => 15, "price" => 4500],
      ],
      "dimensions" => [
        "length" => 0,
        "width" => 0,
        "height" => 0,
        "units" => 0,
      ],
    
      ],
      ],
     "products_synonyms" => "", // Comma-separated list of grouped or similar product IDs or SKUs
     "priority" => 12, // Sorting priority (higher number = higher position, max 99)
     "producer" => ["id" => 4713, "name" => null], // Producer category by ID and/or name
     "producer_show" => 0, // Show producer on product page
     "producer_country" => "", // Producer country (text)
     "collection" => ["id" => null, "name" => null], // Collection category (ID and/or name)
     "collection_show" => 0, // Show collection flag
     "supplier" => ["id" => null, "name" => null], // Supplier info
     "bulk_prices" => [ // Bulk prices for main product
        ["moq" => 10, "price" => 5000],
        ["moq" => 15, "price" => 4500],
      ],
     "price_cost" => "", // Cost price for the main product
     "settings_comments" => "e_shop_page_hoteng_com|e_shop_page_hoteng_rating_com|e_shop_page_hoteng_show_rating_com|e_shop_page_hoteng_com_captcha|e_shop_page_hoteng_vis_com|e_shop_page_hoteng_num30",
     "password" => "", // Password protection (if any)
     "show_tree" => 0, // Category tree display setting
     "show_stock" => 0, // Show stock on product page
     "moq" => 0, // Minimum order quantity
     "shipping" => 0, // Shipping enabled flag
     "shipping_settings" => 0, // Shipping configuration
     "shipping_price" => 0, // Shipping cost
     "shipping_note" => "", // Notes about shipping
     "shipping_days" => 0, // Delivery time in days
     "shipping_sum" => 0, // Combine shipping for same products flag
     "show_period" => 0, // Product display period
     "bought_with" => "", // Comma-separated list of products often bought together
     "bought_with_email" => "", // Email to send bought-together product lists
     "new" => 1, // Is product new (1 = yes, 0 = no)
     "reduced_price" => 0, // Price reduced flag
     "discount" => "-20%", // Discount text (informational)
     "featured" => 1, // Featured product flag
     "promotion" => 1, // Has promotion flag
     "promotion_text" => "", // Promotion text
     "promotion_expires" => 1751113909, // Promotion end timestamp
     "promotion_expires_job" => 0, // Job to execute after promotion ends
     "variations_title" => "", // Title above variation selectors
     "variations_type" => 0, // Variation type (Google Merchant Size Type): 0=default from category settings, 1=color, 2=pattern, 3=material, 4=age_group, 5=gender, 6=size
     "variations_require" => 0, // Require variation selection before purchase
     "variations_cartexplode" => 0, // Variation display method settings
     "yml" => 0, // Export to YML/XML flag
     "noimport" => "0", // Disable import via admin panel flag
     "custom_label_4" => "", // Custom label for Google Merchant
     "description_tab_1" => "", // Description tab 1 content
     "description_tab_2" => "", // Description tab 2 content
     "description_tab_3" => "", // Description tab 3 content
     "description_tab_4" => "", // Description tab 4 content
     "description_tab_5" => "", // Description tab 5 content
     "video" => "", // Video URL
     "video_duration" => "", // Video duration in HH:MM:SS format
     "delete" => "delete", // delete product ( true or delete )
     // Product attributes for filtering and characteristics
     "attributes" => [
       [
      // "id"      => 1298,  // Attribute name You can use or NAME or ID
        "name" => "Product type", // Attribute name
        "options" => ["Sneakers"] // Attribute values (multiple allowed)
       ],
       [
        "name" => "Producer", //  Attribute name
        "options" => ["Converse"] //Attribute values (multiple allowed)
       ],
       [
        "name" => "Size", //Attribute name
        "options" => ["37,5", "40"] //Attribute values (multiple allowed)
         // "value_ints"      => [10096, 10101], //You can use or NAME or ID
         // "value_parent_id" => 1763 You can use or NAME or ID
       ],
      ]
     ];
    
      curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
      curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "UPDATE"); // Use UPDATE method for update operation (UPDATE / PUT / PATCH)
      curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($productData, JSON_UNESCAPED_UNICODE));
      curl_setopt($ch, CURLOPT_HTTPHEADER, [
      "Authorization: Bearer " . $authKey,
      "Content-Type: application/json"
      ]);
    
      $response = curl_exec($ch);
      if (curl_errno($ch)) {
      echo "Request error: " . curl_error($ch);
      } else {
      $data = json_decode($response, true);
      print_r($data);
      }
    curl_close($ch);
    
  • Script: Api: UPDATE MULTIPLE PRODUCT

     Code: PHP
    UPDATE MULTIPLE PRODUCT (up to 5000 same time)
    $url = "https://boostore.pro/api/commerce/products"; // Product API update endpoint
    $authKey = "your_authorization_token_here"; // Authorization token (use your real key)
    // Product data
      $productsData = [
      "products" => [
       [
        "id" => 479077,
        "title" => "New Product Title 1"
        ...
       ],
       [
        "sku" => "SKU123456",
        "title" => "New Product Title 2"
        ...
       ],
       [
        "id" => 479078,
        "title" => "New Product Title 3"
        ...
       ]
      ]
     ];
     
    $ch = curl_init($url); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "UPDATE"); // UPDATE / PUT / PATCH
    curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($productsData, JSON_UNESCAPED_UNICODE));
    curl_setopt($ch, CURLOPT_HTTPHEADER, [
    "Authorization: Bearer " . $authKey,
    "Content-Type: application/json"
    ]);
    $response = curl_exec($ch);
    if (curl_errno($ch)) {
      echo "Request error: " . curl_error($ch);
    } else {
      $data = json_decode($response, true);
      print_r($data);
    }
    curl_close($ch);
  • Script: Api: UPDATE PRODUCT CATEGORIES

     Code: PHP
    UPDATE MULTIPLE CATEGORIES (up to 3000 same time)
    $url = "https://boostore.pro/api/commerce/products/categories"; // Categories API update endpoint
    $authKey = "your_authorization_token_here"; // Authorization token (use your real key)
    // Categories data
     $categoriesData = [
      "categories" => [
        [
          "category_id" => 30518, // Category ID
          "category_name" => "sneakers", // System category name (slug) REQUIRED
          "category_title" => "Sneakers", // Category title
          "category_parent_id" => 1, // Parent category ID
          "category_parent_name" => "ParentCategory", // Parent category Name
          "category_position" => 0, // Position in the list
          
          "category_visible" => 0, // Visibility (0 = hidden, 1 = visible)
          "category_lang" => "ru", // Category language
          
          "category_show_tree" => 0, // Show tree (0/1)
          "category_multilangid" => 0, // Multilanguage binding ID
    
          "category_image" => [
            "0" => "https://boostore.pro/upload/catalog/16572/files/style/categories/30518.webp", // Image URL
          ],
          "images_replace" => 1, // Image replace if exists
          "category_image_settings" => 7, // Image display settings
          "category_button" => "", // Custom button (without href)
          "category_access" => 0, // Access level
          "category_title_seo_append" => "", // SEO: title suffix
          "category_description_seo_append" => "", // SEO: description suffix
          "category_meta_d" => "", // Meta description
          "category_meta_k" => "", // Meta keywords
          "category_title_inpage" => "Sneakers", // Title shown inside the category page
          "category_text" => "", // Category description text
          "category_text_position" => 0, // Description position
          "category_settings_comments" => "", // Comment settings
          
          "category_settings_rating" => 0, // Enable rating (0/1)
          "category_datestamp" => "2025-09-16T12:41:07+00:00", // Datetime of creation/update
         
          "category_googlegoods_catid" => 0, // Google Goods category ID
          "category_promua_catid" => 0, // Prom.ua category ID
          "category_rozetkaua_title" => "", // Rozetka.ua category title
          "category_merchant_product_category" => "", // Merchant product category
          "category_gm_product_type" => 0, // Google Merchant product type
          "category_gm_sizetype" => 0, // Google Merchant size type
          
          "category_priceappend_rozetka" => "", // Extra price settings for Rozetka
          "category_priceappend_promua" => "", // Extra price settings for Prom.ua
          "category_settings_childproductshow" => 0, // Show products from subcategories (0/1)
          "category_settings_style" => 0, // Style settings
          "category_settings_sibling" => 0, // Show sibling categories (0/1)
          "update_exists" => 1, // Update exists category (0/1)
          "delete" => 0, // For delete category (0/1)
        ]
      ]
    ];
    
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "UPDATE"); // UPDATE / PUT / PATCH
    curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($categoriesData, JSON_UNESCAPED_UNICODE));
    curl_setopt($ch, CURLOPT_HTTPHEADER, [
    "Authorization: Bearer " . $authKey,
    "Content-Type: application/json"
    ]);
    
    $response = curl_exec($ch);
    if (curl_errno($ch)) {
      echo "Request error: " . curl_error($ch);
    } else {
      $data = json_decode($response, true);
      print_r($data);
    }
    curl_close($ch);
  • Script: Api: UPDATE PRODUCT PRODUCERS

     Code: PHP
    UPDATE MULTIPLE PRODUCERS (up to 3000 same time)
    $url = "https://boostore.pro/api/commerce/products/producers"; // Producers API update endpoint
    $authKey = "your_authorization_token_here"; // Authorization token (use your real key)
    // Producers data
     $producersData = [
      "producers" => [
        [
          "producer_id" => 30518, // Producer ID
          "producer_name" => "sneakers", // System producer name (slug) REQUIRED
          "producer_title" => "Sneakers", // Producer title
          "producer_parent_id" => 1, // Parent producer ID
          "producer_parent_name" => "ParentCategory", // Parent producer Name
          "producer_position" => 0, // Position in the list
          
          "producer_visible" => 0, // Visibility (0 = hidden, 1 = visible)
          "producer_lang" => "ru", // Producer language
          
          "producer_show_tree" => 0, // Show tree (0/1)
          "producer_multilangid" => 0, // Multilanguage binding ID
    
          "producer_image" => [
            "0" => "https://boostore.pro/upload/catalog/16572/files/style/categories/30518.webp", // Image URL
          ],
          "images_replace" => 1, // Image replace if exists
          "producer_image_settings" => 7, // Image display settings
          "producer_button" => "", // Custom button (without href)
          "producer_access" => 0, // Access level
    
          "producer_meta_d" => "", // Meta description
          "producer_meta_k" => "", // Meta keywords
          "producer_title_inpage" => "Sneakers", // Title shown inside the producer page
          "producer_text" => "", // Producer description text
          "producer_text_position" => 0, // Description position
          "producer_settings_comments" => "", // Comment settings
          
          "producer_settings_rating" => 0, // Enable rating (0/1)
          "producer_datestamp" => "2025-09-16T12:41:07+00:00", // Datetime of creation/update
         
          "update_exists" => 1, // Update exists producer (0/1)
          "delete" => 0, // For delete producer (0/1)
        ]
      ]
    ];
    
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "UPDATE"); // UPDATE / PUT / PATCH
    curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($producersData, JSON_UNESCAPED_UNICODE));
    curl_setopt($ch, CURLOPT_HTTPHEADER, [
    "Authorization: Bearer " . $authKey,
    "Content-Type: application/json"
    ]);
    
    $response = curl_exec($ch);
    if (curl_errno($ch)) {
      echo "Request error: " . curl_error($ch);
    } else {
      $data = json_decode($response, true);
      print_r($data);
    }
    curl_close($ch);
  • Script: Api: UPDATE PRODUCT COLLECTIONS

     Code: PHP
    UPDATE MULTIPLE COLLECTIONS (up to 3000 same time)
    $url = "https://boostore.pro/api/commerce/products/collections"; // Collections API update endpoint
    $authKey = "your_authorization_token_here"; // Authorization token (use your real key)
    // Collections data
     $collectionsData = [
      "collections" => [
        [
          "collection_id" => 30518, // Collection ID
          "collection_name" => "sneakers", // System collection name (slug) REQUIRED
          "collection_title" => "Sneakers", // Collection title
          "collection_parent_id" => 1, // Parent collection ID
          "collection_parent_name" => "ParentCategory", // Parent collection Name
          "collection_position" => 0, // Position in the list
          
          "collection_visible" => 0, // Visibility (0 = hidden, 1 = visible)
          "collection_lang" => "ru", // Collection language
          
          "collection_show_tree" => 0, // Show tree (0/1)
          "collection_multilangid" => 0, // Multilanguage binding ID
    
          "collection_image" => [
            "0" => "https://boostore.pro/upload/catalog/16572/files/style/categories/30518.webp", // Image URL
          ],
          "images_replace" => 1, // Image replace if exists
          "collection_image_settings" => 7, // Image display settings
          "collection_button" => "", // Custom button (without href)
          "collection_access" => 0, // Access level
    
          "collection_meta_d" => "", // Meta description
          "collection_meta_k" => "", // Meta keywords
          "collection_title_inpage" => "Sneakers", // Title shown inside the collection page
          "collection_text" => "", // Collection description text
          "collection_text_position" => 0, // Description position
          "collection_settings_comments" => "", // Comment settings
          
          "collection_settings_rating" => 0, // Enable rating (0/1)
          "collection_datestamp" => "2025-09-16T12:41:07+00:00", // Datetime of creation/update
         
          "update_exists" => 1, // Update exists collection (0/1)
          "delete" => 0, // For delete collection (0/1)
        ]
      ]
    ];
    
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "UPDATE"); // UPDATE / PUT / PATCH
    curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($collectionsData, JSON_UNESCAPED_UNICODE));
    curl_setopt($ch, CURLOPT_HTTPHEADER, [
    "Authorization: Bearer " . $authKey,
    "Content-Type: application/json"
    ]);
    
    $response = curl_exec($ch);
    if (curl_errno($ch)) {
      echo "Request error: " . curl_error($ch);
    } else {
      $data = json_decode($response, true);
      print_r($data);
    }
    curl_close($ch);
  • Script: Api: GET PRODUCTS list

     Code: PHP
    GET PRODUCTS (list with pagination and search)
      $url = "https://boostore.pro/api/commerce/products"; // Products API endpoint
      $authKey = "your_authorization_token_here"; // Authorization token
      // Optional query parameters for pagination, search, and filtering
      $params = [
        "page"     => 1,         // Page number (default: 1)
        "per_page" => 100,       // Items per page (default: 100, max: 1000)
        "search"   => "",        // Search term (searches title and SKU)
        "order"    => "desc",    // Sort direction: "asc" or "desc"
        "orderby"  => "id",      // Sort field: "id", "title", or "price"
        "status"   => "",        // Filter by status: "publish" or "hidden"
      ];
      $url .= "?" . http_build_query($params);
      $ch = curl_init($url);
      curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
      curl_setopt($ch, CURLOPT_HTTPHEADER, [
        "Authorization: Bearer " . $authKey,
        "Content-Type: application/json"
      ]);
      $response = curl_exec($ch);
      if (curl_errno($ch)) {
        echo "Request error: " . curl_error($ch);
      } else {
        $data = json_decode($response, true);
        print_r($data); // Output: { "code": "success", "page": 1, "per_page": 100, "total": "...", "products": [...] }
      }
      curl_close($ch);
      
  • Script: Api: GET PRODUCT by ID / SKU

     Code: PHP
    GET PRODUCT BY ID / SKU
      // By ID:
      $productId = 479077;
      $url = "https://boostore.pro/api/commerce/products/" . $productId;
      // OR by SKU:
      // $sku = "AO2515C";
      // $url = "https://boostore.pro/api/commerce/products/sku/" . $sku;
      $authKey = "your_authorization_token_here"; // Authorization token
      $ch = curl_init($url);
      curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
      curl_setopt($ch, CURLOPT_HTTPHEADER, [
        "Authorization: Bearer " . $authKey,
        "Content-Type: application/json"
      ]);
      $response = curl_exec($ch);
      if (curl_errno($ch)) {
        echo "Request error: " . curl_error($ch);
      } else {
        $data = json_decode($response, true);
        print_r($data); // Output: { "id": ..., "sku": "...", "title": "...", "price": "...", ... }
      }
      curl_close($ch);
      
  • Script: Api: GET ORDERS list

     Code: PHP
    GET ORDERS (list with pagination and filters)
      $url = "https://boostore.pro/api/commerce/orders"; // Orders API endpoint
      $authKey = "your_authorization_token_here"; // Authorization token
      // Query parameters for filtering
      $params = [
        "page"     => 1,
        "sort_by_type" => "date",      // Sort type: "date" or other fields
        "sort_by"      => "DESC",      // Sort direction
        "date"         => "",          // Predefined period: 1=today, 2=yesterday, 3=week, 4=month, 5=quarter, 6=year
        "show_hidden_orders" => 0,     // Include deleted orders (0=no, 1=yes)
      ];
      $url .= "?" . http_build_query($params);
      $ch = curl_init($url);
      curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
      curl_setopt($ch, CURLOPT_HTTPHEADER, [
        "Authorization: Bearer " . $authKey,
        "Content-Type: application/json"
      ]);
      $response = curl_exec($ch);
      if (curl_errno($ch)) {
        echo "Request error: " . curl_error($ch);
      } else {
        $data = json_decode($response, true);
        print_r($data);
      }
      curl_close($ch);
      
  • Script: Api: DELETE PRODUCT

     Code: PHP
    DELETE PRODUCT (soft delete)
      $productId = 479077;
      $url = "https://boostore.pro/api/commerce/products/" . $productId; // Product API endpoint with ID
      $authKey = "your_authorization_token_here"; // Authorization token
      $ch = curl_init($url);
      curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
      curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "DELETE");
      curl_setopt($ch, CURLOPT_HTTPHEADER, [
        "Authorization: Bearer " . $authKey,
        "Content-Type: application/json"
      ]);
      $response = curl_exec($ch);
      if (curl_errno($ch)) {
        echo "Request error: " . curl_error($ch);
      } else {
        $data = json_decode($response, true);
        print_r($data); // Output: { "status": "success", "message": "Producy marked as deleted" }
      }
      curl_close($ch);
      
  • Script: Api: DELETE ORDER

     Code: PHP
    DELETE ORDER (soft delete)
      $orderId = 12345;
      $url = "https://boostore.pro/api/commerce/orders/" . $orderId; // Order API endpoint with ID
      $authKey = "your_authorization_token_here"; // Authorization token
      $ch = curl_init($url);
      curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
      curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "DELETE");
      curl_setopt($ch, CURLOPT_HTTPHEADER, [
        "Authorization: Bearer " . $authKey,
        "Content-Type: application/json"
      ]);
      $response = curl_exec($ch);
      if (curl_errno($ch)) {
        echo "Request error: " . curl_error($ch);
      } else {
        $data = json_decode($response, true);
        print_r($data); // Output: { "status": "success", "message": "Order marked as deleted" }
      }
      curl_close($ch);
      
  • Script: Api: GET / POST categories, producers, collections

     Code: PHP
    GET / POST categories, producers, collections
      // ----- GET list (by resource type) -----
      // Categories: /api/commerce/products/categories
      // Producers:  /api/commerce/products/producers
      // Collections:/api/commerce/products/collections
      $resource = "categories"; // "categories", "producers", or "collections"
      $url = "https://boostore.pro/api/commerce/products/" . $resource;
      $authKey = "your_authorization_token_here";
      // Optional: get by ID - append /{id} or by name: /name/{name}
      // $url .= "/123"; // by ID
      // $url .= "/name/my-category"; // by name
      $ch = curl_init($url);
      curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
      curl_setopt($ch, CURLOPT_HTTPHEADER, [
        "Authorization: Bearer " . $authKey,
        "Content-Type: application/json"
      ]);
      $response = curl_exec($ch);
      if (curl_errno($ch)) {
        echo "Request error: " . curl_error($ch);
      } else {
        $data = json_decode($response, true);
        print_r($data);
      }
      curl_close($ch);
      
      // ----- POST create (single or batch up to 3000) -----
      // Change $resource to "categories" / "producers" / "collections"
      $url = "https://boostore.pro/api/commerce/products/categories";
      $authKey = "your_authorization_token_here";
      $data = [
        "category_name" => "new-category",   // _name = system slug, REQUIRED (for producers: producer_name, for collections: collection_name)
        "category_title" => "New Category",  // _title = display title
        "category_parent_id" => 1,           // Parent ID (0 = root)
        "category_visible" => 1,             // 1 = visible, 0 = hidden
        "category_lang" => "en",             // Language code
        "category_image" => [                // Image URL or local path
          "0" => "https://example.com/image.jpg"
        ],
        "category_meta_d" => "",             // Meta description
        "category_meta_k" => "",             // Meta keywords
      ];
      // For batch: wrap in array: [ "categories" => [ $cat1, $cat2, ... ] ]
      $ch = curl_init($url);
      curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
      curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
      curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data, JSON_UNESCAPED_UNICODE));
      curl_setopt($ch, CURLOPT_HTTPHEADER, [
        "Authorization: Bearer " . $authKey,
        "Content-Type: application/json"
      ]);
      $response = curl_exec($ch);
      if (curl_errno($ch)) {
        echo "Request error: " . curl_error($ch);
      } else {
        $data = json_decode($response, true);
        print_r($data);
      }
      curl_close($ch);
      
  • Script: Api: BLOG ARTICLES (GET / POST / UPDATE / DELETE)

     Code: PHP
    GET BLOG ARTICLES (list / by ID)
      // ----- Get list of articles -----
      $url = "https://boostore.pro/api/commerce/blog/articles";
      // ----- By ID: $url .= "/123"; -----
      $authKey = "your_authorization_token_here";
      $ch = curl_init($url);
      curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
      curl_setopt($ch, CURLOPT_HTTPHEADER, [
        "Authorization: Bearer " . $authKey,
        "Content-Type: application/json"
      ]);
      $response = curl_exec($ch);
      if (curl_errno($ch)) {
        echo "Request error: " . curl_error($ch);
      } else {
        $data = json_decode($response, true);
        print_r($data);
      }
      curl_close($ch);
    
      // ----- POST create article -----
      $url = "https://boostore.pro/api/commerce/blog/articles";
      $data = [
        "title"         => "My Article",
        "slug"          => "my-article",
        "language"      => "en",
        "category_id"   => 5,
        "description"   => "<p>Full article text</p>",
        "short_description" => "Article preview",
        "meta_title"    => "My Article | Site",
        "tags"          => "sneakers, nike, adidas, sport shoes",
        "status"        => 1,
        "priority"      => 5,
        "schema"        => 6
      ];
      // For batch: wrap in array: [ "articles" => [ $article1, $article2, ... ] ]
      $ch = curl_init($url);
      curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
      curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
      curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data, JSON_UNESCAPED_UNICODE));
      curl_setopt($ch, CURLOPT_HTTPHEADER, [
        "Authorization: Bearer " . $authKey,
        "Content-Type: application/json"
      ]);
      $response = curl_exec($ch);
      if (curl_errno($ch)) {
        echo "Request error: " . curl_error($ch);
      } else {
        $data = json_decode($response, true);
        print_r($data);
      }
      curl_close($ch);
    
      // ----- UPDATE article by ID (PATCH / PUT / UPDATE) -----
      $articleId = 123;
      $url = "https://boostore.pro/api/commerce/blog/articles/" . $articleId;
      $updateData = [
        "title"      => "Updated Title",
        "status"     => 1,
        "priority"   => 10,
      ];
      $ch = curl_init($url);
      curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
      curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PATCH"); // also works with PUT / UPDATE
      curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($updateData, JSON_UNESCAPED_UNICODE));
      curl_setopt($ch, CURLOPT_HTTPHEADER, [
        "Authorization: Bearer " . $authKey,
        "Content-Type: application/json"
      ]);
      $response = curl_exec($ch);
      if (curl_errno($ch)) {
        echo "Request error: " . curl_error($ch);
      } else {
        $data = json_decode($response, true);
        print_r($data);
      }
      curl_close($ch);
    
      // ----- UPDATE article by slug_search (without ID) -----
      // PUT/PATCH on /blog/articles without ID uses slug_search to find the article
      $url = "https://boostore.pro/api/commerce/blog/articles";
      $updateData = [
        "slug_search"  => "my-article",
        "title"        => "Updated Title via slug_search",
        "tags"         => "sneakers, shoes, sport",
        "status"       => 1,
        "language"     => "en",
      ];
      $ch = curl_init($url);
      curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
      curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PATCH"); // also works with PUT / UPDATE
      curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($updateData, JSON_UNESCAPED_UNICODE));
      curl_setopt($ch, CURLOPT_HTTPHEADER, [
        "Authorization: Bearer " . $authKey,
        "Content-Type: application/json"
      ]);
      $response = curl_exec($ch);
      if (curl_errno($ch)) {
        echo "Request error: " . curl_error($ch);
      } else {
        $data = json_decode($response, true);
        print_r($data);
      }
      curl_close($ch);
    
      // ----- DELETE article by ID -----
      $articleId = 123;
      $url = "https://boostore.pro/api/commerce/blog/articles/" . $articleId;
      // OR send { "delete": true } in UPDATE body instead
      $ch = curl_init($url);
      curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
      curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "DELETE");
      curl_setopt($ch, CURLOPT_HTTPHEADER, [
        "Authorization: Bearer " . $authKey,
        "Content-Type: application/json"
      ]);
      $response = curl_exec($ch);
      if (curl_errno($ch)) {
        echo "Request error: " . curl_error($ch);
      } else {
        $data = json_decode($response, true);
        print_r($data);
      }
      curl_close($ch);
      
  • Script: Api: GET BOOKING SLOTS

     Code: PHP
    GET BOOKING SLOTS
      $url = "https://boostore.pro/api/commerce/booking"; // Booking API endpoint
      $authKey = "your_authorization_token_here"; // Authorization token
      // Optional filters
      $params = [
        "date_from" => "2026-07-01",
        "date_to"   => "2026-07-31",
        "group_id"  => "",
        "type"      => "",
        "access"    => "",
      ];
      $url .= "?" . http_build_query($params);
      $ch = curl_init($url);
      curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
      curl_setopt($ch, CURLOPT_HTTPHEADER, [
        "Authorization: Bearer " . $authKey,
        "Content-Type: application/json"
      ]);
      $response = curl_exec($ch);
      if (curl_errno($ch)) {
        echo "Request error: " . curl_error($ch);
      } else {
        $data = json_decode($response, true);
        print_r($data);
      }
      curl_close($ch);
      
  • Script: Api: CREATE BOOKING SLOT

     Code: PHP
    CREATE BOOKING SLOT
      $url = "https://boostore.pro/api/commerce/booking"; // Booking API endpoint
      $authKey = "your_authorization_token_here"; // Authorization token
      $slotData = [
        "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,
        "description" => "<p>Morning yoga session</p>"
      ];
      $ch = curl_init($url);
      curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
      curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
      curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($slotData, JSON_UNESCAPED_UNICODE));
      curl_setopt($ch, CURLOPT_HTTPHEADER, [
        "Authorization: Bearer " . $authKey,
        "Content-Type: application/json"
      ]);
      $response = curl_exec($ch);
      if (curl_errno($ch)) {
        echo "Request error: " . curl_error($ch);
      } else {
        $data = json_decode($response, true);
        print_r($data);
      }
      curl_close($ch);
      
  • Script: Api: UPDATE BOOKING SLOT (by ID / group_id / slug_search)

     Code: PHP
    UPDATE BOOKING SLOT
      // Priority: ID → group_id → slug_search
      // By ID (highest priority):
      $slotId = 123;
      $url = "https://boostore.pro/api/commerce/booking/" . $slotId;
      // OR by group_id (second priority, exactly 1 slot in group):
      // $url = "https://boostore.pro/api/commerce/booking";
      // $updateData["group_id"] = 5;
      // OR by slug_search (third priority, upsert if not found):
      // $url = "https://boostore.pro/api/commerce/booking";
      // $updateData["slug_search"] = "yoga-morning";
      $authKey = "your_authorization_token_here"; // Authorization token
      $updateData = [
        "group_price" => 35.00,
        "access"      => 1,
        "description" => "<p>Updated session description</p>"
      ];
      $ch = curl_init($url);
      curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
      curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PUT");
      curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($updateData, JSON_UNESCAPED_UNICODE));
      curl_setopt($ch, CURLOPT_HTTPHEADER, [
        "Authorization: Bearer " . $authKey,
        "Content-Type: application/json"
      ]);
      $response = curl_exec($ch);
      if (curl_errno($ch)) {
        echo "Request error: " . curl_error($ch);
      } else {
        $data = json_decode($response, true);
        print_r($data);
      }
      curl_close($ch);
      
  • Script: Api: DELETE BOOKING SLOT (by ID / group_id / slug_search)

     Code: PHP
    DELETE BOOKING SLOT
      // Priority: ID → group_id → slug_search
      // By ID (highest priority):
      $slotId = 123;
      $url = "https://boostore.pro/api/commerce/booking/" . $slotId;
      // OR by name:
      // $slug = "yoga-morning";
      // $url = "https://boostore.pro/api/commerce/booking/slug/" . $slug;
      // OR send body: { "group_id": 5 } or { "slug_search": "yoga-morning" }
      // $url = "https://boostore.pro/api/commerce/booking";
      $authKey = "your_authorization_token_here"; // Authorization token
      $ch = curl_init($url);
      curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
      curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "DELETE");
      curl_setopt($ch, CURLOPT_HTTPHEADER, [
        "Authorization: Bearer " . $authKey,
        "Content-Type: application/json"
      ]);
      $response = curl_exec($ch);
      if (curl_errno($ch)) {
        echo "Request error: " . curl_error($ch);
      } else {
        $data = json_decode($response, true);
        print_r($data);
      }
      curl_close($ch);
      
Назад