Як підключити AI-агента до магазину Shopcore

Як підключити AI-агента до магазину Shopcore

Безпечний доступ до готових дій магазину — без доступу до коду чи сервера.

AI API Shopcore — це один шлюз до дозволених дій магазину. Агент не отримує доступу до Python, бази даних, файлової системи чи сервера: він бачить лише методи нижче та їхні параметри.

Для AI-агента: ця стаття пояснює архітектуру й правила. Перед роботою завжди отримай живий каталог через GET /ai/v1/methods/. Не вигадуй назви методів або параметрів. Спочатку використовуй read-методи з низьким ризиком; для небезпечних дій отримай явне підтвердження власника.

Де взяти доступ

  1. В адмінці Hive відкрийте Налаштування сайту.
  2. Переконайтеся, що останній тумблер «API для AI-агентів» увімкнений.
  3. Відкрийте секцію «Доступ для AI-агента». Тут можна побачити ідентифікатор, скопіювати промпт і перегенерувати токен; попередній токен одразу перестане діяти.

Ідентифікатор ключа — несекретна службова мітка для журналу, розпізнавання та відкликання ключа. Окремо він показується в налаштуваннях Hive й не дає доступу сам по собі. Токен — секрет; саме він авторизує запити.

Як працює API

Спочатку агент читає актуальний manifest:

GET https://<ваш-hive-host>/ai/v1/methods/
Authorization: Bearer <ваш-токен>

Manifest можна фільтрувати параметрами group, access і risk. Він повертає ієрархію груп, доступність модулів, schema параметрів, ризик, потребу підтвердження та побічні ефекти.

Усі дії виконуються через один шлюз:

POST https://<ваш-hive-host>/ai/v1/invoke/
Authorization: Bearer <ваш-токен>
Content-Type: application/json

{
  "method": "system.status",
  "params": {},
  "options": {"confirmed": false}
}

Для завантаження файлів використовуйте multipart/form-data: поля method, params_json, options_json та названі файлові поля, описані вибраним методом.

Власне зображення в блок сторінки, статті чи головної блогу завантажуйте методом pages.blocks.media.set: файл передайте в полі file, а шлях поля візьміть із media_fields відповіді pages.blocks.get (наприклад, background_image або slides.1.background_image). Змінюється лише це поле; прибрати зображення можна через pages.blocks.media.delete.

Відповідь і контекст

Успішна відповідь містить ok, status, request_id, назву методу, ризик, версію каталогу, data і контекст магазину. Дані предметної області повертаються в data; якщо їх немає, агент має викликати відповідний read-метод, а не вгадувати стан.

{
  "ok": true,
  "status": "success",
  "request_id": "...",
  "method": "system.status",
  "data": {},
  "context": {"shop": {"id": 1, "public_url": "https://..."}}
}

Ризики й підтвердження

РівеньПравило агента
lowБезпечне читання або вузька оборотна зміна.
mediumПеревірити поточний стан read-методом і пояснити наслідок.
highПоказати користувачу конкретну дію та отримати явне підтвердження.
dynamicРизик залежить від параметрів; наприклад HTML, індексація або реквізити вимагають підтвердження.

Для методів із confirmation: required шлюз не виконає дію без options.confirmed=true. Кожен виклик записується в журнал із request ID; токени, паролі й секрети автоматично приховуються.

Критичні правила предметної області

Товари й автоімпорт

Перед будь-якою ручною зміною товару викличте exchange.auto_import.get. Якщо is_active=true, will_update_existing_products=true і потрібне поле є в managed_fields, наступний автоімпорт може перетерти зміну.

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

Склад і наявність

Коли модуль складу ввімкнений, catalog.products.update технічно відхиляє patch.warehouse_count. Правильний шлях: warehouse.stock.list → warehouse.revisions.create → перевірка через warehouse.revisions.get → підтверджене warehouse.revisions.post.

Блоки та власний HTML

Спочатку шукайте готовий тип через pages.blocks.catalog. Якщо потрібного візуального блока немає, html_code можна використати для власного UI, а потрібні браузеру дані вмикати лише найвужчими полями expose_* контракту shopcore.html-block-data.v1.

Усі набори даних дефолтно вимкнені. HTML-блок не дає доступу до Python, сирого backend-контексту, приватних даних або AI-токена. Створення й редагування HTML потребують явного підтвердження.

Власні зображення для HTML завантажуйте в медіатеку блока (images, до 30) через pages.blocks.media.set з append=true і вставляйте в HTML як [[image:ключ]].

Порядок товарів у блоці «Товари сайту»

Блок site_products має налаштування content.shared.sort (з catalog_version 2026-09-26.1; -number — з 2026-09-27.1): number — за замовчуванням (за порядковим номером), -number — за порядковим номером (інвертовано), price — від дешевих до дорогих, -price — від дорогих до дешевих, -views — за популярністю, -updated_at — спочатку нові, -rating — за рейтингом. Це ключі сортування блока каталогу плюс -number; невідоме значення перетворюється на number.

Це налаштування самого блока, а не вибір відвідувача: show_sort завжди вимкнено. Змінюйте порядок через pages.blocks.update у content.shared; кнопка «Завантажити ще», пагінатор і автоскрол довантажують товари в тому самому порядку. Якщо склад увімкнено, товари в наявності йдуть першими.

Фото-заглушки товарів

Новий товар має стандартне головне фото. Додайте реальні фото, зробіть потрібне головним і ще раз викличте catalog.product_images.list: стара заглушка може перейти в галерею, де її треба видалити до публікації.

Іконки категорій у меню

Перевіряйте media.*_is_placeholder і menu_media_requires_attention. Дефолтні icon, icon_hover та image треба замінити доречними файлами або свідомо прибрати.

Контрольні версії сторінки

Перед широкою, не точковою зміною дизайну спочатку викличте pages.copy: він створить неопубліковану незалежну копію metadata, активних блоків, перекладів і assets. Для точкової зміни достатньо snapshot потрібних блоків; snapshot усіх блоків із збереженим position — лише fallback, бо це не атомарна версія сторінки.

Модерація відгуків і питань

Перед модерацією прочитайте reviews.settings.get і сам запис через reviews.get або questions.get: не публікуйте відгук чи питання, не прочитавши текст. Спам, рекламу, образи й підозрілі записи відхиляйте статусом rejected через reviews.moderate / questions.moderate, а не видаляйте — запис зникне з сайту й рейтингу, але лишиться в історії.

Відповідь questions.reply публікується одразу від імені магазину. Email авторів — персональні дані: не показуйте їх без потреби й не передавайте третім сторонам.

Кілька методів доставки

courier, post і self_pickup можуть мати кілька екземплярів. Спочатку викличте shipping.settings.get, а для update/delete завжди використовуйте точний публічний код provider:id.

required_fields має бути підмножиною show_fields. Назва, опис та адреса самовивозу зберігаються в замовленні як snapshot.

Дані для власного HTML-блока

HTML-код отримує JSON лише після явного ввімкнення потрібного набору в налаштуваннях самого блока. Якщо всі перемикачі вимкнені, JSON-вузол не рендериться і пов'язані з ним запити не виконуються.

ПолеЩо передає
expose_site_dataНазва й URL сайту, мова, валюта, timezone, статус складу/account і лише підсумок кошика: кількість рядків та subtotal.
expose_navigation_dataОпубліковані сторінки й дерево категорій поточного магазину; максимум по 200 записів.
expose_context_dataТип runtime та публічні дані поточної сторінки, категорії або товару.
expose_product_dataДо 24 товарів із джерела current, latest, catalog, current_category або selected_category.

Читання у власному inline-script:

const root = document.currentScript.closest('[data-shopcore-html-code-block]');
const node = root?.querySelector('[data-shopcore-html-data] script[type="application/json"]');
const data = node ? JSON.parse(node.textContent) : {};

Увімкніть лише дані, які реально використовує UI. Перевіряйте products.meta.truncated; не намагайтеся обходити ліміт запитами до приватного AI API з браузера.

Зображення для HTML

У блоці є медіатека images — до 30 зображень з полями key, image і alt. Приймаються лише JPG, PNG, WEBP і GIF до 15 МБ; сервер перевіряє вміст і зберігає файл у WEBP до 2400 px. SVG та інші файли не приймаються.

Завантаження агентом: pages.blocks.media.set з append=true, field=images.{item_count}.image (значення є в media_fields) і item={"key": "hero", "alt": "…"}; відповідь містить library_item.token. Без append той самий field замінює зображення, pages.blocks.media.delete з remove_item=true прибирає елемент.

<img src="[[image:hero]]" alt="Головне фото">

Під час показу сторінки [[image:ключ]] замінюється поточним URL зображення, тож після заміни картинки HTML міняти не треба. Невідомий ключ дає порожній рядок і показується в плашці блока в білдері.

Як уникнути мерехтіння при JS-підмінах

Перший вибір — не JavaScript. Отримайте schema через pages.blocks.catalog або pages.blocks.get і запишіть назву кошика, текст кнопки чи інше видиме значення в штатне поле блока. Так сервер одразу відрендерить правильний HTML.

Якщо потрібного поля немає і JS-підміна справді необхідна:

  1. Через pages.list знайдіть header runtime-сторінку; не використовуйте зашитий page ID.
  2. Додайте preloader на початку header, до скрипта, який змінює UI. Він має приховати лише нестабільну область або, коли підмін багато, коротко закрити сторінку нейтральною заставкою.
  3. Виконайте всі підміни одним раннім скриптом і зніміть preloader централізовано після завершення DOM-оновлень.
  4. Додайте гарантоване зняття при exception і timeout приблизно 3–5 секунд, noscript-поведінку та доступний текст стану. Ані помилка, ані заблокований зовнішній ресурс не повинні залишити магазин закритим.
  5. Перевірте hard reload із повільною мережею, мобільний viewport, сторінки каталогу/товару/кошика й відсутність стрибка layout після зняття заставки.

Рекомендований конвеєр перенесення магазину

  1. Discovery. Завантажте live manifest, викличте system.overview і перевірте доступність потрібних методів. Не копіюйте назви методів або schemas зі старого скрипта.
  2. Preflight. Перевірте exchange.auto_import.get, модулі, мови, склад, поточні категорії/товари, pages.list, блоки сторінок і pages.blocks.catalog. Конфлікт автоімпорту вирішіть до першого запису.
  3. Інвентаризація джерела. До запису перевірте encoding, delimiter, обов'язкові поля, унікальність source ID/SKU, батьківські зв'язки, дублікати slug, ціни, порожні категорії, URL та типи медіа. Сформуйте звіт про проблемні рядки.
  4. Стабільне зіставлення. Основний ключ — незмінний source ID або SKU. Збережіть локальний mapping source_id → shopcore_id після кожного успішного кроку. Нормалізована назва допустима лише як явно перевірений fallback без колізій.
  5. Dry-run. Покажіть кількість create/update/skip/conflict, майбутні slug і категорії, варіаційні сім'ї, медіа та high-risk операції. На цьому етапі API-записи не виконуються.
  6. Staged write. Створюйте категорії й товари непублікованими; для update спочатку читайте об'єкт і передавайте expected_updated_at. Не зашивайте page/category/block ID — один раз знайдіть їх за runtime context, slug або точним стабільним атрибутом і покладіть у mapping.
  7. Зв'язки після сутностей. Варіації, фільтри, upsell та інші залежності задавайте лише коли всі потрібні ID вже відомі. Не покладайтеся на неявне успадкування: upsell прив'язується окремо до кожного точного товару/варіації.
  8. Медіа. Завантажуйте з обмеженою паралельністю, перевіряйте Content-Type/розмір, ведіть список помилок і retry з backoff для 429/5xx. Після timeout спочатку перечитайте галерею: не повторюйте можливий успішний upload наосліп.
  9. Storefront. Спочатку використовуйте стандартні blocks і їх schemas, зберігайте незмінені поля, а custom HTML/JS — лише як presentation layer. Для JS-підмін застосуйте правило preloader вище.
  10. Verify and publish. Звірте кількість і mapping, дублікати, ціни, категорії, варіації, upsell, картинки, SEO, сторінки та блоки; відкрийте ключові storefront URL. Публікуйте батьківські товари й сторінки тільки після успішної перевірки.
  11. Resume-safe result. Збережіть checkpoint, request IDs, створені/оновлені/пропущені записи й окремий список помилок без токена. Повторний запуск має продовжувати роботу, а не дублювати її.

Для великих переносів краще кілька контрольованих фаз і підсумок після кожної, ніж один довгий скрипт без checkpoint. Паралелити безпечно переважно читання та завантаження незалежних медіа; записи зі зв'язками й публікацію виконуйте у визначеному порядку.

Каталог методів: 204

Нижче — повний знімок каталогу для людей і агентів. Живий manifest має пріоритет, якщо версії відрізняються. catalog_version: 2026-09-18.2

Система (4)

Стан і можливості (2)

read Ризик: low

system.overview — Огляд даних магазину

Що робить: Дає компактні лічильники каталогу, сторінок, замовлень, клієнтів і журналу AI без завантаження самих записів.

ДоступreadРизикlow
ПідтвердженняnoneІдемпотентністьnot_needed
Потрібні модулі—
Класи данихshop_internal
Наслідки—
Додатковий контекст для AI

Що зачіпає: shop.capabilities

Правило рішення: Можна викликати без підтвердження, але запитуй лише потрібні дані й не роби зайвих змін.

Вхідні дані (params)
{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}
Результат (data)
{
  "type": "object"
}
read Ризик: low

system.status — Стан магазину

Що робить: Повертає ідентичність магазину, публічний URL, стан підписки та модулів.

ДоступreadРизикlow
ПідтвердженняnoneІдемпотентністьnot_needed
Потрібні модулі—
Класи данихpublic, shop_internal
Наслідки—
Додатковий контекст для AI

Що зачіпає: shop.capabilities

Правило рішення: Можна викликати без підтвердження, але запитуй лише потрібні дані й не роби зайвих змін.

Вхідні дані (params)
{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}
Результат (data)
{
  "type": "object"
}

Журнал AI (2)

read Ризик: medium

audit.requests.get — Деталі AI-запиту

Що робить: Повертає один запис журналу з автоматично прихованими секретами.

ДоступreadРизикmedium
ПідтвердженняnoneІдемпотентністьnot_needed
Потрібні модулі—
Класи данихshop_internal
Наслідки—
Додатковий контекст для AI

Що зачіпає: ai.audit_log

Правило рішення: Спочатку виконай preflight, покажи користувачу наслідок і віддай перевагу вузькому методу.

Де можна помилитися
  • Помилка може змінити поведінку магазину або дані; покажи очікуваний результат до запису.
Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "request_id": {
      "type": "string"
    }
  },
  "additionalProperties": false,
  "required": [
    "request_id"
  ]
}
Результат (data)
{
  "type": "object"
}
read Ризик: medium

audit.requests.list — Список AI-запитів

Що робить: Повертає журнал викликів цього магазину з фільтрами за методом і статусом; вміст запитів не включає.

ДоступreadРизикmedium
ПідтвердженняnoneІдемпотентністьnot_needed
Потрібні модулі—
Класи данихshop_internal
Наслідки—
Додатковий контекст для AI

Що зачіпає: ai.audit_log

Правило рішення: Спочатку виконай preflight, покажи користувачу наслідок і віддай перевагу вузькому методу.

Де можна помилитися
  • Помилка може змінити поведінку магазину або дані; покажи очікуваний результат до запису.
Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "query": {
      "type": "string",
      "description": "Пошук за текстовими полями."
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 100,
      "default": 20
    },
    "offset": {
      "type": "integer",
      "minimum": 0,
      "maximum": 1000000,
      "default": 0
    },
    "method": {
      "type": "string"
    },
    "status": {
      "type": "string",
      "enum": [
        "running",
        "success",
        "error"
      ]
    }
  },
  "additionalProperties": false
}
Результат (data)
{
  "type": "object"
}

Каталог (52)

Категорії (5)

write Ризик: medium Підтвердження: recommended

catalog.categories.create — Створити категорію

Що робить: Створює категорію у наявному MPTT-дереві; slug генерується автоматично, якщо не переданий. Після створення перевір category.media та menu_media_requires_attention: дефолтні icon/icon_hover/image не слід залишати в меню — завантажте доречні або очистіть їх.

ДоступwriteРизикmedium
ПідтвердженняrecommendedІдемпотентністьsupported
Потрібні модулі—
Класи данихshop_internal
Наслідкиcatalog_tree_changed
Додатковий контекст для AI

Що зачіпає: catalog.categories, storefront.catalog

Правило рішення: Спочатку виконай preflight, покажи користувачу наслідок і віддай перевагу вузькому методу.

Де можна помилитися
  • Змінює live-стан магазину; результат і помилки записуються в AI-журнал.
  • Помилка може змінити поведінку магазину або дані; покажи очікуваний результат до запису.
  • Стандартні icon/icon_hover/image категорії можуть потрапити в меню як видимі заглушки.
Що перевірити перед викликом
  • catalog.categories.list — Прочитай поточний стан і не перезаписуй поля, яких користувач не просив змінювати. (before_write)
Безпечніший шлях
  • Перевір menu_media_requires_attention; завантаж доречні іконки/картинку або очисти дефолтні поля в адмінці.
Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "title": {
      "type": "string"
    },
    "slug": {
      "type": "string"
    },
    "parent_id": {
      "type": [
        "integer",
        "null"
      ]
    },
    "number": {
      "type": "integer"
    },
    "translations": {
      "type": "object"
    }
  },
  "additionalProperties": false,
  "required": [
    "title"
  ]
}
Результат (data)
{
  "type": "object"
}
write Ризик: high Підтвердження: required

catalog.categories.delete — Видалити категорію

Що робить: Видаляє категорію. Через правила моделі також може видалити її дочірню гілку; товари отримують порожню основну категорію.

ДоступwriteРизикhigh
ПідтвердженняrequiredІдемпотентністьnot_needed
Потрібні модулі—
Класи данихshop_internal
Наслідкиcategory_branch_deleted, products_detached
Додатковий контекст для AI

Що зачіпає: catalog.categories, storefront.catalog

Правило рішення: Отримай явне підтвердження конкретної дії безпосередньо перед викликом.

Де можна помилитися
  • Змінює live-стан магазину; результат і помилки записуються в AI-журнал.
  • Дію може бути складно або неможливо скасувати; потрібне підтвердження точної операції.
  • Стандартні icon/icon_hover/image категорії можуть потрапити в меню як видимі заглушки.
Що перевірити перед викликом
  • catalog.categories.get — Прочитай поточний стан і не перезаписуй поля, яких користувач не просив змінювати. (before_write)
Безпечніший шлях
  • Перевір menu_media_requires_attention; завантаж доречні іконки/картинку або очисти дефолтні поля в адмінці.
Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "category_id": {
      "type": "integer",
      "minimum": 1
    }
  },
  "additionalProperties": false,
  "required": [
    "category_id"
  ]
}
Результат (data)
{
  "type": "object"
}
read Ризик: low

catalog.categories.get — Дані категорії

Що робить: Повертає категорію, її шлях, переклади, медіа, SEO та кількість товарів. Поля media.*_is_placeholder і menu_media_requires_attention показують, чи лишилися стандартні іконки/картинка меню, які треба свідомо заповнити або прибрати.

ДоступreadРизикlow
ПідтвердженняnoneІдемпотентністьnot_needed
Потрібні модулі—
Класи данихshop_internal
Наслідки—
Додатковий контекст для AI

Що зачіпає: catalog.categories, storefront.catalog

Правило рішення: Можна викликати без підтвердження, але запитуй лише потрібні дані й не роби зайвих змін.

Де можна помилитися
  • Стандартні icon/icon_hover/image категорії можуть потрапити в меню як видимі заглушки.
Безпечніший шлях
  • Перевір menu_media_requires_attention; завантаж доречні іконки/картинку або очисти дефолтні поля в адмінці.
Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "category_id": {
      "type": "integer",
      "minimum": 1
    }
  },
  "additionalProperties": false,
  "required": [
    "category_id"
  ]
}
Результат (data)
{
  "type": "object"
}
read Ризик: low

catalog.categories.list — Список категорій

Що робить: Повертає дерево категорій магазину з батьком, рівнем і кількістю дочірніх категорій.

ДоступreadРизикlow
ПідтвердженняnoneІдемпотентністьnot_needed
Потрібні модулі—
Класи данихshop_internal
Наслідки—
Додатковий контекст для AI

Що зачіпає: catalog.categories, storefront.catalog

Правило рішення: Можна викликати без підтвердження, але запитуй лише потрібні дані й не роби зайвих змін.

Де можна помилитися
  • Стандартні icon/icon_hover/image категорії можуть потрапити в меню як видимі заглушки.
Безпечніший шлях
  • Перевір menu_media_requires_attention; завантаж доречні іконки/картинку або очисти дефолтні поля в адмінці.
Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "query": {
      "type": "string",
      "description": "Пошук за текстовими полями."
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 100,
      "default": 20
    },
    "offset": {
      "type": "integer",
      "minimum": 0,
      "maximum": 1000000,
      "default": 0
    },
    "parent_id": {
      "type": [
        "integer",
        "null"
      ]
    }
  },
  "additionalProperties": false
}
Результат (data)
{
  "type": "object"
}
write Ризик: medium Підтвердження: recommended

catalog.categories.update — Оновити категорію

Що робить: Частково оновлює назву, дерево, порядок і SEO категорії з перевіркою циклів та належності магазину. Після зміни структури перевір category.media: стандартні icon/icon_hover/image треба замінити доречними або прибрати з меню.

ДоступwriteРизикmedium
ПідтвердженняrecommendedІдемпотентністьnot_needed
Потрібні модулі—
Класи данихshop_internal
Наслідкиcatalog_tree_or_seo_changed
Додатковий контекст для AI

Що зачіпає: catalog.categories, storefront.catalog

Правило рішення: Спочатку виконай preflight, покажи користувачу наслідок і віддай перевагу вузькому методу.

Де можна помилитися
  • Змінює live-стан магазину; результат і помилки записуються в AI-журнал.
  • Помилка може змінити поведінку магазину або дані; покажи очікуваний результат до запису.
  • Стандартні icon/icon_hover/image категорії можуть потрапити в меню як видимі заглушки.
Що перевірити перед викликом
  • catalog.categories.get — Прочитай поточний стан і не перезаписуй поля, яких користувач не просив змінювати. (before_write)
Безпечніший шлях
  • Перевір menu_media_requires_attention; завантаж доречні іконки/картинку або очисти дефолтні поля в адмінці.
Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "category_id": {
      "type": "integer",
      "minimum": 1
    },
    "patch": {
      "type": "object",
      "description": "Частковий набір дозволених полів."
    },
    "translations": {
      "type": "object"
    }
  },
  "additionalProperties": false,
  "required": [
    "category_id",
    "patch"
  ]
}
Результат (data)
{
  "type": "object"
}

Товари (16)

read Ризик: low

catalog.buy_together.get — Супутні товари

Що робить: Повертає супутні товари для одного товару.

ДоступreadРизикlow
ПідтвердженняnoneІдемпотентністьnot_needed
Потрібні модулі—
Класи данихshop_internal
Наслідки—
Додатковий контекст для AI

Що зачіпає: catalog.products, storefront.catalog

Правило рішення: Можна викликати без підтвердження, але запитуй лише потрібні дані й не роби зайвих змін.

Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "product_id": {
      "type": "integer",
      "minimum": 1
    }
  },
  "additionalProperties": false,
  "required": [
    "product_id"
  ]
}
Результат (data)
{
  "type": "object"
}
write Ризик: medium Підтвердження: recommended

catalog.buy_together.set — Задати супутні товари

Що робить: Замінює список супутніх товарів через наявну M2M-модель.

ДоступwriteРизикmedium
ПідтвердженняrecommendedІдемпотентністьsupported
Потрібні модулі—
Класи данихshop_internal
Наслідкиbuy_together_replaced
Додатковий контекст для AI

Що зачіпає: catalog.products, storefront.catalog

Правило рішення: Спочатку виконай preflight, покажи користувачу наслідок і віддай перевагу вузькому методу.

Де можна помилитися
  • Змінює live-стан магазину; результат і помилки записуються в AI-журнал.
  • Помилка може змінити поведінку магазину або дані; покажи очікуваний результат до запису.
Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "product_id": {
      "type": "integer",
      "minimum": 1
    },
    "related_product_ids": {
      "type": "array",
      "items": {
        "type": "integer",
        "minimum": 1
      }
    }
  },
  "additionalProperties": false,
  "required": [
    "product_id",
    "related_product_ids"
  ]
}
Результат (data)
{
  "type": "object"
}
write Ризик: medium Підтвердження: recommended

catalog.product_images.add — Додати фото товару

Що робить: Додає завантажене multipart-поле file до галереї; формат і resize перевіряє чинне поле ProductImg.

Важливо: Активний автоімпорт може перетерти змінені поля товару або відновити видалені дані під час наступного запуску.
ДоступwriteРизикmedium
ПідтвердженняrecommendedІдемпотентністьnot_needed
Потрібні модулі—
Класи данихshop_internal
Наслідкиmedia_uploaded
Додатковий контекст для AI

Що зачіпає: catalog.products, storefront.catalog

Правило рішення: Спочатку виконай preflight, покажи користувачу наслідок і віддай перевагу вузькому методу.

Де можна помилитися
  • Змінює live-стан магазину; результат і помилки записуються в AI-журнал.
  • Помилка може змінити поведінку магазину або дані; покажи очікуваний результат до запису.
  • Активний автоімпорт може перетерти змінені поля товару або відновити видалені дані під час наступного запуску.
Що перевірити перед викликом
  • catalog.product_images.list — Прочитай поточний стан і не перезаписуй поля, яких користувач не просив змінювати. (before_write)
  • exchange.auto_import.get — Перевір активність, duplicate_policy і managed_fields; при перетині покажи ризик власнику та дай вибір. (before_product_write)
Безпечніший шлях
  • Змінити або вимкнути мапінг автоімпорту для поля, яке має керуватися вручну.
Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "product_id": {
      "type": "integer",
      "minimum": 1
    },
    "file_field": {
      "type": "string",
      "default": "file"
    },
    "alt": {
      "type": "string"
    }
  },
  "additionalProperties": false,
  "required": [
    "product_id"
  ]
}
Результат (data)
{
  "type": "object"
}
write Ризик: high Підтвердження: required

catalog.product_images.delete — Видалити фото

Що робить: Видаляє одне фото галереї разом із файлом через наявний signal моделі.

Важливо: Активний автоімпорт може перетерти змінені поля товару або відновити видалені дані під час наступного запуску.
ДоступwriteРизикhigh
ПідтвердженняrequiredІдемпотентністьnot_needed
Потрібні модулі—
Класи данихshop_internal
Наслідкиmedia_deleted
Додатковий контекст для AI

Що зачіпає: catalog.products, storefront.catalog

Правило рішення: Отримай явне підтвердження конкретної дії безпосередньо перед викликом.

Де можна помилитися
  • Змінює live-стан магазину; результат і помилки записуються в AI-журнал.
  • Дію може бути складно або неможливо скасувати; потрібне підтвердження точної операції.
  • Активний автоімпорт може перетерти змінені поля товару або відновити видалені дані під час наступного запуску.
Що перевірити перед викликом
  • catalog.product_images.list — Прочитай поточний стан і не перезаписуй поля, яких користувач не просив змінювати. (before_write)
  • exchange.auto_import.get — Перевір активність, duplicate_policy і managed_fields; при перетині покажи ризик власнику та дай вибір. (before_product_write)
Безпечніший шлях
  • Змінити або вимкнути мапінг автоімпорту для поля, яке має керуватися вручну.
Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "product_id": {
      "type": "integer",
      "minimum": 1
    },
    "image_id": {
      "type": "integer",
      "minimum": 1
    }
  },
  "additionalProperties": false,
  "required": [
    "product_id",
    "image_id"
  ]
}
Результат (data)
{
  "type": "object"
}
read Ризик: low

catalog.product_images.list — Фото товару

Що робить: Повертає головне фото й упорядковану галерею товару з ознаками заглушок. Після встановлення першого реального cover стандартна заглушка може перейти в галерею — знайдіть items[].is_placeholder=true і видаліть її.

ДоступreadРизикlow
ПідтвердженняnoneІдемпотентністьnot_needed
Потрібні модулі—
Класи данихshop_internal
Наслідки—
Додатковий контекст для AI

Що зачіпає: catalog.products, storefront.catalog

Правило рішення: Можна викликати без підтвердження, але запитуй лише потрібні дані й не роби зайвих змін.

Де можна помилитися
  • Автоматична фото-заглушка не повинна залишатися головним фото або елементом галереї готового товару.
Безпечніший шлях
  • Після set_cover повторно виклич catalog.product_images.list і видали items з is_placeholder=true до публікації.
Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "product_id": {
      "type": "integer",
      "minimum": 1
    }
  },
  "additionalProperties": false,
  "required": [
    "product_id"
  ]
}
Результат (data)
{
  "type": "object"
}
write Ризик: medium Підтвердження: recommended

catalog.product_images.set_cover — Зробити фото головним

Що робить: Міняє місцями головне фото товару та вибране фото галереї за чинним UI-патерном. Якщо старим cover була автоматична заглушка, вона перейде в галерею: після операції викличте catalog.product_images.list і видаліть placeholder.

Важливо: Активний автоімпорт може перетерти змінені поля товару або відновити видалені дані під час наступного запуску.
ДоступwriteРизикmedium
ПідтвердженняrecommendedІдемпотентністьnot_needed
Потрібні модулі—
Класи данихshop_internal
Наслідкиproduct_cover_changed
Додатковий контекст для AI

Що зачіпає: catalog.products, storefront.catalog

Правило рішення: Спочатку виконай preflight, покажи користувачу наслідок і віддай перевагу вузькому методу.

Де можна помилитися
  • Змінює live-стан магазину; результат і помилки записуються в AI-журнал.
  • Помилка може змінити поведінку магазину або дані; покажи очікуваний результат до запису.
  • Активний автоімпорт може перетерти змінені поля товару або відновити видалені дані під час наступного запуску.
  • Автоматична фото-заглушка не повинна залишатися головним фото або елементом галереї готового товару.
Що перевірити перед викликом
  • catalog.product_images.list — Прочитай поточний стан і не перезаписуй поля, яких користувач не просив змінювати. (before_write)
  • exchange.auto_import.get — Перевір активність, duplicate_policy і managed_fields; при перетині покажи ризик власнику та дай вибір. (before_product_write)
Безпечніший шлях
  • Змінити або вимкнути мапінг автоімпорту для поля, яке має керуватися вручну.
  • Після set_cover повторно виклич catalog.product_images.list і видали items з is_placeholder=true до публікації.
Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "product_id": {
      "type": "integer",
      "minimum": 1
    },
    "image_id": {
      "type": "integer",
      "minimum": 1
    }
  },
  "additionalProperties": false,
  "required": [
    "product_id",
    "image_id"
  ]
}
Результат (data)
{
  "type": "object"
}
write Ризик: low

catalog.product_images.update — Оновити фото товару

Що робить: Змінює alt і порядок наявного фото галереї.

Важливо: Активний автоімпорт може перетерти змінені поля товару або відновити видалені дані під час наступного запуску.
ДоступwriteРизикlow
ПідтвердженняnoneІдемпотентністьnot_needed
Потрібні модулі—
Класи данихshop_internal
Наслідкиmedia_metadata_changed
Додатковий контекст для AI

Що зачіпає: catalog.products, storefront.catalog

Правило рішення: Можна викликати без підтвердження, але запитуй лише потрібні дані й не роби зайвих змін.

Де можна помилитися
  • Змінює live-стан магазину; результат і помилки записуються в AI-журнал.
  • Активний автоімпорт може перетерти змінені поля товару або відновити видалені дані під час наступного запуску.
Що перевірити перед викликом
  • catalog.product_images.list — Прочитай поточний стан і не перезаписуй поля, яких користувач не просив змінювати. (before_write)
  • exchange.auto_import.get — Перевір активність, duplicate_policy і managed_fields; при перетині покажи ризик власнику та дай вибір. (before_product_write)
Безпечніший шлях
  • Змінити або вимкнути мапінг автоімпорту для поля, яке має керуватися вручну.
Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "product_id": {
      "type": "integer",
      "minimum": 1
    },
    "image_id": {
      "type": "integer",
      "minimum": 1
    },
    "alt": {
      "type": "string"
    },
    "number": {
      "type": "integer"
    }
  },
  "additionalProperties": false,
  "required": [
    "product_id",
    "image_id"
  ]
}
Результат (data)
{
  "type": "object"
}
read Ризик: low

catalog.product_specifications.list — Характеристики товару

Що робить: Повертає характеристики товару з перекладами.

ДоступreadРизикlow
ПідтвердженняnoneІдемпотентністьnot_needed
Потрібні модулі—
Класи данихshop_internal
Наслідки—
Додатковий контекст для AI

Що зачіпає: catalog.products, storefront.catalog

Правило рішення: Можна викликати без підтвердження, але запитуй лише потрібні дані й не роби зайвих змін.

Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "product_id": {
      "type": "integer",
      "minimum": 1
    }
  },
  "additionalProperties": false,
  "required": [
    "product_id"
  ]
}
Результат (data)
{
  "type": "object"
}
write Ризик: medium Підтвердження: recommended

catalog.product_specifications.replace — Замінити характеристики

Що робить: Атомарно замінює весь список характеристик товару; кожен елемент має spec, description і необов'язкові translations.

Важливо: Активний автоімпорт може перетерти змінені поля товару або відновити видалені дані під час наступного запуску.
ДоступwriteРизикmedium
ПідтвердженняrecommendedІдемпотентністьsupported
Потрібні модулі—
Класи данихshop_internal
Наслідкиproduct_specifications_replaced
Додатковий контекст для AI

Що зачіпає: catalog.products, storefront.catalog

Правило рішення: Спочатку виконай preflight, покажи користувачу наслідок і віддай перевагу вузькому методу.

Де можна помилитися
  • Змінює live-стан магазину; результат і помилки записуються в AI-журнал.
  • Помилка може змінити поведінку магазину або дані; покажи очікуваний результат до запису.
  • Активний автоімпорт може перетерти змінені поля товару або відновити видалені дані під час наступного запуску.
Що перевірити перед викликом
  • catalog.product_specifications.list — Прочитай поточний стан і не перезаписуй поля, яких користувач не просив змінювати. (before_write)
  • exchange.auto_import.get — Перевір активність, duplicate_policy і managed_fields; при перетині покажи ризик власнику та дай вибір. (before_product_write)
Безпечніший шлях
  • Змінити або вимкнути мапінг автоімпорту для поля, яке має керуватися вручну.
Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "product_id": {
      "type": "integer",
      "minimum": 1
    },
    "items": {
      "type": "array",
      "items": {
        "type": "object"
      }
    }
  },
  "additionalProperties": false,
  "required": [
    "product_id",
    "items"
  ]
}
Результат (data)
{
  "type": "object"
}
write Ризик: medium Підтвердження: recommended

catalog.products.create — Створити товар

Що робить: Створює товар через чинну модель Product, тому автоматичні slug і SKU лишаються єдиним джерелом логіки. За замовчуванням товар не публікується і має стандартне фото-заглушку: додайте реальні фото, зробіть потрібне головним і приберіть заглушку з галереї перед публікацією.

Важливо: Активний автоімпорт може перетерти змінені поля товару або відновити видалені дані під час наступного запуску.
ДоступwriteРизикmedium
ПідтвердженняrecommendedІдемпотентністьsupported
Потрібні модулі—
Класи данихshop_internal
Наслідкиproduct_created
Додатковий контекст для AI

Що зачіпає: catalog.products, storefront.catalog

Правило рішення: Спочатку виконай preflight, покажи користувачу наслідок і віддай перевагу вузькому методу.

Де можна помилитися
  • Змінює live-стан магазину; результат і помилки записуються в AI-журнал.
  • Помилка може змінити поведінку магазину або дані; покажи очікуваний результат до запису.
  • Активний автоімпорт може перетерти змінені поля товару або відновити видалені дані під час наступного запуску.
  • Автоматична фото-заглушка не повинна залишатися головним фото або елементом галереї готового товару.
Що перевірити перед викликом
  • catalog.products.list — Прочитай поточний стан і не перезаписуй поля, яких користувач не просив змінювати. (before_write)
  • exchange.auto_import.get — Перевір активність, duplicate_policy і managed_fields; при перетині покажи ризик власнику та дай вибір. (before_product_write)
Безпечніший шлях
  • Змінити або вимкнути мапінг автоімпорту для поля, яке має керуватися вручну.
  • Після set_cover повторно виклич catalog.product_images.list і видали items з is_placeholder=true до публікації.
Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "title": {
      "type": "string"
    },
    "data": {
      "type": "object",
      "description": "Частковий набір дозволених полів."
    },
    "translations": {
      "type": "object"
    },
    "additional_category_ids": {
      "type": "array",
      "items": {
        "type": "integer",
        "minimum": 1
      }
    }
  },
  "additionalProperties": false,
  "required": [
    "title"
  ]
}
Результат (data)
{
  "type": "object"
}
write Ризик: high Підтвердження: required

catalog.products.delete — Видалити товар

Що робить: Переносить товар і його варіації у відновлюваний кошик на 14 днів. Якщо модуль складу увімкнений і є доступний залишок, без zero_stock=true видалення блокується; підтверджений сценарій створює звичайну ревізію до нуля лише для цих товарів. author_user_id активного працівника береться через customers.list. Відновлення картки не відновлює списаний залишок.

Важливо: Активний автоімпорт може перетерти змінені поля товару або відновити видалені дані під час наступного запуску.
ДоступwriteРизикhigh
ПідтвердженняrequiredІдемпотентністьnot_needed
Потрібні модулі—
Класи данихshop_internal
Наслідкиproduct_and_variations_soft_deleted, live_cart_lines_removed, stock_revision_may_be_posted
Додатковий контекст для AI

Що зачіпає: catalog.products, storefront.catalog

Правило рішення: Отримай явне підтвердження конкретної дії безпосередньо перед викликом.

Де можна помилитися
  • Змінює live-стан магазину; результат і помилки записуються в AI-журнал.
  • Дію може бути складно або неможливо скасувати; потрібне підтвердження точної операції.
  • Активний автоімпорт може перетерти змінені поля товару або відновити видалені дані під час наступного запуску.
Що перевірити перед викликом
  • catalog.products.get — Прочитай поточний стан і не перезаписуй поля, яких користувач не просив змінювати. (before_write)
  • exchange.auto_import.get — Перевір активність, duplicate_policy і managed_fields; при перетині покажи ризик власнику та дай вибір. (before_product_write)
Безпечніший шлях
  • Змінити або вимкнути мапінг автоімпорту для поля, яке має керуватися вручну.
Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "product_id": {
      "type": "integer",
      "minimum": 1
    },
    "zero_stock": {
      "type": "boolean",
      "default": false
    },
    "author_user_id": {
      "type": "integer",
      "minimum": 1,
      "description": "ID активного працівника цього магазину з customers.list; обов'язковий для автоматичної ревізії."
    },
    "responsible_user_id": {
      "type": "integer",
      "description": "Deprecated alias for author_user_id."
    },
    "reset_stock": {
      "type": "boolean",
      "description": "Deprecated alias for zero_stock."
    }
  },
  "additionalProperties": false,
  "required": [
    "product_id"
  ]
}
Результат (data)
{
  "type": "object"
}
read Ризик: low

catalog.products.get — Дані товару

Що робить: Повертає повну безпечну картку товару, переклади, SEO, категорії та пов'язані дані. image_is_placeholder=true означає, що товар досі має автоматичну заглушку, яку треба замінити до публікації.

ДоступreadРизикlow
ПідтвердженняnoneІдемпотентністьnot_needed
Потрібні модулі—
Класи данихshop_internal
Наслідки—
Додатковий контекст для AI

Що зачіпає: catalog.products, storefront.catalog

Правило рішення: Можна викликати без підтвердження, але запитуй лише потрібні дані й не роби зайвих змін.

Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "product_id": {
      "type": "integer",
      "minimum": 1
    },
    "include_deleted": {
      "type": "boolean",
      "default": false
    }
  },
  "additionalProperties": false,
  "required": [
    "product_id"
  ]
}
Результат (data)
{
  "type": "object"
}
read Ризик: low

catalog.products.list — Список товарів

Що робить: Повертає товари з пошуком, фільтрами категорії, публікації, архіву, варіацій і залишку.

ДоступreadРизикlow
ПідтвердженняnoneІдемпотентністьnot_needed
Потрібні модулі—
Класи данихshop_internal
Наслідки—
Додатковий контекст для AI

Що зачіпає: catalog.products, storefront.catalog

Правило рішення: Можна викликати без підтвердження, але запитуй лише потрібні дані й не роби зайвих змін.

Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "query": {
      "type": "string",
      "description": "Пошук за текстовими полями."
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 100,
      "default": 20
    },
    "offset": {
      "type": "integer",
      "minimum": 0,
      "maximum": 1000000,
      "default": 0
    },
    "category_id": {
      "type": "integer",
      "minimum": 1
    },
    "is_published": {
      "type": "boolean"
    },
    "is_archival": {
      "type": "boolean"
    },
    "father_id": {
      "type": [
        "integer",
        "null"
      ]
    },
    "stock": {
      "type": "string",
      "enum": [
        "any",
        "positive",
        "zero"
      ]
    },
    "deletion_status": {
      "type": "string",
      "enum": [
        "active",
        "deleted",
        "all"
      ],
      "default": "active"
    }
  },
  "additionalProperties": false
}
Результат (data)
{
  "type": "object"
}
write Ризик: medium Підтвердження: recommended

catalog.products.restore — Відновити товар

Що робить: Відновлює товар і все його сімейство варіацій із 14-денного кошика. Складські залишки, списані ревізією під час видалення, не повертаються.

Важливо: Активний автоімпорт може перетерти змінені поля товару або відновити видалені дані під час наступного запуску.
ДоступwriteРизикmedium
ПідтвердженняrecommendedІдемпотентністьnot_needed
Потрібні модулі—
Класи данихshop_internal
Наслідкиproduct_and_variations_restored, stock_not_restored
Додатковий контекст для AI

Що зачіпає: catalog.products, storefront.catalog

Правило рішення: Спочатку виконай preflight, покажи користувачу наслідок і віддай перевагу вузькому методу.

Де можна помилитися
  • Змінює live-стан магазину; результат і помилки записуються в AI-журнал.
  • Помилка може змінити поведінку магазину або дані; покажи очікуваний результат до запису.
  • Активний автоімпорт може перетерти змінені поля товару або відновити видалені дані під час наступного запуску.
Що перевірити перед викликом
  • catalog.products.get — Прочитай поточний стан і не перезаписуй поля, яких користувач не просив змінювати. (before_write)
  • exchange.auto_import.get — Перевір активність, duplicate_policy і managed_fields; при перетині покажи ризик власнику та дай вибір. (before_product_write)
Безпечніший шлях
  • Змінити або вимкнути мапінг автоімпорту для поля, яке має керуватися вручну.
Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "product_id": {
      "type": "integer",
      "minimum": 1
    }
  },
  "additionalProperties": false,
  "required": [
    "product_id"
  ]
}
Результат (data)
{
  "type": "object"
}
write Ризик: medium Підтвердження: recommended

catalog.products.update — Оновити товар

Що робить: Частково оновлює дозволені поля товару й переклади; бізнес-логіка save() для slug/SKU не дублюється.

Важливо: Активний автоімпорт може перетерти змінені поля товару або відновити видалені дані під час наступного запуску.
Важливо: Якщо склад увімкнений, patch.warehouse_count заборонений: створи ревізію, перевір її й проведи після підтвердження.
ДоступwriteРизикmedium
ПідтвердженняrecommendedІдемпотентністьnot_needed
Потрібні модулі—
Класи данихshop_internal
Наслідкиproduct_changed
Додатковий контекст для AI

Що зачіпає: catalog.products, storefront.catalog

Правило рішення: Спочатку виконай preflight, покажи користувачу наслідок і віддай перевагу вузькому методу.

Де можна помилитися
  • Змінює live-стан магазину; результат і помилки записуються в AI-журнал.
  • Помилка може змінити поведінку магазину або дані; покажи очікуваний результат до запису.
  • Активний автоімпорт може перетерти змінені поля товару або відновити видалені дані під час наступного запуску.
  • Якщо склад увімкнений, patch.warehouse_count заборонений: створи ревізію, перевір її й проведи після підтвердження.
Що перевірити перед викликом
  • catalog.products.get — Прочитай поточний стан і не перезаписуй поля, яких користувач не просив змінювати. (before_write)
  • exchange.auto_import.get — Перевір активність, duplicate_policy і managed_fields; при перетині покажи ризик власнику та дай вибір. (before_product_write)
  • settings.modules.get — Перевір, чи ввімкнений склад, перш ніж пропонувати зміну warehouse_count. (when_warehouse_count_requested)
Безпечніший шлях
  • Змінити або вимкнути мапінг автоімпорту для поля, яке має керуватися вручну.
  • warehouse.revisions.create
  • warehouse.revisions.post
Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "product_id": {
      "type": "integer",
      "minimum": 1
    },
    "patch": {
      "type": "object",
      "description": "Частковий набір дозволених полів."
    },
    "translations": {
      "type": "object"
    },
    "additional_category_ids": {
      "type": "array",
      "items": {
        "type": "integer",
        "minimum": 1
      }
    },
    "expected_updated_at": {
      "type": "string"
    }
  },
  "additionalProperties": false,
  "required": [
    "product_id",
    "patch"
  ]
}
Результат (data)
{
  "type": "object"
}
write Ризик: medium

catalog.products.visibility.set — Публікація товару

Що робить: Вузько змінює стани публікації та архіву товару.

Важливо: Активний автоімпорт може перетерти змінені поля товару або відновити видалені дані під час наступного запуску.
ДоступwriteРизикmedium
ПідтвердженняnoneІдемпотентністьnot_needed
Потрібні модулі—
Класи данихshop_internal
Наслідкиstorefront_visibility_changed
Додатковий контекст для AI

Що зачіпає: catalog.products, storefront.catalog

Правило рішення: Спочатку виконай preflight, покажи користувачу наслідок і віддай перевагу вузькому методу.

Де можна помилитися
  • Змінює live-стан магазину; результат і помилки записуються в AI-журнал.
  • Помилка може змінити поведінку магазину або дані; покажи очікуваний результат до запису.
  • Активний автоімпорт може перетерти змінені поля товару або відновити видалені дані під час наступного запуску.
Що перевірити перед викликом
  • catalog.products.get — Прочитай поточний стан і не перезаписуй поля, яких користувач не просив змінювати. (before_write)
  • exchange.auto_import.get — Перевір активність, duplicate_policy і managed_fields; при перетині покажи ризик власнику та дай вибір. (before_product_write)
Безпечніший шлях
  • Змінити або вимкнути мапінг автоімпорту для поля, яке має керуватися вручну.
Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "product_id": {
      "type": "integer",
      "minimum": 1
    },
    "is_published": {
      "type": "boolean"
    },
    "is_archival": {
      "type": "boolean"
    }
  },
  "additionalProperties": false,
  "required": [
    "product_id"
  ]
}
Результат (data)
{
  "type": "object"
}

Upsell-групи (19)

write Ризик: medium Підтвердження: recommended

catalog.product_upsells.attach — Прикріпити upsell-групу

Що робить: Прикріплює групу лише до вказаного Product; батько та дочірні варіації не змінюються.

ДоступwriteРизикmedium
ПідтвердженняrecommendedІдемпотентністьsupported
Потрібні модулі—
Класи данихshop_internal
Наслідкиproduct_upsell_attached
Додатковий контекст для AI

Що зачіпає: catalog.upsells, storefront.product, cart.pricing

Правило рішення: Спочатку виконай preflight, покажи користувачу наслідок і віддай перевагу вузькому методу.

Де можна помилитися
  • Змінює live-стан магазину; результат і помилки записуються в AI-журнал.
  • Помилка може змінити поведінку магазину або дані; покажи очікуваний результат до запису.
Що перевірити перед викликом
  • catalog.product_upsells.list — Прочитай поточний стан і не перезаписуй поля, яких користувач не просив змінювати. (before_write)
Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "product_id": {
      "type": "integer",
      "minimum": 1
    },
    "group_id": {
      "type": "integer",
      "minimum": 1
    },
    "selection_type_override": {
      "type": "string",
      "enum": [
        "",
        "single",
        "multiple"
      ]
    },
    "max_selected_override": {
      "type": [
        "integer",
        "null"
      ],
      "minimum": 0
    },
    "is_active": {
      "type": "boolean"
    },
    "number": {
      "type": "integer",
      "minimum": 0
    }
  },
  "additionalProperties": false,
  "required": [
    "product_id",
    "group_id"
  ]
}
Результат (data)
{
  "type": "object"
}
write Ризик: medium Підтвердження: recommended

catalog.product_upsells.detach — Від’єднати upsell-групу

Що робить: Видаляє одну товарну прив’язку та її overrides, але не видаляє групу з бібліотеки.

ДоступwriteРизикmedium
ПідтвердженняrecommendedІдемпотентністьnot_needed
Потрібні модулі—
Класи данихshop_internal
Наслідкиproduct_upsell_detached
Додатковий контекст для AI

Що зачіпає: catalog.upsells, storefront.product, cart.pricing

Правило рішення: Спочатку виконай preflight, покажи користувачу наслідок і віддай перевагу вузькому методу.

Де можна помилитися
  • Змінює live-стан магазину; результат і помилки записуються в AI-журнал.
  • Помилка може змінити поведінку магазину або дані; покажи очікуваний результат до запису.
Що перевірити перед викликом
  • catalog.product_upsells.get — Прочитай поточний стан і не перезаписуй поля, яких користувач не просив змінювати. (before_write)
Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "assignment_id": {
      "type": "integer",
      "minimum": 1
    }
  },
  "additionalProperties": false,
  "required": [
    "assignment_id"
  ]
}
Результат (data)
{
  "type": "object"
}
read Ризик: low

catalog.product_upsells.get — Прив’язка upsell до товару

Що робить: Повертає одну товарну прив’язку та локальні overrides її опцій.

ДоступreadРизикlow
ПідтвердженняnoneІдемпотентністьnot_needed
Потрібні модулі—
Класи данихshop_internal
Наслідки—
Додатковий контекст для AI

Що зачіпає: catalog.upsells, storefront.product, cart.pricing

Правило рішення: Можна викликати без підтвердження, але запитуй лише потрібні дані й не роби зайвих змін.

Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "assignment_id": {
      "type": "integer",
      "minimum": 1
    }
  },
  "additionalProperties": false,
  "required": [
    "assignment_id"
  ]
}
Результат (data)
{
  "type": "object"
}
read Ризик: low

catalog.product_upsells.list — Upsell-групи товару

Що робить: Повертає точні прив’язки конкретного Product. Варіації не успадковуються неявно і мають власні прив’язки.

ДоступreadРизикlow
ПідтвердженняnoneІдемпотентністьnot_needed
Потрібні модулі—
Класи данихshop_internal
Наслідки—
Додатковий контекст для AI

Що зачіпає: catalog.upsells, storefront.product, cart.pricing

Правило рішення: Можна викликати без підтвердження, але запитуй лише потрібні дані й не роби зайвих змін.

Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "product_id": {
      "type": "integer",
      "minimum": 1
    }
  },
  "additionalProperties": false,
  "required": [
    "product_id"
  ]
}
Результат (data)
{
  "type": "object"
}
write Ризик: low

catalog.product_upsells.overrides.clear — Скинути локальний override upsell

Що робить: Видаляє локальне перевизначення; товар знову використовує активність і ціну спільної опції.

ДоступwriteРизикlow
ПідтвердженняnoneІдемпотентністьsupported
Потрібні модулі—
Класи данихshop_internal
Наслідкиproduct_upsell_option_override_cleared
Додатковий контекст для AI

Що зачіпає: catalog.upsells, storefront.product, cart.pricing

Правило рішення: Можна викликати без підтвердження, але запитуй лише потрібні дані й не роби зайвих змін.

Де можна помилитися
  • Змінює live-стан магазину; результат і помилки записуються в AI-журнал.
Що перевірити перед викликом
  • catalog.product_upsells.get — Прочитай поточний стан і не перезаписуй поля, яких користувач не просив змінювати. (before_write)
Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "assignment_id": {
      "type": "integer",
      "minimum": 1
    },
    "option_id": {
      "type": "integer",
      "minimum": 1
    }
  },
  "additionalProperties": false,
  "required": [
    "assignment_id",
    "option_id"
  ]
}
Результат (data)
{
  "type": "object"
}
write Ризик: medium Підтвердження: recommended

catalog.product_upsells.overrides.set — Задати локальну ціну upsell

Що робить: Створює або оновлює локальну доступність і доплату опції лише для одного товару. null успадковує базову ціну, 0 явно задає нуль.

ДоступwriteРизикmedium
ПідтвердженняrecommendedІдемпотентністьsupported
Потрібні модулі—
Класи данихshop_internal
Наслідкиproduct_upsell_option_overridden
Додатковий контекст для AI

Що зачіпає: catalog.upsells, storefront.product, cart.pricing

Правило рішення: Спочатку виконай preflight, покажи користувачу наслідок і віддай перевагу вузькому методу.

Де можна помилитися
  • Змінює live-стан магазину; результат і помилки записуються в AI-журнал.
  • Помилка може змінити поведінку магазину або дані; покажи очікуваний результат до запису.
Що перевірити перед викликом
  • catalog.product_upsells.get — Прочитай поточний стан і не перезаписуй поля, яких користувач не просив змінювати. (before_write)
Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "assignment_id": {
      "type": "integer",
      "minimum": 1
    },
    "option_id": {
      "type": "integer",
      "minimum": 1
    },
    "is_enabled": {
      "type": "boolean"
    },
    "price_delta_override": {
      "type": [
        "integer",
        "null"
      ],
      "minimum": 0
    }
  },
  "additionalProperties": false,
  "required": [
    "assignment_id",
    "option_id"
  ]
}
Результат (data)
{
  "type": "object"
}
write Ризик: medium Підтвердження: recommended

catalog.product_upsells.update — Оновити товарний upsell

Що робить: Змінює лише локальні правила прив’язки, не редагуючи спільну групу чи інші товари.

ДоступwriteРизикmedium
ПідтвердженняrecommendedІдемпотентністьnot_needed
Потрібні модулі—
Класи данихshop_internal
Наслідкиproduct_upsell_rules_changed
Додатковий контекст для AI

Що зачіпає: catalog.upsells, storefront.product, cart.pricing

Правило рішення: Спочатку виконай preflight, покажи користувачу наслідок і віддай перевагу вузькому методу.

Де можна помилитися
  • Змінює live-стан магазину; результат і помилки записуються в AI-журнал.
  • Помилка може змінити поведінку магазину або дані; покажи очікуваний результат до запису.
Що перевірити перед викликом
  • catalog.product_upsells.get — Прочитай поточний стан і не перезаписуй поля, яких користувач не просив змінювати. (before_write)
Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "assignment_id": {
      "type": "integer",
      "minimum": 1
    },
    "patch": {
      "type": "object",
      "description": "Частковий набір дозволених полів."
    }
  },
  "additionalProperties": false,
  "required": [
    "assignment_id",
    "patch"
  ]
}
Результат (data)
{
  "type": "object"
}
write Ризик: medium Підтвердження: recommended

catalog.upsell_groups.create — Створити upsell-групу

Що робить: Створює shop-scoped групу в бібліотеці. Опції додаються вузьким методом catalog.upsell_options.create.

ДоступwriteРизикmedium
ПідтвердженняrecommendedІдемпотентністьsupported
Потрібні модулі—
Класи данихshop_internal
Наслідкиupsell_group_created
Додатковий контекст для AI

Що зачіпає: catalog.upsells, storefront.product, cart.pricing

Правило рішення: Спочатку виконай preflight, покажи користувачу наслідок і віддай перевагу вузькому методу.

Де можна помилитися
  • Змінює live-стан магазину; результат і помилки записуються в AI-журнал.
  • Помилка може змінити поведінку магазину або дані; покажи очікуваний результат до запису.
Що перевірити перед викликом
  • catalog.upsell_groups.list — Прочитай поточний стан і не перезаписуй поля, яких користувач не просив змінювати. (before_write)
Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "title": {
      "type": "string"
    },
    "selection_type": {
      "type": "string",
      "enum": [
        "single",
        "multiple"
      ]
    },
    "max_selected": {
      "type": "integer",
      "minimum": 0
    },
    "is_reusable": {
      "type": "boolean"
    },
    "is_active": {
      "type": "boolean"
    },
    "number": {
      "type": "integer",
      "minimum": 0
    },
    "translations": {
      "type": "object"
    }
  },
  "additionalProperties": false,
  "required": [
    "title"
  ]
}
Результат (data)
{
  "type": "object"
}
write Ризик: high Підтвердження: required

catalog.upsell_groups.delete — Видалити upsell-групу

Що робить: Видаляє групу, її опції та всі товарні прив’язки; snapshots у кошиках і замовленнях зберігаються.

ДоступwriteРизикhigh
ПідтвердженняrequiredІдемпотентністьnot_needed
Потрібні модулі—
Класи данихshop_internal
Наслідкиupsell_group_and_assignments_deleted
Додатковий контекст для AI

Що зачіпає: catalog.upsells, storefront.product, cart.pricing

Правило рішення: Отримай явне підтвердження конкретної дії безпосередньо перед викликом.

Де можна помилитися
  • Змінює live-стан магазину; результат і помилки записуються в AI-журнал.
  • Дію може бути складно або неможливо скасувати; потрібне підтвердження точної операції.
Що перевірити перед викликом
  • catalog.upsell_groups.get — Прочитай поточний стан і не перезаписуй поля, яких користувач не просив змінювати. (before_write)
Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "group_id": {
      "type": "integer",
      "minimum": 1
    }
  },
  "additionalProperties": false,
  "required": [
    "group_id"
  ]
}
Результат (data)
{
  "type": "object"
}
read Ризик: low

catalog.upsell_groups.get — Upsell-група

Що робить: Повертає групу, переклади, усі її опції та товари, до яких вона прикріплена.

ДоступreadРизикlow
ПідтвердженняnoneІдемпотентністьnot_needed
Потрібні модулі—
Класи данихshop_internal
Наслідки—
Додатковий контекст для AI

Що зачіпає: catalog.upsells, storefront.product, cart.pricing

Правило рішення: Можна викликати без підтвердження, але запитуй лише потрібні дані й не роби зайвих змін.

Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "group_id": {
      "type": "integer",
      "minimum": 1
    }
  },
  "additionalProperties": false,
  "required": [
    "group_id"
  ]
}
Результат (data)
{
  "type": "object"
}
read Ризик: low

catalog.upsell_groups.list — Бібліотека upsell-груп

Що робить: Повертає лише upsell-групи магазину токена з кількістю опцій і товарних прив’язок.

ДоступreadРизикlow
ПідтвердженняnoneІдемпотентністьnot_needed
Потрібні модулі—
Класи данихshop_internal
Наслідки—
Додатковий контекст для AI

Що зачіпає: catalog.upsells, storefront.product, cart.pricing

Правило рішення: Можна викликати без підтвердження, але запитуй лише потрібні дані й не роби зайвих змін.

Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "query": {
      "type": "string",
      "description": "Пошук за текстовими полями."
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 100,
      "default": 20
    },
    "offset": {
      "type": "integer",
      "minimum": 0,
      "maximum": 1000000,
      "default": 0
    },
    "is_active": {
      "type": "boolean"
    },
    "is_reusable": {
      "type": "boolean"
    }
  },
  "additionalProperties": false
}
Результат (data)
{
  "type": "object"
}
write Ризик: medium Підтвердження: recommended

catalog.upsell_groups.update — Оновити upsell-групу

Що робить: Частково оновлює спільні правила групи. Зміна вплине на всі прив’язані товари без локального override.

ДоступwriteРизикmedium
ПідтвердженняrecommendedІдемпотентністьnot_needed
Потрібні модулі—
Класи данихshop_internal
Наслідкиshared_upsell_group_changed
Додатковий контекст для AI

Що зачіпає: catalog.upsells, storefront.product, cart.pricing

Правило рішення: Спочатку виконай preflight, покажи користувачу наслідок і віддай перевагу вузькому методу.

Де можна помилитися
  • Змінює live-стан магазину; результат і помилки записуються в AI-журнал.
  • Помилка може змінити поведінку магазину або дані; покажи очікуваний результат до запису.
Що перевірити перед викликом
  • catalog.upsell_groups.get — Прочитай поточний стан і не перезаписуй поля, яких користувач не просив змінювати. (before_write)
Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "group_id": {
      "type": "integer",
      "minimum": 1
    },
    "patch": {
      "type": "object",
      "description": "Частковий набір дозволених полів."
    },
    "translations": {
      "type": "object"
    }
  },
  "additionalProperties": false,
  "required": [
    "group_id",
    "patch"
  ]
}
Результат (data)
{
  "type": "object"
}
write Ризик: medium Підтвердження: recommended

catalog.upsell_options.create — Додати upsell-опцію

Що робить: Додає опцію до групи того самого магазину; price_delta є доплатою до ціни товару.

ДоступwriteРизикmedium
ПідтвердженняrecommendedІдемпотентністьsupported
Потрібні модулі—
Класи данихshop_internal
Наслідкиupsell_option_created
Додатковий контекст для AI

Що зачіпає: catalog.upsells, storefront.product, cart.pricing

Правило рішення: Спочатку виконай preflight, покажи користувачу наслідок і віддай перевагу вузькому методу.

Де можна помилитися
  • Змінює live-стан магазину; результат і помилки записуються в AI-журнал.
  • Помилка може змінити поведінку магазину або дані; покажи очікуваний результат до запису.
Що перевірити перед викликом
  • catalog.upsell_options.list — Прочитай поточний стан і не перезаписуй поля, яких користувач не просив змінювати. (before_write)
Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "group_id": {
      "type": "integer",
      "minimum": 1
    },
    "title": {
      "type": "string"
    },
    "price_delta": {
      "type": "integer",
      "minimum": 0
    },
    "is_active": {
      "type": "boolean"
    },
    "number": {
      "type": "integer",
      "minimum": 0
    },
    "translations": {
      "type": "object"
    }
  },
  "additionalProperties": false,
  "required": [
    "group_id",
    "title"
  ]
}
Результат (data)
{
  "type": "object"
}
write Ризик: high Підтвердження: required

catalog.upsell_options.delete — Видалити upsell-опцію

Що робить: Видаляє спільну опцію та її overrides; snapshots уже створених кошиків і замовлень зберігаються.

ДоступwriteРизикhigh
ПідтвердженняrequiredІдемпотентністьnot_needed
Потрібні модулі—
Класи данихshop_internal
Наслідкиupsell_option_and_overrides_deleted
Додатковий контекст для AI

Що зачіпає: catalog.upsells, storefront.product, cart.pricing

Правило рішення: Отримай явне підтвердження конкретної дії безпосередньо перед викликом.

Де можна помилитися
  • Змінює live-стан магазину; результат і помилки записуються в AI-журнал.
  • Дію може бути складно або неможливо скасувати; потрібне підтвердження точної операції.
Що перевірити перед викликом
  • catalog.upsell_options.list — Прочитай поточний стан і не перезаписуй поля, яких користувач не просив змінювати. (before_write)
Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "option_id": {
      "type": "integer",
      "minimum": 1
    }
  },
  "additionalProperties": false,
  "required": [
    "option_id"
  ]
}
Результат (data)
{
  "type": "object"
}
read Ризик: low

catalog.upsell_options.get — Upsell-опція

Що робить: Повертає одну опцію з базовою доплатою та перекладами.

ДоступreadРизикlow
ПідтвердженняnoneІдемпотентністьnot_needed
Потрібні модулі—
Класи данихshop_internal
Наслідки—
Додатковий контекст для AI

Що зачіпає: catalog.upsells, storefront.product, cart.pricing

Правило рішення: Можна викликати без підтвердження, але запитуй лише потрібні дані й не роби зайвих змін.

Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "option_id": {
      "type": "integer",
      "minimum": 1
    }
  },
  "additionalProperties": false,
  "required": [
    "option_id"
  ]
}
Результат (data)
{
  "type": "object"
}
write Ризик: high Підтвердження: required

catalog.upsell_options.image.delete — Видалити картинку upsell-опції

Що робить: Видаляє необов’язкову картинку опції; текстовий вигляд upsell лишається доступним.

ДоступwriteРизикhigh
ПідтвердженняrequiredІдемпотентністьnot_needed
Потрібні модулі—
Класи данихshop_internal
Наслідкиupsell_option_media_deleted
Додатковий контекст для AI

Що зачіпає: catalog.upsells, storefront.product, cart.pricing

Правило рішення: Отримай явне підтвердження конкретної дії безпосередньо перед викликом.

Де можна помилитися
  • Змінює live-стан магазину; результат і помилки записуються в AI-журнал.
  • Дію може бути складно або неможливо скасувати; потрібне підтвердження точної операції.
Що перевірити перед викликом
  • catalog.upsell_options.list — Прочитай поточний стан і не перезаписуй поля, яких користувач не просив змінювати. (before_write)
Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "option_id": {
      "type": "integer",
      "minimum": 1
    }
  },
  "additionalProperties": false,
  "required": [
    "option_id"
  ]
}
Результат (data)
{
  "type": "object"
}
write Ризик: medium Підтвердження: recommended

catalog.upsell_options.image.set — Завантажити картинку upsell-опції

Що робить: Встановлює або замінює необов’язкову картинку опції з multipart-поля; чинний ResizedImageField нормалізує файл у WEBP.

ДоступwriteРизикmedium
ПідтвердженняrecommendedІдемпотентністьnot_needed
Потрібні модулі—
Класи данихshop_internal
Наслідкиupsell_option_media_changed
Додатковий контекст для AI

Що зачіпає: catalog.upsells, storefront.product, cart.pricing

Правило рішення: Спочатку виконай preflight, покажи користувачу наслідок і віддай перевагу вузькому методу.

Де можна помилитися
  • Змінює live-стан магазину; результат і помилки записуються в AI-журнал.
  • Помилка може змінити поведінку магазину або дані; покажи очікуваний результат до запису.
Що перевірити перед викликом
  • catalog.upsell_options.list — Прочитай поточний стан і не перезаписуй поля, яких користувач не просив змінювати. (before_write)
Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "option_id": {
      "type": "integer",
      "minimum": 1
    },
    "file_field": {
      "type": "string",
      "default": "file"
    }
  },
  "additionalProperties": false,
  "required": [
    "option_id"
  ]
}
Результат (data)
{
  "type": "object"
}
read Ризик: low

catalog.upsell_options.list — Опції upsell-групи

Що робить: Повертає shop-scoped опції однієї групи з базовими доплатами.

ДоступreadРизикlow
ПідтвердженняnoneІдемпотентністьnot_needed
Потрібні модулі—
Класи данихshop_internal
Наслідки—
Додатковий контекст для AI

Що зачіпає: catalog.upsells, storefront.product, cart.pricing

Правило рішення: Можна викликати без підтвердження, але запитуй лише потрібні дані й не роби зайвих змін.

Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "query": {
      "type": "string",
      "description": "Пошук за текстовими полями."
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 100,
      "default": 20
    },
    "offset": {
      "type": "integer",
      "minimum": 0,
      "maximum": 1000000,
      "default": 0
    },
    "group_id": {
      "type": "integer",
      "minimum": 1
    },
    "is_active": {
      "type": "boolean"
    }
  },
  "additionalProperties": false
}
Результат (data)
{
  "type": "object"
}
write Ризик: medium Підтвердження: recommended

catalog.upsell_options.update — Оновити upsell-опцію

Що робить: Оновлює базову опцію. Нова доплата застосовується до товарів, де немає власного price override.

ДоступwriteРизикmedium
ПідтвердженняrecommendedІдемпотентністьnot_needed
Потрібні модулі—
Класи данихshop_internal
Наслідкиshared_upsell_option_changed
Додатковий контекст для AI

Що зачіпає: catalog.upsells, storefront.product, cart.pricing

Правило рішення: Спочатку виконай preflight, покажи користувачу наслідок і віддай перевагу вузькому методу.

Де можна помилитися
  • Змінює live-стан магазину; результат і помилки записуються в AI-журнал.
  • Помилка може змінити поведінку магазину або дані; покажи очікуваний результат до запису.
Що перевірити перед викликом
  • catalog.upsell_options.list — Прочитай поточний стан і не перезаписуй поля, яких користувач не просив змінювати. (before_write)
Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "option_id": {
      "type": "integer",
      "minimum": 1
    },
    "patch": {
      "type": "object",
      "description": "Частковий набір дозволених полів."
    },
    "translations": {
      "type": "object"
    }
  },
  "additionalProperties": false,
  "required": [
    "option_id",
    "patch"
  ]
}
Результат (data)
{
  "type": "object"
}

Фільтри й варіації (12)

write Ризик: medium Підтвердження: recommended

catalog.filter_values.create — Створити значення фільтра

Що робить: Додає текстове або кольорове значення до фільтра.

ДоступwriteРизикmedium
ПідтвердженняrecommendedІдемпотентністьnot_needed
Потрібні модулі—
Класи данихshop_internal
Наслідкиfilter_value_created
Додатковий контекст для AI

Що зачіпає: catalog.filters, catalog.variations

Правило рішення: Спочатку виконай preflight, покажи користувачу наслідок і віддай перевагу вузькому методу.

Де можна помилитися
  • Змінює live-стан магазину; результат і помилки записуються в AI-журнал.
  • Помилка може змінити поведінку магазину або дані; покажи очікуваний результат до запису.
Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "filter_id": {
      "type": "integer",
      "minimum": 1
    },
    "data": {
      "type": "object",
      "description": "Частковий набір дозволених полів."
    }
  },
  "additionalProperties": false,
  "required": [
    "filter_id",
    "data"
  ]
}
Результат (data)
{
  "type": "object"
}
write Ризик: high Підтвердження: required

catalog.filter_values.delete — Видалити значення фільтра

Що робить: Видаляє значення та його прив'язки до товарів.

ДоступwriteРизикhigh
ПідтвердженняrequiredІдемпотентністьnot_needed
Потрібні модулі—
Класи данихshop_internal
Наслідкиfilter_value_deleted, product_filter_links_deleted
Додатковий контекст для AI

Що зачіпає: catalog.filters, catalog.variations

Правило рішення: Отримай явне підтвердження конкретної дії безпосередньо перед викликом.

Де можна помилитися
  • Змінює live-стан магазину; результат і помилки записуються в AI-журнал.
  • Дію може бути складно або неможливо скасувати; потрібне підтвердження точної операції.
Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "value_id": {
      "type": "integer",
      "minimum": 1
    }
  },
  "additionalProperties": false,
  "required": [
    "value_id"
  ]
}
Результат (data)
{
  "type": "object"
}
write Ризик: medium Підтвердження: recommended

catalog.filter_values.update — Оновити значення фільтра

Що робить: Частково оновлює назву, колір, активність і порядок значення.

ДоступwriteРизикmedium
ПідтвердженняrecommendedІдемпотентністьnot_needed
Потрібні модулі—
Класи данихshop_internal
Наслідкиfilter_value_changed
Додатковий контекст для AI

Що зачіпає: catalog.filters, catalog.variations

Правило рішення: Спочатку виконай preflight, покажи користувачу наслідок і віддай перевагу вузькому методу.

Де можна помилитися
  • Змінює live-стан магазину; результат і помилки записуються в AI-журнал.
  • Помилка може змінити поведінку магазину або дані; покажи очікуваний результат до запису.
Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "value_id": {
      "type": "integer",
      "minimum": 1
    },
    "patch": {
      "type": "object",
      "description": "Частковий набір дозволених полів."
    }
  },
  "additionalProperties": false,
  "required": [
    "value_id",
    "patch"
  ]
}
Результат (data)
{
  "type": "object"
}
write Ризик: medium Підтвердження: recommended

catalog.filters.create — Створити фільтр

Що робить: Створює фільтр checkbox, color або image через чинну модель.

ДоступwriteРизикmedium
ПідтвердженняrecommendedІдемпотентністьnot_needed
Потрібні модулі—
Класи данихshop_internal
Наслідкиcatalog_filter_created
Додатковий контекст для AI

Що зачіпає: catalog.filters, catalog.variations

Правило рішення: Спочатку виконай preflight, покажи користувачу наслідок і віддай перевагу вузькому методу.

Де можна помилитися
  • Змінює live-стан магазину; результат і помилки записуються в AI-журнал.
  • Помилка може змінити поведінку магазину або дані; покажи очікуваний результат до запису.
Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "data": {
      "type": "object",
      "description": "Частковий набір дозволених полів."
    }
  },
  "additionalProperties": false,
  "required": [
    "data"
  ]
}
Результат (data)
{
  "type": "object"
}
write Ризик: high Підтвердження: required

catalog.filters.delete — Видалити фільтр

Що робить: Видаляє фільтр, його значення та прив'язки товарів каскадно.

ДоступwriteРизикhigh
ПідтвердженняrequiredІдемпотентністьnot_needed
Потрібні модулі—
Класи данихshop_internal
Наслідкиcatalog_filter_deleted, product_filter_links_deleted
Додатковий контекст для AI

Що зачіпає: catalog.filters, catalog.variations

Правило рішення: Отримай явне підтвердження конкретної дії безпосередньо перед викликом.

Де можна помилитися
  • Змінює live-стан магазину; результат і помилки записуються в AI-журнал.
  • Дію може бути складно або неможливо скасувати; потрібне підтвердження точної операції.
Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "filter_id": {
      "type": "integer",
      "minimum": 1
    }
  },
  "additionalProperties": false,
  "required": [
    "filter_id"
  ]
}
Результат (data)
{
  "type": "object"
}
read Ризик: low

catalog.filters.get — Дані фільтра

Що робить: Повертає один фільтр та всі його значення.

ДоступreadРизикlow
ПідтвердженняnoneІдемпотентністьnot_needed
Потрібні модулі—
Класи данихshop_internal
Наслідки—
Додатковий контекст для AI

Що зачіпає: catalog.filters, catalog.variations

Правило рішення: Можна викликати без підтвердження, але запитуй лише потрібні дані й не роби зайвих змін.

Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "filter_id": {
      "type": "integer",
      "minimum": 1
    }
  },
  "additionalProperties": false,
  "required": [
    "filter_id"
  ]
}
Результат (data)
{
  "type": "object"
}
read Ризик: low

catalog.filters.list — Список фільтрів

Що робить: Повертає фільтри каталогу та їх значення.

ДоступreadРизикlow
ПідтвердженняnoneІдемпотентністьnot_needed
Потрібні модулі—
Класи данихshop_internal
Наслідки—
Додатковий контекст для AI

Що зачіпає: catalog.filters, catalog.variations

Правило рішення: Можна викликати без підтвердження, але запитуй лише потрібні дані й не роби зайвих змін.

Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "query": {
      "type": "string",
      "description": "Пошук за текстовими полями."
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 100,
      "default": 20
    },
    "offset": {
      "type": "integer",
      "minimum": 0,
      "maximum": 1000000,
      "default": 0
    }
  },
  "additionalProperties": false
}
Результат (data)
{
  "type": "object"
}
write Ризик: medium Підтвердження: recommended

catalog.filters.update — Оновити фільтр

Що робить: Частково оновлює дозволені поля фільтра.

ДоступwriteРизикmedium
ПідтвердженняrecommendedІдемпотентністьnot_needed
Потрібні модулі—
Класи данихshop_internal
Наслідкиcatalog_filter_changed
Додатковий контекст для AI

Що зачіпає: catalog.filters, catalog.variations

Правило рішення: Спочатку виконай preflight, покажи користувачу наслідок і віддай перевагу вузькому методу.

Де можна помилитися
  • Змінює live-стан магазину; результат і помилки записуються в AI-журнал.
  • Помилка може змінити поведінку магазину або дані; покажи очікуваний результат до запису.
Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "filter_id": {
      "type": "integer",
      "minimum": 1
    },
    "patch": {
      "type": "object",
      "description": "Частковий набір дозволених полів."
    }
  },
  "additionalProperties": false,
  "required": [
    "filter_id",
    "patch"
  ]
}
Результат (data)
{
  "type": "object"
}
read Ризик: low

catalog.product_filters.get — Атрибути товару

Що робить: Повертає значення фільтрів, призначені конкретному SKU.

ДоступreadРизикlow
ПідтвердженняnoneІдемпотентністьnot_needed
Потрібні модулі—
Класи данихshop_internal
Наслідки—
Додатковий контекст для AI

Що зачіпає: catalog.filters, catalog.variations

Правило рішення: Можна викликати без підтвердження, але запитуй лише потрібні дані й не роби зайвих змін.

Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "product_id": {
      "type": "integer",
      "minimum": 1
    }
  },
  "additionalProperties": false,
  "required": [
    "product_id"
  ]
}
Результат (data)
{
  "type": "object"
}
write Ризик: medium Підтвердження: recommended

catalog.product_filters.set — Задати атрибути товару

Що робить: Замінює прив'язки фільтрів товару атомарно; один фільтр може мати одне значення для SKU.

Важливо: Активний автоімпорт може перетерти змінені поля товару або відновити видалені дані під час наступного запуску.
ДоступwriteРизикmedium
ПідтвердженняrecommendedІдемпотентністьsupported
Потрібні модулі—
Класи данихshop_internal
Наслідкиproduct_filter_links_replaced
Додатковий контекст для AI

Що зачіпає: catalog.filters, catalog.variations

Правило рішення: Спочатку виконай preflight, покажи користувачу наслідок і віддай перевагу вузькому методу.

Де можна помилитися
  • Змінює live-стан магазину; результат і помилки записуються в AI-журнал.
  • Помилка може змінити поведінку магазину або дані; покажи очікуваний результат до запису.
  • Активний автоімпорт може перетерти змінені поля товару або відновити видалені дані під час наступного запуску.
Що перевірити перед викликом
  • catalog.product_filters.get — Прочитай поточний стан і не перезаписуй поля, яких користувач не просив змінювати. (before_write)
  • exchange.auto_import.get — Перевір активність, duplicate_policy і managed_fields; при перетині покажи ризик власнику та дай вибір. (before_product_write)
Безпечніший шлях
  • Змінити або вимкнути мапінг автоімпорту для поля, яке має керуватися вручну.
Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "product_id": {
      "type": "integer",
      "minimum": 1
    },
    "items": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "filter_id": {
            "type": "integer",
            "minimum": 1
          },
          "value_id": {
            "type": "integer",
            "minimum": 1
          }
        }
      }
    }
  },
  "additionalProperties": false,
  "required": [
    "product_id",
    "items"
  ]
}
Результат (data)
{
  "type": "object"
}
read Ризик: low

catalog.variations.get — Варіації товару

Що робить: Повертає кореневий товар і впорядковані дочірні SKU.

ДоступreadРизикlow
ПідтвердженняnoneІдемпотентністьnot_needed
Потрібні модулі—
Класи данихshop_internal
Наслідки—
Додатковий контекст для AI

Що зачіпає: catalog.filters, catalog.variations

Правило рішення: Можна викликати без підтвердження, але запитуй лише потрібні дані й не роби зайвих змін.

Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "product_id": {
      "type": "integer",
      "minimum": 1
    }
  },
  "additionalProperties": false,
  "required": [
    "product_id"
  ]
}
Результат (data)
{
  "type": "object"
}
write Ризик: high Підтвердження: required

catalog.variations.set — Задати варіації товару

Що робить: Атомарно замінює дочірні SKU кореневого товару й синхронізує поле father так само, як чинний admin inline.

ДоступwriteРизикhigh
ПідтвердженняrequiredІдемпотентністьsupported
Потрібні модулі—
Класи данихshop_internal
Наслідкиvariation_family_rebuilt
Додатковий контекст для AI

Що зачіпає: catalog.filters, catalog.variations

Правило рішення: Отримай явне підтвердження конкретної дії безпосередньо перед викликом.

Де можна помилитися
  • Змінює live-стан магазину; результат і помилки записуються в AI-журнал.
  • Дію може бути складно або неможливо скасувати; потрібне підтвердження точної операції.
Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "product_id": {
      "type": "integer",
      "minimum": 1
    },
    "child_ids": {
      "type": "array",
      "items": {
        "type": "integer",
        "minimum": 1
      }
    }
  },
  "additionalProperties": false,
  "required": [
    "product_id",
    "child_ids"
  ]
}
Результат (data)
{
  "type": "object"
}

Сторінки та контент (49)

Сторінки (10)

write Ризик: medium Підтвердження: recommended

pages.copy — Створити копію сторінки

Що робить: Створює неопубліковану незалежну копію сторінки поточного магазину разом з усіма активними блоками, перекладами та окремими копіями assets. Це рекомендована точка відкату перед широкою зміною дизайну всієї сторінки; для точкової зміни одного блока достатньо block snapshot.

ДоступwriteРизикmedium
ПідтвердженняrecommendedІдемпотентністьnot_needed
Потрібні модулі—
Класи данихshop_internal
Наслідкиunpublished_page_copy_created, block_assets_copied
Додатковий контекст для AI

Що зачіпає: pages, storefront.routing

Правило рішення: Спочатку виконай preflight, покажи користувачу наслідок і віддай перевагу вузькому методу.

Де можна помилитися
  • Змінює live-стан магазину; результат і помилки записуються в AI-журнал.
  • Помилка може змінити поведінку магазину або дані; покажи очікуваний результат до запису.
  • Копія збільшує використання файлового сховища, бо assets фізично копіюються; вона завжди створюється неопублікованою.
Що перевірити перед викликом
  • pages.get — Прочитай поточний стан і не перезаписуй поля, яких користувач не просив змінювати. (before_write)
Безпечніший шлях
  • Для однієї вузької зміни створи snapshot лише відповідного блока замість повної копії сторінки.
Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "page_id": {
      "type": "integer",
      "minimum": 1
    },
    "title": {
      "type": "string",
      "maxLength": 300
    },
    "slug": {
      "type": "string",
      "maxLength": 300
    }
  },
  "additionalProperties": false,
  "required": [
    "page_id"
  ]
}
Результат (data)
{
  "type": "object"
}
write Ризик: medium Підтвердження: recommended

pages.create — Створити сторінку

Що робить: Створює звичайну сторінку через чинну модель Page; за замовчуванням не публікує її.

ДоступwriteРизикmedium
ПідтвердженняrecommendedІдемпотентністьsupported
Потрібні модулі—
Класи данихshop_internal
Наслідкиpage_created
Додатковий контекст для AI

Що зачіпає: pages, storefront.routing

Правило рішення: Спочатку виконай preflight, покажи користувачу наслідок і віддай перевагу вузькому методу.

Де можна помилитися
  • Змінює live-стан магазину; результат і помилки записуються в AI-журнал.
  • Помилка може змінити поведінку магазину або дані; покажи очікуваний результат до запису.
Що перевірити перед викликом
  • pages.list — Прочитай поточний стан і не перезаписуй поля, яких користувач не просив змінювати. (before_write)
Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "title": {
      "type": "string"
    },
    "data": {
      "type": "object",
      "description": "Частковий набір дозволених полів."
    },
    "translations": {
      "type": "object"
    }
  },
  "additionalProperties": false,
  "required": [
    "title"
  ]
}
Результат (data)
{
  "type": "object"
}
write Ризик: high Підтвердження: required

pages.delete — Видалити сторінку

Що робить: Переносить сторінку в кошик на 14 днів без видалення її блоків і файлів. Storefront та runtime одразу перестають її використовувати; до остаточного очищення сторінку можна відновити.

ДоступwriteРизикhigh
ПідтвердженняrequiredІдемпотентністьnot_needed
Потрібні модулі—
Класи данихshop_internal
Наслідкиpage_soft_deleted, storefront_page_hidden
Додатковий контекст для AI

Що зачіпає: pages, storefront.routing

Правило рішення: Отримай явне підтвердження конкретної дії безпосередньо перед викликом.

Де можна помилитися
  • Змінює live-стан магазину; результат і помилки записуються в AI-журнал.
  • Дію може бути складно або неможливо скасувати; потрібне підтвердження точної операції.
Що перевірити перед викликом
  • pages.get — Прочитай поточний стан і не перезаписуй поля, яких користувач не просив змінювати. (before_write)
Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "page_id": {
      "type": "integer",
      "minimum": 1
    }
  },
  "additionalProperties": false,
  "required": [
    "page_id"
  ]
}
Результат (data)
{
  "type": "object"
}
read Ризик: low

pages.get — Дані сторінки

Що робить: Повертає сторінку з перекладами, SEO, meta та впорядкованими блоками.

ДоступreadРизикlow
ПідтвердженняnoneІдемпотентністьnot_needed
Потрібні модулі—
Класи данихshop_internal
Наслідки—
Додатковий контекст для AI

Що зачіпає: pages, storefront.routing

Правило рішення: Можна викликати без підтвердження, але запитуй лише потрібні дані й не роби зайвих змін.

Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "page_id": {
      "type": "integer",
      "minimum": 1
    },
    "include_deleted": {
      "type": "boolean",
      "default": false
    }
  },
  "additionalProperties": false,
  "required": [
    "page_id"
  ]
}
Результат (data)
{
  "type": "object"
}
read Ризик: low

pages.layouts.get — Runtime-сторінки

Що робить: Повертає сторінки, призначені для каталогу, категорії, товару та checkout.

ДоступreadРизикlow
ПідтвердженняnoneІдемпотентністьnot_needed
Потрібні модулі—
Класи данихshop_internal
Наслідки—
Додатковий контекст для AI

Що зачіпає: pages, storefront.routing

Правило рішення: Можна викликати без підтвердження, але запитуй лише потрібні дані й не роби зайвих змін.

Вхідні дані (params)
{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}
Результат (data)
{
  "type": "object"
}
write Ризик: high Підтвердження: required

pages.layouts.set — Призначити runtime-сторінку

Що робить: Призначає наявну сторінку магазину для каталогу, категорії, товару або checkout через чинні layout-моделі.

ДоступwriteРизикhigh
ПідтвердженняrequiredІдемпотентністьnot_needed
Потрібні модулі—
Класи данихshop_internal
Наслідкиruntime_route_page_changed
Додатковий контекст для AI

Що зачіпає: pages, storefront.routing

Правило рішення: Отримай явне підтвердження конкретної дії безпосередньо перед викликом.

Де можна помилитися
  • Змінює live-стан магазину; результат і помилки записуються в AI-журнал.
  • Дію може бути складно або неможливо скасувати; потрібне підтвердження точної операції.
Що перевірити перед викликом
  • pages.get — Прочитай поточний стан і не перезаписуй поля, яких користувач не просив змінювати. (before_write)
Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "runtime_context": {
      "type": "string",
      "enum": [
        "catalog",
        "category",
        "product",
        "checkout"
      ]
    },
    "page_id": {
      "type": [
        "integer",
        "null"
      ]
    }
  },
  "additionalProperties": false,
  "required": [
    "runtime_context",
    "page_id"
  ]
}
Результат (data)
{
  "type": "object"
}
read Ризик: low

pages.list — Список сторінок

Що робить: Повертає сторінки магазину, їх URL, роль у runtime, кількість активних блоків і статус кошика.

ДоступreadРизикlow
ПідтвердженняnoneІдемпотентністьnot_needed
Потрібні модулі—
Класи данихshop_internal
Наслідки—
Додатковий контекст для AI

Що зачіпає: pages, storefront.routing

Правило рішення: Можна викликати без підтвердження, але запитуй лише потрібні дані й не роби зайвих змін.

Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "query": {
      "type": "string",
      "description": "Пошук за текстовими полями."
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 100,
      "default": 20
    },
    "offset": {
      "type": "integer",
      "minimum": 0,
      "maximum": 1000000,
      "default": 0
    },
    "include_unpublished": {
      "type": "boolean",
      "default": true
    },
    "runtime_context": {
      "type": "string"
    },
    "deletion_status": {
      "type": "string",
      "enum": [
        "active",
        "deleted",
        "all"
      ],
      "default": "active"
    }
  },
  "additionalProperties": false
}
Результат (data)
{
  "type": "object"
}
write Ризик: medium Підтвердження: recommended

pages.restore — Відновити сторінку

Що робить: Відновлює сторінку з 14-денного кошика. Її активні блоки знову рендеряться, але блоки, видалені окремо, залишаються у кошику блоків до окремого відновлення.

ДоступwriteРизикmedium
ПідтвердженняrecommendedІдемпотентністьnot_needed
Потрібні модулі—
Класи данихshop_internal
Наслідкиpage_restored, storefront_page_may_return
Додатковий контекст для AI

Що зачіпає: pages, storefront.routing

Правило рішення: Спочатку виконай preflight, покажи користувачу наслідок і віддай перевагу вузькому методу.

Де можна помилитися
  • Змінює live-стан магазину; результат і помилки записуються в AI-журнал.
  • Помилка може змінити поведінку магазину або дані; покажи очікуваний результат до запису.
Що перевірити перед викликом
  • pages.get — Прочитай поточний стан і не перезаписуй поля, яких користувач не просив змінювати. (before_write)
Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "page_id": {
      "type": "integer",
      "minimum": 1
    }
  },
  "additionalProperties": false,
  "required": [
    "page_id"
  ]
}
Результат (data)
{
  "type": "object"
}
write Ризик: medium Підтвердження: recommended

pages.update — Оновити сторінку

Що робить: Частково оновлює назву, URL, SEO, meta та переклади; не змінює блоки й публікацію.

ДоступwriteРизикmedium
ПідтвердженняrecommendedІдемпотентністьnot_needed
Потрібні модулі—
Класи данихshop_internal
Наслідкиpage_metadata_changed
Додатковий контекст для AI

Що зачіпає: pages, storefront.routing

Правило рішення: Спочатку виконай preflight, покажи користувачу наслідок і віддай перевагу вузькому методу.

Де можна помилитися
  • Змінює live-стан магазину; результат і помилки записуються в AI-журнал.
  • Помилка може змінити поведінку магазину або дані; покажи очікуваний результат до запису.
Що перевірити перед викликом
  • pages.get — Прочитай поточний стан і не перезаписуй поля, яких користувач не просив змінювати. (before_write)
Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "page_id": {
      "type": "integer",
      "minimum": 1
    },
    "patch": {
      "type": "object",
      "description": "Частковий набір дозволених полів."
    },
    "translations": {
      "type": "object"
    }
  },
  "additionalProperties": false,
  "required": [
    "page_id",
    "patch"
  ]
}
Результат (data)
{
  "type": "object"
}
write Ризик: medium

pages.visibility.set — Публікація сторінки

Що робить: Вузько публікує або приховує сторінку.

ДоступwriteРизикmedium
ПідтвердженняnoneІдемпотентністьnot_needed
Потрібні модулі—
Класи данихshop_internal
Наслідкиstorefront_visibility_changed
Додатковий контекст для AI

Що зачіпає: pages, storefront.routing

Правило рішення: Спочатку виконай preflight, покажи користувачу наслідок і віддай перевагу вузькому методу.

Де можна помилитися
  • Змінює live-стан магазину; результат і помилки записуються в AI-журнал.
  • Помилка може змінити поведінку магазину або дані; покажи очікуваний результат до запису.
Що перевірити перед викликом
  • pages.get — Прочитай поточний стан і не перезаписуй поля, яких користувач не просив змінювати. (before_write)
Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "page_id": {
      "type": "integer",
      "minimum": 1
    },
    "is_published": {
      "type": "boolean"
    }
  },
  "additionalProperties": false,
  "required": [
    "page_id",
    "is_published"
  ]
}
Результат (data)
{
  "type": "object"
}

Блоки (17)

write Ризик: low

pages.block_snapshots.create — Зберегти знімок блока

Що робить: Створює незмінний shop-scoped знімок блока сторінки, статті або головної блогу разом із перекладами, налаштуваннями та фізичними копіями файлів. Для широкого редизайну використовуй pages.copy, blog.articles.copy або знімки всіх блоків головної блогу.

ДоступwriteРизикlow
ПідтвердженняnoneІдемпотентністьnot_needed
Потрібні модулі—
Класи данихshop_internal
Наслідкиblock_snapshot_created, media_copied
Додатковий контекст для AI

Що зачіпає: pages.blocks, storefront.layout

Правило рішення: Можна викликати без підтвердження, але запитуй лише потрібні дані й не роби зайвих змін.

Де можна помилитися
  • Змінює live-стан магазину; результат і помилки записуються в AI-журнал.
  • Знімок фіксує один блок, а не всю сторінку/статтю: metadata і загальний порядок блоків не версіонуються атомарно.
Що перевірити перед викликом
  • pages.list — Прочитай поточний стан і не перезаписуй поля, яких користувач не просив змінювати. (before_write)
Безпечніший шлях
  • Для контрольної версії матеріалу збережи snapshot кожного активного блока та окремо зафіксуй його position із pages.blocks.list.
Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "page_id": {
      "type": "integer",
      "minimum": 1
    },
    "article_id": {
      "type": "integer",
      "minimum": 1
    },
    "blog_settings_id": {
      "type": "integer",
      "minimum": 1
    },
    "block_id": {
      "type": "integer",
      "minimum": 1
    },
    "title": {
      "type": "string",
      "maxLength": 160
    }
  },
  "additionalProperties": false,
  "required": [
    "block_id",
    "title"
  ]
}
Результат (data)
{
  "type": "object"
}
write Ризик: high Підтвердження: required

pages.block_snapshots.delete — Видалити збережений блок

Що робить: Безповоротно видаляє знімок блока та його незалежні копії assets. Уже створені зі знімка блоки не змінюються.

ДоступwriteРизикhigh
ПідтвердженняrequiredІдемпотентністьnot_needed
Потрібні модулі—
Класи данихshop_internal
Наслідкиblock_snapshot_deleted, snapshot_media_deleted
Додатковий контекст для AI

Що зачіпає: pages.blocks, storefront.layout

Правило рішення: Отримай явне підтвердження конкретної дії безпосередньо перед викликом.

Де можна помилитися
  • Змінює live-стан магазину; результат і помилки записуються в AI-журнал.
  • Дію може бути складно або неможливо скасувати; потрібне підтвердження точної операції.
  • Знімок фіксує один блок, а не всю сторінку/статтю: metadata і загальний порядок блоків не версіонуються атомарно.
Що перевірити перед викликом
  • pages.get — Прочитай поточний стан і не перезаписуй поля, яких користувач не просив змінювати. (before_write)
Безпечніший шлях
  • Для контрольної версії матеріалу збережи snapshot кожного активного блока та окремо зафіксуй його position із pages.blocks.list.
Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "snapshot_id": {
      "type": "integer",
      "minimum": 1
    }
  },
  "additionalProperties": false,
  "required": [
    "snapshot_id"
  ]
}
Результат (data)
{
  "type": "object"
}
read Ризик: low

pages.block_snapshots.get — Дані збереженого блока

Що робить: Повертає повний immutable payload знімка: content, переклади, design, data_config, extra та власні копії assets.

ДоступreadРизикlow
ПідтвердженняnoneІдемпотентністьnot_needed
Потрібні модулі—
Класи данихshop_internal
Наслідки—
Додатковий контекст для AI

Що зачіпає: pages.blocks, storefront.layout

Правило рішення: Можна викликати без підтвердження, але запитуй лише потрібні дані й не роби зайвих змін.

Де можна помилитися
  • Знімок фіксує один блок, а не всю сторінку/статтю: metadata і загальний порядок блоків не версіонуються атомарно.
Безпечніший шлях
  • Для контрольної версії матеріалу збережи snapshot кожного активного блока та окремо зафіксуй його position із pages.blocks.list.
Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "snapshot_id": {
      "type": "integer",
      "minimum": 1
    }
  },
  "additionalProperties": false,
  "required": [
    "snapshot_id"
  ]
}
Результат (data)
{
  "type": "object"
}
write Ризик: dynamic Підтвердження: recommended

pages.block_snapshots.instantiate — Додати збережений блок

Що робить: Створює у сторінці або статті новий блок і uid із зафіксованого payload. Assets копіюються заново; metadata власника цей механізм не відновлює.

ДоступwriteРизикdynamic
ПідтвердженняrecommendedІдемпотентністьsupported
Потрібні модулі—
Класи данихshop_internal
Наслідкиpage_content_changed, media_copied
Додатковий контекст для AI

Що зачіпає: pages.blocks, storefront.layout

Правило рішення: Оціни фактичні поля; для HTML, секретів, індексації чи широкої зміни отримай явне підтвердження.

Де можна помилитися
  • Змінює live-стан магазину; результат і помилки записуються в AI-журнал.
  • Ризик залежить від полів і контенту; перевір параметри та обери найвужчий метод.
  • Знімок фіксує один блок, а не всю сторінку/статтю: metadata і загальний порядок блоків не версіонуються атомарно.
Що перевірити перед викликом
  • pages.get — Прочитай поточний стан і не перезаписуй поля, яких користувач не просив змінювати. (before_write)
Безпечніший шлях
  • Для контрольної версії матеріалу збережи snapshot кожного активного блока та окремо зафіксуй його position із pages.blocks.list.
Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "snapshot_id": {
      "type": "integer",
      "minimum": 1
    },
    "page_id": {
      "type": "integer",
      "minimum": 1
    },
    "article_id": {
      "type": "integer",
      "minimum": 1
    },
    "blog_settings_id": {
      "type": "integer",
      "minimum": 1
    },
    "insert_mode": {
      "type": "string",
      "enum": [
        "end",
        "before",
        "after"
      ]
    },
    "target_block_id": {
      "type": "integer",
      "minimum": 1
    }
  },
  "additionalProperties": false,
  "required": [
    "snapshot_id"
  ]
}
Результат (data)
{
  "type": "object"
}
read Ризик: low

pages.block_snapshots.list — Збережені блоки

Що робить: Повертає незалежні знімки блоків лише поточного магазину. Вони придатні для сторінок і статей: повна версія потребує snapshot кожного активного блока та окремо збереженого position.

ДоступreadРизикlow
ПідтвердженняnoneІдемпотентністьnot_needed
Потрібні модулі—
Класи данихshop_internal
Наслідки—
Додатковий контекст для AI

Що зачіпає: pages.blocks, storefront.layout

Правило рішення: Можна викликати без підтвердження, але запитуй лише потрібні дані й не роби зайвих змін.

Де можна помилитися
  • Знімок фіксує один блок, а не всю сторінку/статтю: metadata і загальний порядок блоків не версіонуються атомарно.
Безпечніший шлях
  • Для контрольної версії матеріалу збережи snapshot кожного активного блока та окремо зафіксуй його position із pages.blocks.list.
Вхідні дані (params)
{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}
Результат (data)
{
  "type": "object"
}
read Ризик: low

pages.blocks.catalog — Каталог блоків

Що робить: Повертає реальний registry page builder: групи, всі зареєстровані типи блоків, контексти, schemas, defaults і контракт backend/runtime-даних. Для html_code тут описані окремі opt-in перемикачі безпечного JSON (усі за замовчуванням вимкнені) і медіатека images до 30 зображень для [[image:ключ]].

ДоступreadРизикlow
ПідтвердженняnoneІдемпотентністьnot_needed
Потрібні модулі—
Класи данихpublic, shop_internal
Наслідки—
Додатковий контекст для AI

Що зачіпає: pages.blocks, storefront.layout

Правило рішення: Можна викликати без підтвердження, але запитуй лише потрібні дані й не роби зайвих змін.

Де можна помилитися
  • html_code не відкриває Python або сирий backend. Безпечний JSON для браузера з'являється лише через явно ввімкнені expose_* поля; не вмикай набори, які UI не використовує.
Що перевірити перед викликом
  • pages.blocks.catalog — Спочатку знайди стандартний блок та його schema; власний HTML використовуй лише коли готового UI немає. (before_block_design)
Безпечніший шлях
  • Спочатку використай стандартний block provider; для власного UI ввімкни лише потрібні частини shopcore.html-block-data.v1 і врахуй ліміт товарів.
Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "block_code": {
      "type": "string"
    },
    "runtime_context": {
      "type": "string"
    }
  },
  "additionalProperties": false
}
Результат (data)
{
  "type": "object"
}
write Ризик: dynamic Підтвердження: recommended

pages.blocks.create — Створити блок

Що робить: Вставляє зареєстрований блок у сторінку, статтю або головну блогу через єдиний BuilderProvider. Передайте рівно один page_id/article_id/blog_settings_id.

ДоступwriteРизикdynamic
ПідтвердженняrecommendedІдемпотентністьsupported
Потрібні модулі—
Класи данихshop_internal
Наслідкиcontent_changed
Додатковий контекст для AI

Що зачіпає: pages.blocks, storefront.layout

Правило рішення: Оціни фактичні поля; для HTML, секретів, індексації чи широкої зміни отримай явне підтвердження.

Де можна помилитися
  • Змінює live-стан магазину; результат і помилки записуються в AI-журнал.
  • Ризик залежить від полів і контенту; перевір параметри та обери найвужчий метод.
  • html_code не відкриває Python або сирий backend. Безпечний JSON для браузера з'являється лише через явно ввімкнені expose_* поля; не вмикай набори, які UI не використовує.
Що перевірити перед викликом
  • pages.blocks.list — Прочитай поточний стан і не перезаписуй поля, яких користувач не просив змінювати. (before_write)
  • pages.blocks.catalog — Спочатку знайди стандартний блок та його schema; власний HTML використовуй лише коли готового UI немає. (before_block_design)
Безпечніший шлях
  • Спочатку використай стандартний block provider; для власного UI ввімкни лише потрібні частини shopcore.html-block-data.v1 і врахуй ліміт товарів.
Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "page_id": {
      "type": "integer",
      "minimum": 1
    },
    "article_id": {
      "type": "integer",
      "minimum": 1
    },
    "blog_settings_id": {
      "type": "integer",
      "minimum": 1
    },
    "block_code": {
      "type": "string"
    },
    "insert_mode": {
      "type": "string",
      "enum": [
        "end",
        "before",
        "after"
      ]
    },
    "target_block_id": {
      "type": "integer",
      "minimum": 1
    }
  },
  "additionalProperties": false,
  "required": [
    "block_code"
  ]
}
Результат (data)
{
  "type": "object"
}
write Ризик: high Підтвердження: required

pages.blocks.delete — Видалити блок

Що робить: Переносить блок сторінки, статті або головної блогу у кошик на 14 днів; переклади й assets зберігаються для відновлення.

ДоступwriteРизикhigh
ПідтвердженняrequiredІдемпотентністьnot_needed
Потрібні модулі—
Класи данихshop_internal
Наслідкиblock_soft_deleted, block_hidden_from_render
Додатковий контекст для AI

Що зачіпає: pages.blocks, storefront.layout

Правило рішення: Отримай явне підтвердження конкретної дії безпосередньо перед викликом.

Де можна помилитися
  • Змінює live-стан магазину; результат і помилки записуються в AI-журнал.
  • Дію може бути складно або неможливо скасувати; потрібне підтвердження точної операції.
  • html_code не відкриває Python або сирий backend. Безпечний JSON для браузера з'являється лише через явно ввімкнені expose_* поля; не вмикай набори, які UI не використовує.
Що перевірити перед викликом
  • pages.blocks.get — Прочитай поточний стан і не перезаписуй поля, яких користувач не просив змінювати. (before_write)
  • pages.blocks.catalog — Спочатку знайди стандартний блок та його schema; власний HTML використовуй лише коли готового UI немає. (before_block_design)
Безпечніший шлях
  • Спочатку використай стандартний block provider; для власного UI ввімкни лише потрібні частини shopcore.html-block-data.v1 і врахуй ліміт товарів.
Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "page_id": {
      "type": "integer",
      "minimum": 1
    },
    "article_id": {
      "type": "integer",
      "minimum": 1
    },
    "blog_settings_id": {
      "type": "integer",
      "minimum": 1
    },
    "block_id": {
      "type": "integer",
      "minimum": 1
    }
  },
  "additionalProperties": false,
  "required": [
    "block_id"
  ]
}
Результат (data)
{
  "type": "object"
}
write Ризик: low

pages.blocks.enabled.set — Увімкнути або вимкнути блок

Що робить: Вузько змінює видимість одного блока сторінки, статті або головної блогу без видалення контенту.

ДоступwriteРизикlow
ПідтвердженняnoneІдемпотентністьnot_needed
Потрібні модулі—
Класи данихshop_internal
Наслідкиblock_visibility_changed
Додатковий контекст для AI

Що зачіпає: pages.blocks, storefront.layout

Правило рішення: Можна викликати без підтвердження, але запитуй лише потрібні дані й не роби зайвих змін.

Де можна помилитися
  • Змінює live-стан магазину; результат і помилки записуються в AI-журнал.
  • html_code не відкриває Python або сирий backend. Безпечний JSON для браузера з'являється лише через явно ввімкнені expose_* поля; не вмикай набори, які UI не використовує.
Що перевірити перед викликом
  • pages.blocks.get — Прочитай поточний стан і не перезаписуй поля, яких користувач не просив змінювати. (before_write)
  • pages.blocks.catalog — Спочатку знайди стандартний блок та його schema; власний HTML використовуй лише коли готового UI немає. (before_block_design)
Безпечніший шлях
  • Спочатку використай стандартний block provider; для власного UI ввімкни лише потрібні частини shopcore.html-block-data.v1 і врахуй ліміт товарів.
Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "page_id": {
      "type": "integer",
      "minimum": 1
    },
    "article_id": {
      "type": "integer",
      "minimum": 1
    },
    "blog_settings_id": {
      "type": "integer",
      "minimum": 1
    },
    "block_id": {
      "type": "integer",
      "minimum": 1
    },
    "is_enabled": {
      "type": "boolean"
    }
  },
  "additionalProperties": false,
  "required": [
    "block_id",
    "is_enabled"
  ]
}
Результат (data)
{
  "type": "object"
}
read Ризик: low

pages.blocks.get — Дані блока

Що робить: Повертає один блок сторінки, статті або головної блогу разом із чинними schemas та значеннями. Передайте рівно один page_id/article_id/blog_settings_id.

ДоступreadРизикlow
ПідтвердженняnoneІдемпотентністьnot_needed
Потрібні модулі—
Класи данихshop_internal
Наслідки—
Додатковий контекст для AI

Що зачіпає: pages.blocks, storefront.layout

Правило рішення: Можна викликати без підтвердження, але запитуй лише потрібні дані й не роби зайвих змін.

Де можна помилитися
  • html_code не відкриває Python або сирий backend. Безпечний JSON для браузера з'являється лише через явно ввімкнені expose_* поля; не вмикай набори, які UI не використовує.
Що перевірити перед викликом
  • pages.blocks.catalog — Спочатку знайди стандартний блок та його schema; власний HTML використовуй лише коли готового UI немає. (before_block_design)
Безпечніший шлях
  • Спочатку використай стандартний block provider; для власного UI ввімкни лише потрібні частини shopcore.html-block-data.v1 і врахуй ліміт товарів.
Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "page_id": {
      "type": "integer",
      "minimum": 1
    },
    "article_id": {
      "type": "integer",
      "minimum": 1
    },
    "blog_settings_id": {
      "type": "integer",
      "minimum": 1
    },
    "block_id": {
      "type": "integer",
      "minimum": 1
    },
    "include_deleted": {
      "type": "boolean",
      "default": false
    }
  },
  "additionalProperties": false,
  "required": [
    "block_id"
  ]
}
Результат (data)
{
  "type": "object"
}
read Ризик: low

pages.blocks.list — Блоки сторінки, статті або головної блогу

Що робить: Спільний метод повертає блоки сторінки, статті або головної сторінки блогу. Передайте рівно один page_id/article_id/blog_settings_id; бібліотека, схеми й рендерер спільні.

ДоступreadРизикlow
ПідтвердженняnoneІдемпотентністьnot_needed
Потрібні модулі—
Класи данихshop_internal
Наслідки—
Додатковий контекст для AI

Що зачіпає: pages.blocks, storefront.layout

Правило рішення: Можна викликати без підтвердження, але запитуй лише потрібні дані й не роби зайвих змін.

Де можна помилитися
  • html_code не відкриває Python або сирий backend. Безпечний JSON для браузера з'являється лише через явно ввімкнені expose_* поля; не вмикай набори, які UI не використовує.
Що перевірити перед викликом
  • pages.blocks.catalog — Спочатку знайди стандартний блок та його schema; власний HTML використовуй лише коли готового UI немає. (before_block_design)
Безпечніший шлях
  • Спочатку використай стандартний block provider; для власного UI ввімкни лише потрібні частини shopcore.html-block-data.v1 і врахуй ліміт товарів.
Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "page_id": {
      "type": "integer",
      "minimum": 1
    },
    "article_id": {
      "type": "integer",
      "minimum": 1
    },
    "blog_settings_id": {
      "type": "integer",
      "minimum": 1
    },
    "deletion_status": {
      "type": "string",
      "enum": [
        "active",
        "deleted",
        "all"
      ],
      "default": "active"
    }
  },
  "additionalProperties": false
}
Результат (data)
{
  "type": "object"
}
write Ризик: medium Підтвердження: recommended

pages.blocks.media.delete — Прибрати зображення з блока

Що робить: Очищає одне поле зображення блока (той самий field, що в pages.blocks.media.set) і видаляє файл, завантажений у це поле. Інші поля, елементи repeater і тексти не змінюються. Для перекладного поля без language очищає його для всіх мов магазину. Для медіатеки html_code (images) remove_item=true прибирає елемент повністю разом із ключем; [[image:ключ]] у HTML після цього нічого не підставить, тож спершу прибери його з HTML.

ДоступwriteРизикmedium
ПідтвердженняrecommendedІдемпотентністьnot_needed
Потрібні модулі—
Класи данихshop_internal
Наслідкиcontent_changed, block_media_deleted, media_file_deleted
Додатковий контекст для AI

Що зачіпає: pages.blocks, storefront.layout

Правило рішення: Спочатку виконай preflight, покажи користувачу наслідок і віддай перевагу вузькому методу.

Де можна помилитися
  • Змінює live-стан магазину; результат і помилки записуються в AI-журнал.
  • Помилка може змінити поведінку магазину або дані; покажи очікуваний результат до запису.
  • html_code не відкриває Python або сирий backend. Безпечний JSON для браузера з'являється лише через явно ввімкнені expose_* поля; не вмикай набори, які UI не використовує.
Що перевірити перед викликом
  • pages.blocks.get — Прочитай поточний стан і не перезаписуй поля, яких користувач не просив змінювати. (before_write)
  • pages.blocks.catalog — Спочатку знайди стандартний блок та його schema; власний HTML використовуй лише коли готового UI немає. (before_block_design)
Безпечніший шлях
  • Спочатку використай стандартний block provider; для власного UI ввімкни лише потрібні частини shopcore.html-block-data.v1 і врахуй ліміт товарів.
Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "page_id": {
      "type": "integer",
      "minimum": 1
    },
    "article_id": {
      "type": "integer",
      "minimum": 1
    },
    "blog_settings_id": {
      "type": "integer",
      "minimum": 1
    },
    "block_id": {
      "type": "integer",
      "minimum": 1
    },
    "field": {
      "type": "string",
      "maxLength": 255,
      "description": "Шлях поля зображення з media_fields блока: background_image або для repeater slides.0.image."
    },
    "language": {
      "type": "string",
      "description": "Лише для перекладного поля: код мови. Якщо не передано, зміна застосовується до всіх увімкнених мов магазину."
    },
    "remove_item": {
      "type": "boolean",
      "default": false,
      "description": "Лише для медіатеки: прибрати елемент повністю."
    },
    "expected_updated_at": {
      "type": "string"
    }
  },
  "additionalProperties": false,
  "required": [
    "block_id",
    "field"
  ]
}
Результат (data)
{
  "type": "object"
}
write Ризик: medium Підтвердження: recommended

pages.blocks.media.set — Завантажити зображення в блок

Що робить: Завантажує власне зображення агента в одне поле зображення блока сторінки, статті або головної блогу й одразу записує його URL у блок. Надішліть multipart/form-data: method, params_json, options_json і файл (поле file або назва з file_field). Шлях field беріть із media_fields відповіді pages.blocks.get: звичайне поле (background_image) або елемент repeater (slides.0.image). Змінюється лише вказане поле, сусідні елементи repeater і тексти зберігаються. Поле type=image приймає JPG/PNG/WEBP/GIF і конвертує їх у WEBP до 2400px; image_asset додатково приймає безпечний SVG до 1 МБ. Максимум 15 МБ. Для перекладного поля без language картинка ставиться для всіх мов магазину. Файл належить лише цьому блоку магазину; попередній файл цього поля видаляється. Для html_code є медіатека images (до 30 зображень, лише JPG/PNG/WEBP/GIF → WEBP): додай зображення з append=true і field=images.{item_count}.image, задай item.key; у HTML вставляй [[image:ключ]] — сервер підставить поточний URL, тож після заміни зображення HTML міняти не треба. Відповідь повертає library_item з ключем, URL і токеном.

ДоступwriteРизикmedium
ПідтвердженняrecommendedІдемпотентністьnot_needed
Потрібні модулі—
Класи данихshop_internal
Наслідкиcontent_changed, block_media_uploaded, old_media_file_deleted
Додатковий контекст для AI

Що зачіпає: pages.blocks, storefront.layout

Правило рішення: Спочатку виконай preflight, покажи користувачу наслідок і віддай перевагу вузькому методу.

Де можна помилитися
  • Змінює live-стан магазину; результат і помилки записуються в AI-журнал.
  • Помилка може змінити поведінку магазину або дані; покажи очікуваний результат до запису.
  • html_code не відкриває Python або сирий backend. Безпечний JSON для браузера з'являється лише через явно ввімкнені expose_* поля; не вмикай набори, які UI не використовує.
Що перевірити перед викликом
  • pages.blocks.get — Прочитай поточний стан і не перезаписуй поля, яких користувач не просив змінювати. (before_write)
  • pages.blocks.catalog — Спочатку знайди стандартний блок та його schema; власний HTML використовуй лише коли готового UI немає. (before_block_design)
Безпечніший шлях
  • Спочатку використай стандартний block provider; для власного UI ввімкни лише потрібні частини shopcore.html-block-data.v1 і врахуй ліміт товарів.
Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "page_id": {
      "type": "integer",
      "minimum": 1
    },
    "article_id": {
      "type": "integer",
      "minimum": 1
    },
    "blog_settings_id": {
      "type": "integer",
      "minimum": 1
    },
    "block_id": {
      "type": "integer",
      "minimum": 1
    },
    "field": {
      "type": "string",
      "maxLength": 255,
      "description": "Шлях поля зображення з media_fields блока: background_image або для repeater slides.0.image."
    },
    "language": {
      "type": "string",
      "description": "Лише для перекладного поля: код мови. Якщо не передано, зміна застосовується до всіх увімкнених мов магазину."
    },
    "file_field": {
      "type": "string",
      "default": "file"
    },
    "append": {
      "type": "boolean",
      "default": false,
      "description": "Лише для медіатеки (media_library=true, наприклад images у html_code): додати новий елемент; index у field має дорівнювати item_count."
    },
    "item": {
      "type": "object",
      "description": "Лише для медіатеки: текстові поля елемента з item_fields, наприклад {\"key\": \"hero\", \"alt\": \"Опис\"}."
    },
    "expected_updated_at": {
      "type": "string"
    }
  },
  "additionalProperties": false,
  "required": [
    "block_id",
    "field"
  ]
}
Результат (data)
{
  "type": "object"
}
write Ризик: low

pages.blocks.move — Перемістити блок

Що робить: Міняє блок сторінки, статті або головної блогу місцями з сусіднім за чинним алгоритмом builder UI.

ДоступwriteРизикlow
ПідтвердженняnoneІдемпотентністьnot_needed
Потрібні модулі—
Класи данихshop_internal
Наслідкиblock_order_changed
Додатковий контекст для AI

Що зачіпає: pages.blocks, storefront.layout

Правило рішення: Можна викликати без підтвердження, але запитуй лише потрібні дані й не роби зайвих змін.

Де можна помилитися
  • Змінює live-стан магазину; результат і помилки записуються в AI-журнал.
  • html_code не відкриває Python або сирий backend. Безпечний JSON для браузера з'являється лише через явно ввімкнені expose_* поля; не вмикай набори, які UI не використовує.
Що перевірити перед викликом
  • pages.blocks.get — Прочитай поточний стан і не перезаписуй поля, яких користувач не просив змінювати. (before_write)
  • pages.blocks.catalog — Спочатку знайди стандартний блок та його schema; власний HTML використовуй лише коли готового UI немає. (before_block_design)
Безпечніший шлях
  • Спочатку використай стандартний block provider; для власного UI ввімкни лише потрібні частини shopcore.html-block-data.v1 і врахуй ліміт товарів.
Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "page_id": {
      "type": "integer",
      "minimum": 1
    },
    "article_id": {
      "type": "integer",
      "minimum": 1
    },
    "blog_settings_id": {
      "type": "integer",
      "minimum": 1
    },
    "block_id": {
      "type": "integer",
      "minimum": 1
    },
    "direction": {
      "type": "string",
      "enum": [
        "up",
        "down"
      ]
    }
  },
  "additionalProperties": false,
  "required": [
    "block_id",
    "direction"
  ]
}
Результат (data)
{
  "type": "object"
}
write Ризик: low

pages.blocks.restore — Відновити блок

Що робить: Відновлює блок із кошика конкретної сторінки, статті або головної блогу разом із перекладами та assets.

ДоступwriteРизикlow
ПідтвердженняnoneІдемпотентністьnot_needed
Потрібні модулі—
Класи данихshop_internal
Наслідкиblock_restored, content_render_changed
Додатковий контекст для AI

Що зачіпає: pages.blocks, storefront.layout

Правило рішення: Можна викликати без підтвердження, але запитуй лише потрібні дані й не роби зайвих змін.

Де можна помилитися
  • Змінює live-стан магазину; результат і помилки записуються в AI-журнал.
  • html_code не відкриває Python або сирий backend. Безпечний JSON для браузера з'являється лише через явно ввімкнені expose_* поля; не вмикай набори, які UI не використовує.
Що перевірити перед викликом
  • pages.blocks.get — Прочитай поточний стан і не перезаписуй поля, яких користувач не просив змінювати. (before_write)
  • pages.blocks.catalog — Спочатку знайди стандартний блок та його schema; власний HTML використовуй лише коли готового UI немає. (before_block_design)
Безпечніший шлях
  • Спочатку використай стандартний block provider; для власного UI ввімкни лише потрібні частини shopcore.html-block-data.v1 і врахуй ліміт товарів.
Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "page_id": {
      "type": "integer",
      "minimum": 1
    },
    "article_id": {
      "type": "integer",
      "minimum": 1
    },
    "blog_settings_id": {
      "type": "integer",
      "minimum": 1
    },
    "block_id": {
      "type": "integer",
      "minimum": 1
    }
  },
  "additionalProperties": false,
  "required": [
    "block_id"
  ]
}
Результат (data)
{
  "type": "object"
}
read Ризик: low

pages.blocks.runtime_guide — Backend-дані блоків

Що робить: Пояснює server-side render pipeline, фактичні поля get_base_data/get_products, route-контексти та дані кожного динамічного блока; для власного HTML документує opt-in JSON shopcore.html-block-data.v1, ліміти та заборонені приватні дані.

ДоступreadРизикlow
ПідтвердженняnoneІдемпотентністьnot_needed
Потрібні модулі—
Класи данихpublic, shop_internal
Наслідки—
Додатковий контекст для AI

Що зачіпає: pages.blocks, storefront.layout

Правило рішення: Можна викликати без підтвердження, але запитуй лише потрібні дані й не роби зайвих змін.

Де можна помилитися
  • html_code не відкриває Python або сирий backend. Безпечний JSON для браузера з'являється лише через явно ввімкнені expose_* поля; не вмикай набори, які UI не використовує.
Що перевірити перед викликом
  • pages.blocks.catalog — Спочатку знайди стандартний блок та його schema; власний HTML використовуй лише коли готового UI немає. (before_block_design)
Безпечніший шлях
  • Спочатку використай стандартний block provider; для власного UI ввімкни лише потрібні частини shopcore.html-block-data.v1 і врахуй ліміт товарів.
Вхідні дані (params)
{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}
Результат (data)
{
  "type": "object"
}
write Ризик: dynamic Підтвердження: recommended

pages.blocks.update — Оновити блок

Що робить: Частково оновлює блок сторінки, статті або головної блогу через ті самі schemas і validators, що й builder UI. Передайте рівно один page_id/article_id/blog_settings_id. Верхньорівневі ключі content зливаються з чинними, але repeater-поле (наприклад slides або items) замінюється цілим масивом, тому передавайте його повністю. Файли можна додати multipart-полями upload__shared__<field> або upload__translated__<lang>__<field> навіть без content; для однієї картинки простіше використовувати pages.blocks.media.set.

ДоступwriteРизикdynamic
ПідтвердженняrecommendedІдемпотентністьnot_needed
Потрібні модулі—
Класи данихshop_internal
Наслідкиcontent_changed, media_may_change
Додатковий контекст для AI

Що зачіпає: pages.blocks, storefront.layout

Правило рішення: Оціни фактичні поля; для HTML, секретів, індексації чи широкої зміни отримай явне підтвердження.

Де можна помилитися
  • Змінює live-стан магазину; результат і помилки записуються в AI-журнал.
  • Ризик залежить від полів і контенту; перевір параметри та обери найвужчий метод.
  • html_code не відкриває Python або сирий backend. Безпечний JSON для браузера з'являється лише через явно ввімкнені expose_* поля; не вмикай набори, які UI не використовує.
Що перевірити перед викликом
  • pages.blocks.get — Прочитай поточний стан і не перезаписуй поля, яких користувач не просив змінювати. (before_write)
  • pages.blocks.catalog — Спочатку знайди стандартний блок та його schema; власний HTML використовуй лише коли готового UI немає. (before_block_design)
Безпечніший шлях
  • Спочатку використай стандартний block provider; для власного UI ввімкни лише потрібні частини shopcore.html-block-data.v1 і врахуй ліміт товарів.
Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "page_id": {
      "type": "integer",
      "minimum": 1
    },
    "article_id": {
      "type": "integer",
      "minimum": 1
    },
    "blog_settings_id": {
      "type": "integer",
      "minimum": 1
    },
    "block_id": {
      "type": "integer",
      "minimum": 1
    },
    "content": {
      "type": "object",
      "properties": {
        "shared": {
          "type": "object"
        },
        "translated": {
          "type": "object"
        }
      }
    },
    "design": {
      "type": "object"
    },
    "data_config": {
      "type": "object"
    },
    "extra": {
      "type": "object"
    },
    "expected_updated_at": {
      "type": "string"
    }
  },
  "additionalProperties": false,
  "required": [
    "block_id"
  ]
}
Результат (data)
{
  "type": "object"
}

Блог (22)

Статті (10)

write Ризик: medium Підтвердження: recommended

blog.articles.copy — Створити копію статті

Що робить: Створює чернетку статті з незалежними копіями всіх активних блоків та assets; рекомендовано перед широким редизайном статті.

ДоступwriteРизикmedium
ПідтвердженняrecommendedІдемпотентністьnot_needed
Потрібні модуліblog
Класи данихshop_internal
Наслідкиblog_article_copy_created, block_assets_copied
Додатковий контекст для AI

Що зачіпає: blog.articles, pages.blocks, storefront.routing, seo

Правило рішення: Спочатку виконай preflight, покажи користувачу наслідок і віддай перевагу вузькому методу.

Де можна помилитися
  • Змінює live-стан магазину; результат і помилки записуються в AI-журнал.
  • Помилка може змінити поведінку магазину або дані; покажи очікуваний результат до запису.
  • Копія статті є чернеткою і фізично копіює assets блоків, тому збільшує використання сховища.
  • Блог ізольований магазином: ніколи не підставляй category/tag/article id з іншого магазину; API додатково перевіряє shop.
Що перевірити перед викликом
  • blog.articles.get — Прочитай поточний стан і не перезаписуй поля, яких користувач не просив змінювати. (before_write)
Безпечніший шлях
  • Для вузької зміни одного блока створи лише snapshot цього блока.
Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "article_id": {
      "type": "integer",
      "minimum": 1
    },
    "title": {
      "type": "string"
    },
    "slug": {
      "type": "string"
    }
  },
  "additionalProperties": false,
  "required": [
    "article_id"
  ]
}
Результат (data)
{
  "type": "object"
}
write Ризик: medium Підтвердження: recommended

blog.articles.create — Створити статтю блогу

Що робить: Створює незалежну статтю без технічної Page та 9 стартових блоків із українським текстом-рибою. Перший блок — штатний hero_centered: він містить shop-scoped картинку, заголовок із назви створюваної статті та підзаголовок з excerpt або тексту-підказки. Коли цей маркований блок стоїть першим, окрема штатна шапка матеріалу перед ним не рендериться — обкладинка є справжнім першим екраном і єдиним H1. Автоматичний шаблон не заповнює поле BlogArticle.cover, тому весь стартовий матеріал можна видалити як звичайні блоки й отримати чисту статтю. За замовчуванням це чернетка. Спочатку прочитайте pages.blocks.list з article_id, замініть текст-рибу та налаштування через pages.blocks.update або видаліть непотрібні блоки; додаткові блоки — pages.blocks.create. Перед публікацією замініть картинку першого hero_centered через multipart pages.blocks.update, передавши файл у полі upload__shared__background_image, і перевірте його заголовок та підзаголовок. Переклад контенту блоків uk, для інших мов додайте переклади блоків. Не публікуйте текст-рибу як готовий матеріал. Окремі поля статті cover та og_image, якщо вони свідомо потрібні поза стартовим блоковим шаблоном, як і раніше підтримують multipart та blog.articles.media.set/delete. Копіювання через blog.articles.copy переносить лише блоки й медіа оригіналу без домішування стартового макета.

ДоступwriteРизикmedium
ПідтвердженняrecommendedІдемпотентністьsupported
Потрібні модуліblog
Класи данихshop_internal
Наслідкиblog_article_created, starter_blocks_created, starter_block_media_created
Додатковий контекст для AI

Що зачіпає: blog.articles, pages.blocks, storefront.routing, seo

Правило рішення: Спочатку виконай preflight, покажи користувачу наслідок і віддай перевагу вузькому методу.

Де можна помилитися
  • Змінює live-стан магазину; результат і помилки записуються в AI-журнал.
  • Помилка може змінити поведінку магазину або дані; покажи очікуваний результат до запису.
  • Блог ізольований магазином: ніколи не підставляй category/tag/article id з іншого магазину; API додатково перевіряє shop.
Що перевірити перед викликом
  • blog.articles.list — Прочитай поточний стан і не перезаписуй поля, яких користувач не просив змінювати. (before_write)
Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "title": {
      "type": "string"
    },
    "data": {
      "type": "object",
      "description": "Частковий набір дозволених полів."
    },
    "translations": {
      "type": "object"
    }
  },
  "additionalProperties": false,
  "required": [
    "title"
  ]
}
Результат (data)
{
  "type": "object"
}
write Ризик: high Підтвердження: required

blog.articles.delete — Видалити статтю блогу

Що робить: М'яко видаляє статтю на 14 днів; URL одразу зникає. Її блоки й assets фізично зберігаються, а стан блоків у кошику не змінюється.

ДоступwriteРизикhigh
ПідтвердженняrequiredІдемпотентністьnot_needed
Потрібні модуліblog
Класи данихshop_internal
Наслідкиblog_article_soft_deleted, blog_url_removed
Додатковий контекст для AI

Що зачіпає: blog.articles, pages.blocks, storefront.routing, seo

Правило рішення: Отримай явне підтвердження конкретної дії безпосередньо перед викликом.

Де можна помилитися
  • Змінює live-стан магазину; результат і помилки записуються в AI-журнал.
  • Дію може бути складно або неможливо скасувати; потрібне підтвердження точної операції.
  • Блог ізольований магазином: ніколи не підставляй category/tag/article id з іншого магазину; API додатково перевіряє shop.
Що перевірити перед викликом
  • blog.articles.get — Прочитай поточний стан і не перезаписуй поля, яких користувач не просив змінювати. (before_write)
Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "article_id": {
      "type": "integer",
      "minimum": 1
    }
  },
  "additionalProperties": false,
  "required": [
    "article_id"
  ]
}
Результат (data)
{
  "type": "object"
}
read Ризик: low

blog.articles.get — Дані статті блогу

Що робить: Повертає метадані, SEO, переклади й посилання на спільний API блоків статті.

ДоступreadРизикlow
ПідтвердженняnoneІдемпотентністьnot_needed
Потрібні модуліblog
Класи данихshop_internal
Наслідки—
Додатковий контекст для AI

Що зачіпає: blog.articles, pages.blocks, storefront.routing, seo

Правило рішення: Можна викликати без підтвердження, але запитуй лише потрібні дані й не роби зайвих змін.

Де можна помилитися
  • Блог ізольований магазином: ніколи не підставляй category/tag/article id з іншого магазину; API додатково перевіряє shop.
Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "article_id": {
      "type": "integer",
      "minimum": 1
    },
    "include_deleted": {
      "type": "boolean",
      "default": false
    }
  },
  "additionalProperties": false,
  "required": [
    "article_id"
  ]
}
Результат (data)
{
  "type": "object"
}
read Ризик: low

blog.articles.list — Статті блогу

Що робить: Повертає статті поточного магазину з boolean-статусом is_published, категорією, тегами та кількістю блоків. Підтримує ті самі базові фільтри, що й публічний блог: query, category_id і tag_id.

ДоступreadРизикlow
ПідтвердженняnoneІдемпотентністьnot_needed
Потрібні модуліblog
Класи данихshop_internal
Наслідки—
Додатковий контекст для AI

Що зачіпає: blog.articles, pages.blocks, storefront.routing, seo

Правило рішення: Можна викликати без підтвердження, але запитуй лише потрібні дані й не роби зайвих змін.

Де можна помилитися
  • Блог ізольований магазином: ніколи не підставляй category/tag/article id з іншого магазину; API додатково перевіряє shop.
Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "query": {
      "type": "string",
      "description": "Пошук за текстовими полями."
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 100,
      "default": 20
    },
    "offset": {
      "type": "integer",
      "minimum": 0,
      "maximum": 1000000,
      "default": 0
    },
    "is_published": {
      "type": "boolean"
    },
    "category_id": {
      "type": "integer",
      "minimum": 1
    },
    "tag_id": {
      "type": "integer",
      "minimum": 1
    },
    "include_deleted": {
      "type": "boolean",
      "default": false
    }
  },
  "additionalProperties": false
}
Результат (data)
{
  "type": "object"
}
write Ризик: medium Підтвердження: recommended

blog.articles.media.delete — Видалити зображення статті

Що робить: Очищає лише вибране поле cover або og_image і видаляє його старий файл. Текст, блоки та інше зображення статті не змінюються.

ДоступwriteРизикmedium
ПідтвердженняrecommendedІдемпотентністьnot_needed
Потрібні модуліblog
Класи данихshop_internal
Наслідкиblog_article_media_deleted, media_file_deleted
Додатковий контекст для AI

Що зачіпає: blog.articles, pages.blocks, storefront.routing, seo

Правило рішення: Спочатку виконай preflight, покажи користувачу наслідок і віддай перевагу вузькому методу.

Де можна помилитися
  • Змінює live-стан магазину; результат і помилки записуються в AI-журнал.
  • Помилка може змінити поведінку магазину або дані; покажи очікуваний результат до запису.
  • Блог ізольований магазином: ніколи не підставляй category/tag/article id з іншого магазину; API додатково перевіряє shop.
Що перевірити перед викликом
  • blog.articles.get — Прочитай поточний стан і не перезаписуй поля, яких користувач не просив змінювати. (before_write)
Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "article_id": {
      "type": "integer",
      "minimum": 1
    },
    "target": {
      "type": "string",
      "enum": [
        "cover",
        "og_image"
      ]
    }
  },
  "additionalProperties": false,
  "required": [
    "article_id",
    "target"
  ]
}
Результат (data)
{
  "type": "object"
}
write Ризик: medium Підтвердження: recommended

blog.articles.media.set — Завантажити зображення статті

Що робить: Завантажує обкладинку cover або SEO-зображення og_image статті. Надішліть multipart/form-data: method, params_json, options_json і файл; назва файлового поля за замовчуванням file та може бути змінена параметром file_field.

ДоступwriteРизикmedium
ПідтвердженняrecommendedІдемпотентністьnot_needed
Потрібні модуліblog
Класи данихshop_internal
Наслідкиblog_article_media_changed, old_media_file_deleted
Додатковий контекст для AI

Що зачіпає: blog.articles, pages.blocks, storefront.routing, seo

Правило рішення: Спочатку виконай preflight, покажи користувачу наслідок і віддай перевагу вузькому методу.

Де можна помилитися
  • Змінює live-стан магазину; результат і помилки записуються в AI-журнал.
  • Помилка може змінити поведінку магазину або дані; покажи очікуваний результат до запису.
  • Блог ізольований магазином: ніколи не підставляй category/tag/article id з іншого магазину; API додатково перевіряє shop.
Що перевірити перед викликом
  • blog.articles.get — Прочитай поточний стан і не перезаписуй поля, яких користувач не просив змінювати. (before_write)
Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "article_id": {
      "type": "integer",
      "minimum": 1
    },
    "target": {
      "type": "string",
      "enum": [
        "cover",
        "og_image"
      ]
    },
    "file_field": {
      "type": "string",
      "default": "file"
    }
  },
  "additionalProperties": false,
  "required": [
    "article_id",
    "target"
  ]
}
Результат (data)
{
  "type": "object"
}
write Ризик: low

blog.articles.restore — Відновити статтю блогу

Що робить: Відновлює статтю, якщо її URL ще вільний. Окремо видалені блоки не відновлюються автоматично — для них використайте pages.blocks.restore.

ДоступwriteРизикlow
ПідтвердженняnoneІдемпотентністьnot_needed
Потрібні модуліblog
Класи данихshop_internal
Наслідкиblog_article_restored
Додатковий контекст для AI

Що зачіпає: blog.articles, pages.blocks, storefront.routing, seo

Правило рішення: Можна викликати без підтвердження, але запитуй лише потрібні дані й не роби зайвих змін.

Де можна помилитися
  • Змінює live-стан магазину; результат і помилки записуються в AI-журнал.
  • Блог ізольований магазином: ніколи не підставляй category/tag/article id з іншого магазину; API додатково перевіряє shop.
Що перевірити перед викликом
  • blog.articles.get — Прочитай поточний стан і не перезаписуй поля, яких користувач не просив змінювати. (before_write)
Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "article_id": {
      "type": "integer",
      "minimum": 1
    }
  },
  "additionalProperties": false,
  "required": [
    "article_id"
  ]
}
Результат (data)
{
  "type": "object"
}
write Ризик: medium Підтвердження: recommended

blog.articles.update — Оновити статтю блогу

Що робить: Частково оновлює метадані, SEO, категорію й теги статті; блоки не змінює. У multipart-запиті можна передати поля cover та og_image; для окремої роботи із зображеннями використовуйте blog.articles.media.set/delete.

ДоступwriteРизикmedium
ПідтвердженняrecommendedІдемпотентністьnot_needed
Потрібні модуліblog
Класи данихshop_internal
Наслідкиblog_article_changed, blog_url_may_change, seo_may_change
Додатковий контекст для AI

Що зачіпає: blog.articles, pages.blocks, storefront.routing, seo

Правило рішення: Спочатку виконай preflight, покажи користувачу наслідок і віддай перевагу вузькому методу.

Де можна помилитися
  • Змінює live-стан магазину; результат і помилки записуються в AI-журнал.
  • Помилка може змінити поведінку магазину або дані; покажи очікуваний результат до запису.
  • Блог ізольований магазином: ніколи не підставляй category/tag/article id з іншого магазину; API додатково перевіряє shop.
Що перевірити перед викликом
  • blog.articles.get — Прочитай поточний стан і не перезаписуй поля, яких користувач не просив змінювати. (before_write)
Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "article_id": {
      "type": "integer",
      "minimum": 1
    },
    "patch": {
      "type": "object",
      "description": "Частковий набір дозволених полів."
    },
    "translations": {
      "type": "object"
    }
  },
  "additionalProperties": false,
  "required": [
    "article_id",
    "patch"
  ]
}
Результат (data)
{
  "type": "object"
}
write Ризик: medium Підтвердження: recommended

blog.articles.visibility.set — Статус публікації статті

Що робить: Вузько перемикає boolean is_published: false лишає статтю чернеткою, true публікує зараз. Відкладеного статусу немає.

ДоступwriteРизикmedium
ПідтвердженняrecommendedІдемпотентністьnot_needed
Потрібні модуліblog
Класи данихshop_internal
Наслідкиblog_article_visibility_changed
Додатковий контекст для AI

Що зачіпає: blog.articles, pages.blocks, storefront.routing, seo

Правило рішення: Спочатку виконай preflight, покажи користувачу наслідок і віддай перевагу вузькому методу.

Де можна помилитися
  • Змінює live-стан магазину; результат і помилки записуються в AI-журнал.
  • Помилка може змінити поведінку магазину або дані; покажи очікуваний результат до запису.
  • Блог ізольований магазином: ніколи не підставляй category/tag/article id з іншого магазину; API додатково перевіряє shop.
Що перевірити перед викликом
  • blog.articles.get — Прочитай поточний стан і не перезаписуй поля, яких користувач не просив змінювати. (before_write)
Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "article_id": {
      "type": "integer",
      "minimum": 1
    },
    "is_published": {
      "type": "boolean"
    }
  },
  "additionalProperties": false,
  "required": [
    "article_id",
    "is_published"
  ]
}
Результат (data)
{
  "type": "object"
}

Категорії й теги (8)

write Ризик: low

blog.categories.create — Створити категорію блогу

Що робить: Створює shop-scoped категорію; URL автоматично унікалізується серед активних і видалених записів.

ДоступwriteРизикlow
ПідтвердженняnoneІдемпотентністьnot_needed
Потрібні модуліblog
Класи данихshop_internal
Наслідкиblog_category_created
Додатковий контекст для AI

Що зачіпає: blog.taxonomy, storefront.routing, seo

Правило рішення: Можна викликати без підтвердження, але запитуй лише потрібні дані й не роби зайвих змін.

Де можна помилитися
  • Змінює live-стан магазину; результат і помилки записуються в AI-журнал.
  • Блог ізольований магазином: ніколи не підставляй category/tag/article id з іншого магазину; API додатково перевіряє shop.
Що перевірити перед викликом
  • blog.categories.list — Прочитай поточний стан і не перезаписуй поля, яких користувач не просив змінювати. (before_write)
Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "title": {
      "type": "string"
    },
    "data": {
      "type": "object",
      "description": "Частковий набір дозволених полів."
    },
    "translations": {
      "type": "object"
    }
  },
  "additionalProperties": false,
  "required": [
    "title"
  ]
}
Результат (data)
{
  "type": "object"
}
write Ризик: high Підтвердження: required

blog.categories.delete — Видалити категорію блогу

Що робить: М'яко видаляє категорію; статті зберігаються і втрачають категорію лише після фінального очищення.

ДоступwriteРизикhigh
ПідтвердженняrequiredІдемпотентністьnot_needed
Потрібні модуліblog
Класи данихshop_internal
Наслідкиblog_category_soft_deleted
Додатковий контекст для AI

Що зачіпає: blog.taxonomy, storefront.routing, seo

Правило рішення: Отримай явне підтвердження конкретної дії безпосередньо перед викликом.

Де можна помилитися
  • Змінює live-стан магазину; результат і помилки записуються в AI-журнал.
  • Дію може бути складно або неможливо скасувати; потрібне підтвердження точної операції.
  • Блог ізольований магазином: ніколи не підставляй category/tag/article id з іншого магазину; API додатково перевіряє shop.
Що перевірити перед викликом
  • blog.categories.list — Прочитай поточний стан і не перезаписуй поля, яких користувач не просив змінювати. (before_write)
Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "category_id": {
      "type": "integer",
      "minimum": 1
    }
  },
  "additionalProperties": false,
  "required": [
    "category_id"
  ]
}
Результат (data)
{
  "type": "object"
}
read Ризик: low

blog.categories.list — Категорії блогу

Що робить: Повертає категорії лише поточного магазину.

ДоступreadРизикlow
ПідтвердженняnoneІдемпотентністьnot_needed
Потрібні модуліblog
Класи данихshop_internal
Наслідки—
Додатковий контекст для AI

Що зачіпає: blog.taxonomy, storefront.routing, seo

Правило рішення: Можна викликати без підтвердження, але запитуй лише потрібні дані й не роби зайвих змін.

Де можна помилитися
  • Блог ізольований магазином: ніколи не підставляй category/tag/article id з іншого магазину; API додатково перевіряє shop.
Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "query": {
      "type": "string",
      "description": "Пошук за текстовими полями."
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 100,
      "default": 20
    },
    "offset": {
      "type": "integer",
      "minimum": 0,
      "maximum": 1000000,
      "default": 0
    },
    "include_deleted": {
      "type": "boolean",
      "default": false
    }
  },
  "additionalProperties": false
}
Результат (data)
{
  "type": "object"
}
write Ризик: medium Підтвердження: recommended

blog.categories.update — Оновити категорію блогу

Що робить: Частково оновлює категорію поточного магазину.

ДоступwriteРизикmedium
ПідтвердженняrecommendedІдемпотентністьnot_needed
Потрібні модуліblog
Класи данихshop_internal
Наслідкиblog_category_changed, blog_urls_may_change
Додатковий контекст для AI

Що зачіпає: blog.taxonomy, storefront.routing, seo

Правило рішення: Спочатку виконай preflight, покажи користувачу наслідок і віддай перевагу вузькому методу.

Де можна помилитися
  • Змінює live-стан магазину; результат і помилки записуються в AI-журнал.
  • Помилка може змінити поведінку магазину або дані; покажи очікуваний результат до запису.
  • Блог ізольований магазином: ніколи не підставляй category/tag/article id з іншого магазину; API додатково перевіряє shop.
Що перевірити перед викликом
  • blog.categories.list — Прочитай поточний стан і не перезаписуй поля, яких користувач не просив змінювати. (before_write)
Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "category_id": {
      "type": "integer",
      "minimum": 1
    },
    "patch": {
      "type": "object",
      "description": "Частковий набір дозволених полів."
    },
    "translations": {
      "type": "object"
    }
  },
  "additionalProperties": false,
  "required": [
    "category_id",
    "patch"
  ]
}
Результат (data)
{
  "type": "object"
}
write Ризик: low

blog.tags.create — Створити тег блогу

Що робить: Створює shop-scoped тег; тег за замовчуванням noindex.

ДоступwriteРизикlow
ПідтвердженняnoneІдемпотентністьnot_needed
Потрібні модуліblog
Класи данихshop_internal
Наслідкиblog_tag_created
Додатковий контекст для AI

Що зачіпає: blog.taxonomy, storefront.routing, seo

Правило рішення: Можна викликати без підтвердження, але запитуй лише потрібні дані й не роби зайвих змін.

Де можна помилитися
  • Змінює live-стан магазину; результат і помилки записуються в AI-журнал.
  • Блог ізольований магазином: ніколи не підставляй category/tag/article id з іншого магазину; API додатково перевіряє shop.
Що перевірити перед викликом
  • blog.tags.list — Прочитай поточний стан і не перезаписуй поля, яких користувач не просив змінювати. (before_write)
Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "title": {
      "type": "string"
    },
    "data": {
      "type": "object",
      "description": "Частковий набір дозволених полів."
    },
    "translations": {
      "type": "object"
    }
  },
  "additionalProperties": false,
  "required": [
    "title"
  ]
}
Результат (data)
{
  "type": "object"
}
write Ризик: high Підтвердження: required

blog.tags.delete — Видалити тег блогу

Що робить: М'яко видаляє тег; статті не видаляються.

ДоступwriteРизикhigh
ПідтвердженняrequiredІдемпотентністьnot_needed
Потрібні модуліblog
Класи данихshop_internal
Наслідкиblog_tag_soft_deleted
Додатковий контекст для AI

Що зачіпає: blog.taxonomy, storefront.routing, seo

Правило рішення: Отримай явне підтвердження конкретної дії безпосередньо перед викликом.

Де можна помилитися
  • Змінює live-стан магазину; результат і помилки записуються в AI-журнал.
  • Дію може бути складно або неможливо скасувати; потрібне підтвердження точної операції.
  • Блог ізольований магазином: ніколи не підставляй category/tag/article id з іншого магазину; API додатково перевіряє shop.
Що перевірити перед викликом
  • blog.tags.list — Прочитай поточний стан і не перезаписуй поля, яких користувач не просив змінювати. (before_write)
Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "tag_id": {
      "type": "integer",
      "minimum": 1
    }
  },
  "additionalProperties": false,
  "required": [
    "tag_id"
  ]
}
Результат (data)
{
  "type": "object"
}
read Ризик: low

blog.tags.list — Теги блогу

Що робить: Повертає теги лише поточного магазину.

ДоступreadРизикlow
ПідтвердженняnoneІдемпотентністьnot_needed
Потрібні модуліblog
Класи данихshop_internal
Наслідки—
Додатковий контекст для AI

Що зачіпає: blog.taxonomy, storefront.routing, seo

Правило рішення: Можна викликати без підтвердження, але запитуй лише потрібні дані й не роби зайвих змін.

Де можна помилитися
  • Блог ізольований магазином: ніколи не підставляй category/tag/article id з іншого магазину; API додатково перевіряє shop.
Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "query": {
      "type": "string",
      "description": "Пошук за текстовими полями."
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 100,
      "default": 20
    },
    "offset": {
      "type": "integer",
      "minimum": 0,
      "maximum": 1000000,
      "default": 0
    },
    "include_deleted": {
      "type": "boolean",
      "default": false
    }
  },
  "additionalProperties": false
}
Результат (data)
{
  "type": "object"
}
write Ризик: medium Підтвердження: recommended

blog.tags.update — Оновити тег блогу

Що робить: Частково оновлює тег поточного магазину.

ДоступwriteРизикmedium
ПідтвердженняrecommendedІдемпотентністьnot_needed
Потрібні модуліblog
Класи данихshop_internal
Наслідкиblog_tag_changed, blog_urls_may_change
Додатковий контекст для AI

Що зачіпає: blog.taxonomy, storefront.routing, seo

Правило рішення: Спочатку виконай preflight, покажи користувачу наслідок і віддай перевагу вузькому методу.

Де можна помилитися
  • Змінює live-стан магазину; результат і помилки записуються в AI-журнал.
  • Помилка може змінити поведінку магазину або дані; покажи очікуваний результат до запису.
  • Блог ізольований магазином: ніколи не підставляй category/tag/article id з іншого магазину; API додатково перевіряє shop.
Що перевірити перед викликом
  • blog.tags.list — Прочитай поточний стан і не перезаписуй поля, яких користувач не просив змінювати. (before_write)
Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "tag_id": {
      "type": "integer",
      "minimum": 1
    },
    "patch": {
      "type": "object",
      "description": "Частковий набір дозволених полів."
    },
    "translations": {
      "type": "object"
    }
  },
  "additionalProperties": false,
  "required": [
    "tag_id",
    "patch"
  ]
}
Результат (data)
{
  "type": "object"
}

Налаштування блогу (4)

read Ризик: low

blog.settings.get — Налаштування блогу

Що робить: Повертає глобальні налаштування блогу. Модуль за замовчуванням вимкнений; власник вмикає його в налаштуваннях сайту. Єдиний запис налаштувань блогу з'являється там само, а у вкладці Блог лишається контент.

ДоступreadРизикlow
ПідтвердженняnoneІдемпотентністьnot_needed
Потрібні модуліblog
Класи данихshop_internal
Наслідки—
Додатковий контекст для AI

Що зачіпає: blog.settings, storefront.routing, seo

Правило рішення: Можна викликати без підтвердження, але запитуй лише потрібні дані й не роби зайвих змін.

Де можна помилитися
  • Блог ізольований магазином: ніколи не підставляй category/tag/article id з іншого магазину; API додатково перевіряє shop.
Вхідні дані (params)
{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}
Результат (data)
{
  "type": "object"
}
write Ризик: low

blog.settings.listing.update — Налаштувати список статей

Що робить: Вузький сумісний шлюз до властивостей блока blog_grid головної сторінки: pagination/infinite, сітка від 1x1 до 5x5, повна сітка або власна кількість статей у порції, показ фільтрів зверху чи в сайдбарі. Для повного керування включно з дизайном використовуйте pages.blocks.* з blog_settings_id.

ДоступwriteРизикlow
ПідтвердженняnoneІдемпотентністьsupported
Потрібні модуліblog
Класи данихshop_internal
Наслідкиblog_listing_changed
Додатковий контекст для AI

Що зачіпає: blog.settings, storefront.routing, seo

Правило рішення: Можна викликати без підтвердження, але запитуй лише потрібні дані й не роби зайвих змін.

Де можна помилитися
  • Змінює live-стан магазину; результат і помилки записуються в AI-журнал.
  • Блог ізольований магазином: ніколи не підставляй category/tag/article id з іншого магазину; API додатково перевіряє shop.
Що перевірити перед викликом
  • blog.settings.get — Прочитай поточний стан і не перезаписуй поля, яких користувач не просив змінювати. (before_write)
Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "listing_mode": {
      "type": "string",
      "enum": [
        "pagination",
        "infinite"
      ]
    },
    "grid_size": {
      "type": "string",
      "enum": [
        "1x1",
        "2x2",
        "3x3",
        "4x4",
        "5x5"
      ]
    },
    "article_count_mode": {
      "type": "string",
      "enum": [
        "full_grid",
        "custom"
      ]
    },
    "articles_count": {
      "type": "integer",
      "minimum": 1,
      "maximum": 100
    },
    "show_filters": {
      "type": "boolean"
    },
    "filters_position": {
      "type": "string",
      "enum": [
        "top",
        "sidebar"
      ]
    }
  },
  "additionalProperties": false
}
Результат (data)
{
  "type": "object"
}
write Ризик: medium Підтвердження: recommended

blog.settings.update — Оновити налаштування блогу

Що робить: Оновлює назву, опис, автора за замовчуванням і SEO блогу. Сітка, фільтри та спосіб завантаження є властивостями блока blog_grid і змінюються через pages.blocks.update або вузький blog.settings.listing.update.

ДоступwriteРизикmedium
ПідтвердженняrecommendedІдемпотентністьnot_needed
Потрібні модуліblog
Класи данихshop_internal
Наслідкиblog_listing_changed, seo_changed
Додатковий контекст для AI

Що зачіпає: blog.settings, storefront.routing, seo

Правило рішення: Спочатку виконай preflight, покажи користувачу наслідок і віддай перевагу вузькому методу.

Де можна помилитися
  • Змінює live-стан магазину; результат і помилки записуються в AI-журнал.
  • Помилка може змінити поведінку магазину або дані; покажи очікуваний результат до запису.
  • Блог ізольований магазином: ніколи не підставляй category/tag/article id з іншого магазину; API додатково перевіряє shop.
Що перевірити перед викликом
  • blog.settings.get — Прочитай поточний стан і не перезаписуй поля, яких користувач не просив змінювати. (before_write)
Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "patch": {
      "type": "object",
      "description": "Частковий набір дозволених полів."
    },
    "translations": {
      "type": "object"
    }
  },
  "additionalProperties": false,
  "required": [
    "patch"
  ]
}
Результат (data)
{
  "type": "object"
}
write Ризик: high Підтвердження: required

blog.settings.url_prefix.set — Змінити URL-частину блогу

Що робить: Змінює перший сегмент усіх публічних URL блогу для поточного магазину. Наприклад, blog на news змінює /blog/article/ на /news/article/. Старий префікс зберігається як 301 redirect alias; після зміни перевірте ручні посилання в меню.

ДоступwriteРизикhigh
ПідтвердженняrequiredІдемпотентністьsupported
Потрібні модуліblog
Класи данихshop_internal
Наслідкиall_blog_public_urls_changed, old_blog_prefix_redirect_added, seo_urls_changed, manual_navigation_links_may_need_update
Додатковий контекст для AI

Що зачіпає: blog.settings, storefront.routing, seo

Правило рішення: Отримай явне підтвердження конкретної дії безпосередньо перед викликом.

Де можна помилитися
  • Змінює live-стан магазину; результат і помилки записуються в AI-журнал.
  • Дію може бути складно або неможливо скасувати; потрібне підтвердження точної операції.
  • Блог ізольований магазином: ніколи не підставляй category/tag/article id з іншого магазину; API додатково перевіряє shop.
Що перевірити перед викликом
  • blog.settings.get — Прочитай поточний стан і не перезаписуй поля, яких користувач не просив змінювати. (before_write)
Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "url_prefix": {
      "type": "string",
      "maxLength": 80,
      "pattern": "^[a-z0-9]+(?:[-_][a-z0-9]+)*$",
      "description": "Один незарезервований URL-сегмент латиницею без слешів."
    }
  },
  "additionalProperties": false,
  "required": [
    "url_prefix"
  ]
}
Результат (data)
{
  "type": "object"
}

Налаштування (17)

Магазин (10)

read Ризик: low

settings.catalog.get — Налаштування каталогу

Що робить: Повертає чинні параметри показу дочірніх товарів і фільтрації варіацій.

ДоступreadРизикlow
ПідтвердженняnoneІдемпотентністьnot_needed
Потрібні модулі—
Класи данихshop_internal
Наслідки—
Додатковий контекст для AI

Що зачіпає: shop.settings

Правило рішення: Можна викликати без підтвердження, але запитуй лише потрібні дані й не роби зайвих змін.

Вхідні дані (params)
{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}
Результат (data)
{
  "type": "object"
}
write Ризик: medium Підтвердження: recommended

settings.catalog.update — Оновити налаштування каталогу

Що робить: Частково змінює два чинні каталожні тумблери через helper налаштувань.

ДоступwriteРизикmedium
ПідтвердженняrecommendedІдемпотентністьnot_needed
Потрібні модулі—
Класи данихshop_internal
Наслідкиcatalog_behavior_changed
Додатковий контекст для AI

Що зачіпає: shop.settings

Правило рішення: Спочатку виконай preflight, покажи користувачу наслідок і віддай перевагу вузькому методу.

Де можна помилитися
  • Змінює live-стан магазину; результат і помилки записуються в AI-журнал.
  • Помилка може змінити поведінку магазину або дані; покажи очікуваний результат до запису.
Що перевірити перед викликом
  • settings.catalog.get — Прочитай поточний стан і не перезаписуй поля, яких користувач не просив змінювати. (before_write)
Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "patch": {
      "type": "object",
      "description": "Частковий набір дозволених полів."
    }
  },
  "additionalProperties": false,
  "required": [
    "patch"
  ]
}
Результат (data)
{
  "type": "object"
}
write Ризик: dynamic Підтвердження: recommended

settings.company.update — Оновити реквізити компанії

Що робить: Частково оновлює назву, email, ЄДРПОУ, IBAN, додаткову інформацію та переклади. Ідентифікаційні й банківські дані потребують явного підтвердження.

ДоступwriteРизикdynamic
ПідтвердженняrecommendedІдемпотентністьnot_needed
Потрібні модулі—
Класи данихshop_internal, financial
Наслідкиlegal_or_contact_details_changed
Додатковий контекст для AI

Що зачіпає: shop.settings

Правило рішення: Оціни фактичні поля; для HTML, секретів, індексації чи широкої зміни отримай явне підтвердження.

Де можна помилитися
  • Змінює live-стан магазину; результат і помилки записуються в AI-журнал.
  • Ризик залежить від полів і контенту; перевір параметри та обери найвужчий метод.
  • Метод працює з чутливими класами даних: financial. Не передавай їх поза завданням.
Що перевірити перед викликом
  • settings.profile.get — Прочитай поточний стан і не перезаписуй поля, яких користувач не просив змінювати. (before_write)
Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "patch": {
      "type": "object",
      "description": "Частковий набір дозволених полів."
    },
    "translations": {
      "type": "object"
    }
  },
  "additionalProperties": false,
  "required": [
    "patch"
  ]
}
Результат (data)
{
  "type": "object"
}
write Ризик: high Підтвердження: required

settings.languages.base.set — Задати базову мову

Що робить: Змінює базову мову через чинний helper сторінки налаштувань і прибирає її з додаткових.

ДоступwriteРизикhigh
ПідтвердженняrequiredІдемпотентністьnot_needed
Потрібні модулі—
Класи данихshop_internal
Наслідкиpublic_url_language_policy_changed
Додатковий контекст для AI

Що зачіпає: shop.settings

Правило рішення: Отримай явне підтвердження конкретної дії безпосередньо перед викликом.

Де можна помилитися
  • Змінює live-стан магазину; результат і помилки записуються в AI-журнал.
  • Дію може бути складно або неможливо скасувати; потрібне підтвердження точної операції.
Що перевірити перед викликом
  • settings.languages.get — Прочитай поточний стан і не перезаписуй поля, яких користувач не просив змінювати. (before_write)
Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "code": {
      "type": "string"
    }
  },
  "additionalProperties": false,
  "required": [
    "code"
  ]
}
Результат (data)
{
  "type": "object"
}
write Ризик: medium Підтвердження: recommended

settings.languages.extra.set — Увімкнути додаткову мову

Що робить: Вмикає або вимикає додаткову мову через чинний helper налаштувань.

ДоступwriteРизикmedium
ПідтвердженняrecommendedІдемпотентністьnot_needed
Потрібні модулі—
Класи данихshop_internal
Наслідкиstore_languages_changed
Додатковий контекст для AI

Що зачіпає: shop.settings

Правило рішення: Спочатку виконай preflight, покажи користувачу наслідок і віддай перевагу вузькому методу.

Де можна помилитися
  • Змінює live-стан магазину; результат і помилки записуються в AI-журнал.
  • Помилка може змінити поведінку магазину або дані; покажи очікуваний результат до запису.
Що перевірити перед викликом
  • settings.languages.get — Прочитай поточний стан і не перезаписуй поля, яких користувач не просив змінювати. (before_write)
Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "code": {
      "type": "string"
    },
    "enabled": {
      "type": "boolean"
    }
  },
  "additionalProperties": false,
  "required": [
    "code",
    "enabled"
  ]
}
Результат (data)
{
  "type": "object"
}
read Ризик: low

settings.languages.get — Мови магазину

Що робить: Повертає базову, увімкнені й доступні мови магазину.

ДоступreadРизикlow
ПідтвердженняnoneІдемпотентністьnot_needed
Потрібні модулі—
Класи данихshop_internal
Наслідки—
Додатковий контекст для AI

Що зачіпає: shop.settings

Правило рішення: Можна викликати без підтвердження, але запитуй лише потрібні дані й не роби зайвих змін.

Вхідні дані (params)
{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}
Результат (data)
{
  "type": "object"
}
read Ризик: low

settings.modules.get — Стани модулів

Що робить: Повертає тумблери модулів і тарифні стани з чинного serializer налаштувань.

ДоступreadРизикlow
ПідтвердженняnoneІдемпотентністьnot_needed
Потрібні модулі—
Класи данихshop_internal
Наслідки—
Додатковий контекст для AI

Що зачіпає: shop.settings

Правило рішення: Можна викликати без підтвердження, але запитуй лише потрібні дані й не роби зайвих змін.

Вхідні дані (params)
{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}
Результат (data)
{
  "type": "object"
}
write Ризик: high Підтвердження: required

settings.modules.set — Увімкнути або вимкнути модуль

Що робить: Змінює один чинний module toggle через існуючу тарифну та складську перевірку. Вимкнення AI заблокує наступні виклики цього токена.

ДоступwriteРизикhigh
ПідтвердженняrequiredІдемпотентністьnot_needed
Потрібні модулі—
Класи данихshop_internal
Наслідкиmodule_access_changed, warehouse_reset_may_be_enqueued
Додатковий контекст для AI

Що зачіпає: shop.settings

Правило рішення: Отримай явне підтвердження конкретної дії безпосередньо перед викликом.

Де можна помилитися
  • Змінює live-стан магазину; результат і помилки записуються в AI-журнал.
  • Дію може бути складно або неможливо скасувати; потрібне підтвердження точної операції.
Що перевірити перед викликом
  • settings.modules.get — Прочитай поточний стан і не перезаписуй поля, яких користувач не просив змінювати. (before_write)
Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "module": {
      "type": "string",
      "enum": [
        "crm",
        "warehouse",
        "customer_account",
        "import_export",
        "ai_agent_api"
      ]
    },
    "enabled": {
      "type": "boolean"
    },
    "confirm_warehouse_reset": {
      "type": "boolean",
      "default": false
    }
  },
  "additionalProperties": false,
  "required": [
    "module",
    "enabled"
  ]
}
Результат (data)
{
  "type": "object"
}
read Ризик: low

settings.profile.get — Профіль налаштувань

Що робить: Повертає безпечний зріз базових, каталожних, модульних, мовних і компанійних налаштувань без паролів, токенів та секретів.

ДоступreadРизикlow
ПідтвердженняnoneІдемпотентністьnot_needed
Потрібні модулі—
Класи данихshop_internal
Наслідки—
Додатковий контекст для AI

Що зачіпає: shop.settings

Правило рішення: Можна викликати без підтвердження, але запитуй лише потрібні дані й не роби зайвих змін.

Вхідні дані (params)
{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}
Результат (data)
{
  "type": "object"
}
write Ризик: low

settings.site_name.update — Змінити назву сайту

Що робить: Змінює назву сайту через той самий валідатор поля, який використовує сторінка налаштувань.

ДоступwriteРизикlow
ПідтвердженняnoneІдемпотентністьnot_needed
Потрібні модулі—
Класи данихshop_internal
Наслідкиsite_identity_changed
Додатковий контекст для AI

Що зачіпає: shop.settings

Правило рішення: Можна викликати без підтвердження, але запитуй лише потрібні дані й не роби зайвих змін.

Де можна помилитися
  • Змінює live-стан магазину; результат і помилки записуються в AI-журнал.
Що перевірити перед викликом
  • settings.profile.get — Прочитай поточний стан і не перезаписуй поля, яких користувач не просив змінювати. (before_write)
Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "site_name": {
      "type": "string",
      "minLength": 1,
      "maxLength": 255
    }
  },
  "additionalProperties": false,
  "required": [
    "site_name"
  ]
}
Результат (data)
{
  "type": "object"
}

Домен (2)

read Ризик: medium

domain.settings.get — Налаштування домену

Що робить: Повертає домен, DNS/TLS-статус, очікувані IP, помилку перевірки та обов'язкове пояснення DNS propagation: навіть після status=active старий сайт може бути видимим на окремих пристроях до завершення TTL — після зміни DNS це може тривати до 48 годин.

ДоступreadРизикmedium
ПідтвердженняnoneІдемпотентністьnot_needed
Потрібні модулі—
Класи данихshop_internal, contact
Наслідки—
Додатковий контекст для AI

Що зачіпає: shop.domain, dns, tls, public_routing

Правило рішення: Спочатку виконай preflight, покажи користувачу наслідок і віддай перевагу вузькому методу.

Де можна помилитися
  • Помилка може змінити поведінку магазину або дані; покажи очікуваний результат до запису.
  • Метод працює з чутливими класами даних: contact. Не передавай їх поза завданням.
  • Зміна домену впливає на DNS, TLS-сертифікат, canonical URL та доступність storefront.
  • Навіть після status=active окремий пристрій або провайдер може до завершення DNS TTL — до 48 годин після зміни A-записів або DNS-серверів — показувати попередній сайт; це нормальне поширення DNS.
Що перевірити перед викликом
  • domain.settings.get — Перевір status, resolved_ips і dns_target_ips; окремо звір root та www, реєстрове NS-делегування, нові авторитетні DNS і кілька публічних резолверів. (before_reporting_domain_failure)
Безпечніший шлях
  • Спочатку збережи домен із connect_requested=false і перевір DNS-налаштування.
  • Якщо status=active і публічні DNS уже вказують на Hive, поясни TTL користувачу та дочекайся завершення кешу замість повторної конфігурації.
Вхідні дані (params)
{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}
Результат (data)
{
  "type": "object"
}
write Ризик: high Підтвердження: required

domain.settings.update — Оновити домен

Що робить: Частково змінює домен, email для Let's Encrypt і стан підключення через чинний save_domain_settings_from_user(); DNS/SSL обробляються наявним фоновим процесом. Після status=active агент має пояснити, що DNS-кеш окремих провайдерів або пристроїв може ще до 48 годин показувати попередній сайт.

ДоступwriteРизикhigh
ПідтвердженняrequiredІдемпотентністьsupported
Потрібні модулі—
Класи данихshop_internal, contact
Наслідкиpublic_domain_changed, dns_and_tls_workflow_changed, old_domain_runtime_may_be_cleaned
Додатковий контекст для AI

Що зачіпає: shop.domain, dns, tls, public_routing

Правило рішення: Отримай явне підтвердження конкретної дії безпосередньо перед викликом.

Де можна помилитися
  • Змінює live-стан магазину; результат і помилки записуються в AI-журнал.
  • Дію може бути складно або неможливо скасувати; потрібне підтвердження точної операції.
  • Метод працює з чутливими класами даних: contact. Не передавай їх поза завданням.
  • Зміна домену впливає на DNS, TLS-сертифікат, canonical URL та доступність storefront.
  • Навіть після status=active окремий пристрій або провайдер може до завершення DNS TTL — до 48 годин після зміни A-записів або DNS-серверів — показувати попередній сайт; це нормальне поширення DNS.
Що перевірити перед викликом
  • domain.settings.get — Прочитай поточний стан і не перезаписуй поля, яких користувач не просив змінювати. (before_write)
  • domain.settings.get — Перевір status, resolved_ips і dns_target_ips; окремо звір root та www, реєстрове NS-делегування, нові авторитетні DNS і кілька публічних резолверів. (before_reporting_domain_failure)
Безпечніший шлях
  • Спочатку збережи домен із connect_requested=false і перевір DNS-налаштування.
  • Якщо status=active і публічні DNS уже вказують на Hive, поясни TTL користувачу та дочекайся завершення кешу замість повторної конфігурації.
Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "domain": {
      "type": "string",
      "maxLength": 253
    },
    "certificate_email": {
      "type": "string",
      "maxLength": 254
    },
    "connect_requested": {
      "type": "boolean"
    }
  },
  "additionalProperties": false
}
Результат (data)
{
  "type": "object"
}

Дизайн (2)

read Ризик: low

design.theme.get — Дизайн теми

Що робить: Повертає активну тему, кольори, системні шрифти, ваги, розміри та власні font groups без бінарних даних.

ДоступreadРизикlow
ПідтвердженняnoneІдемпотентністьnot_needed
Потрібні модулі—
Класи данихshop_internal
Наслідки—
Додатковий контекст для AI

Що зачіпає: storefront.theme

Правило рішення: Можна викликати без підтвердження, але запитуй лише потрібні дані й не роби зайвих змін.

Вхідні дані (params)
{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}
Результат (data)
{
  "type": "object"
}
write Ризик: medium Підтвердження: recommended

design.theme.update — Оновити дизайн теми

Що робить: Частково змінює дозволені кольори, стандартні шрифти, ваги, розміри та radius через ThemeUserSettings.

ДоступwriteРизикmedium
ПідтвердженняrecommendedІдемпотентністьnot_needed
Потрібні модулі—
Класи данихshop_internal
Наслідкиsite_design_changed
Додатковий контекст для AI

Що зачіпає: storefront.theme

Правило рішення: Спочатку виконай preflight, покажи користувачу наслідок і віддай перевагу вузькому методу.

Де можна помилитися
  • Змінює live-стан магазину; результат і помилки записуються в AI-журнал.
  • Помилка може змінити поведінку магазину або дані; покажи очікуваний результат до запису.
Що перевірити перед викликом
  • design.theme.get — Прочитай поточний стан і не перезаписуй поля, яких користувач не просив змінювати. (before_write)
Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "patch": {
      "type": "object",
      "description": "Частковий набір дозволених полів."
    }
  },
  "additionalProperties": false,
  "required": [
    "patch"
  ]
}
Результат (data)
{
  "type": "object"
}

SEO (3)

read Ризик: low

seo.audit — SEO-аудит

Що робить: Викликає чинний build_seo_audit(shop): score, секції, лічильники та рекомендації.

ДоступreadРизикlow
ПідтвердженняnoneІдемпотентністьnot_needed
Потрібні модулі—
Класи данихshop_internal
Наслідки—
Додатковий контекст для AI

Що зачіпає: seo, search_indexing

Правило рішення: Можна викликати без підтвердження, але запитуй лише потрібні дані й не роби зайвих змін.

Вхідні дані (params)
{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}
Результат (data)
{
  "type": "object"
}
read Ризик: low

seo.settings.get — SEO-налаштування

Що робить: Повертає глобальні SEO-поля магазину та URL OG-зображення.

ДоступreadРизикlow
ПідтвердженняnoneІдемпотентністьnot_needed
Потрібні модулі—
Класи данихshop_internal
Наслідки—
Додатковий контекст для AI

Що зачіпає: seo, search_indexing

Правило рішення: Можна викликати без підтвердження, але запитуй лише потрібні дані й не роби зайвих змін.

Вхідні дані (params)
{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}
Результат (data)
{
  "type": "object"
}
write Ризик: dynamic Підтвердження: recommended

seo.settings.update — Оновити SEO

Що робить: Частково оновлює глобальні SEO-поля. Увімкнення або вимкнення індексації вимагає підтвердження.

ДоступwriteРизикdynamic
ПідтвердженняrecommendedІдемпотентністьnot_needed
Потрібні модулі—
Класи данихshop_internal
Наслідкиsearch_indexing_or_metadata_changed
Додатковий контекст для AI

Що зачіпає: seo, search_indexing

Правило рішення: Оціни фактичні поля; для HTML, секретів, індексації чи широкої зміни отримай явне підтвердження.

Де можна помилитися
  • Змінює live-стан магазину; результат і помилки записуються в AI-журнал.
  • Ризик залежить від полів і контенту; перевір параметри та обери найвужчий метод.
Що перевірити перед викликом
  • seo.settings.get — Прочитай поточний стан і не перезаписуй поля, яких користувач не просив змінювати. (before_write)
Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "patch": {
      "type": "object",
      "description": "Частковий набір дозволених полів."
    }
  },
  "additionalProperties": false,
  "required": [
    "patch"
  ]
}
Результат (data)
{
  "type": "object"
}

Продажі (33)

Замовлення (11)

write Ризик: high Підтвердження: required

orders.cancel — Скасувати замовлення

Що робить: Викликає Order.cancel_order(): скасовує замовлення і звільняє складський резерв; reason записується лише якщо передано author_user_id.

ДоступwriteРизикhigh
ПідтвердженняrequiredІдемпотентністьnot_needed
Потрібні модуліwarehouse
Класи данихshop_internal
Наслідкиstock_released, order_cancelled
Додатковий контекст для AI

Що зачіпає: orders, customers, stock

Правило рішення: Отримай явне підтвердження конкретної дії безпосередньо перед викликом.

Де можна помилитися
  • Змінює live-стан магазину; результат і помилки записуються в AI-журнал.
  • Дію може бути складно або неможливо скасувати; потрібне підтвердження точної операції.
Що перевірити перед викликом
  • orders.get — Прочитай поточний стан і не перезаписуй поля, яких користувач не просив змінювати. (before_write)
Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "order_id": {
      "type": "integer",
      "minimum": 1
    },
    "reason": {
      "type": "string"
    },
    "author_user_id": {
      "type": "integer",
      "minimum": 1
    }
  },
  "additionalProperties": false,
  "required": [
    "order_id"
  ]
}
Результат (data)
{
  "type": "object"
}
write Ризик: medium Підтвердження: recommended

orders.comment.add — Додати коментар до замовлення

Що робить: Додає внутрішній коментар від конкретного працівника магазину; автор задається явно, щоб журнал не приписував AI чужу особу.

ДоступwriteРизикmedium
ПідтвердженняrecommendedІдемпотентністьnot_needed
Потрібні модулі—
Класи данихcustomer_pii
Наслідкиorder_comment_created
Додатковий контекст для AI

Що зачіпає: orders, customers, stock

Правило рішення: Спочатку виконай preflight, покажи користувачу наслідок і віддай перевагу вузькому методу.

Де можна помилитися
  • Змінює live-стан магазину; результат і помилки записуються в AI-журнал.
  • Помилка може змінити поведінку магазину або дані; покажи очікуваний результат до запису.
  • Метод працює з чутливими класами даних: customer_pii. Не передавай їх поза завданням.
Що перевірити перед викликом
  • orders.get — Прочитай поточний стан і не перезаписуй поля, яких користувач не просив змінювати. (before_write)
Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "order_id": {
      "type": "integer",
      "minimum": 1
    },
    "author_user_id": {
      "type": "integer",
      "minimum": 1
    },
    "text": {
      "type": "string"
    }
  },
  "additionalProperties": false,
  "required": [
    "order_id",
    "author_user_id",
    "text"
  ]
}
Результат (data)
{
  "type": "object"
}
write Ризик: high Підтвердження: required

orders.confirm — Підтвердити замовлення

Що робить: Викликає Order.confirm_order(): підтверджує, резервує склад і ставить клієнтський email у чергу.

ДоступwriteРизикhigh
ПідтвердженняrequiredІдемпотентністьnot_needed
Потрібні модуліwarehouse
Класи данихshop_internal
Наслідкиstock_reserved, customer_email_enqueued
Додатковий контекст для AI

Що зачіпає: orders, customers, stock

Правило рішення: Отримай явне підтвердження конкретної дії безпосередньо перед викликом.

Де можна помилитися
  • Змінює live-стан магазину; результат і помилки записуються в AI-журнал.
  • Дію може бути складно або неможливо скасувати; потрібне підтвердження точної операції.
Що перевірити перед викликом
  • orders.get — Прочитай поточний стан і не перезаписуй поля, яких користувач не просив змінювати. (before_write)
Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "order_id": {
      "type": "integer",
      "minimum": 1
    }
  },
  "additionalProperties": false,
  "required": [
    "order_id"
  ]
}
Результат (data)
{
  "type": "object"
}
write Ризик: high Підтвердження: required

orders.documents.generate — Згенерувати документи

Що робить: Викликає чинний Order.prepare_docs() для рахунку та видаткової накладної.

ДоступwriteРизикhigh
ПідтвердженняrequiredІдемпотентністьnot_needed
Потрібні модулі—
Класи данихshop_internal
Наслідкиinvoice_and_waybill_generated
Додатковий контекст для AI

Що зачіпає: orders, customers, stock

Правило рішення: Отримай явне підтвердження конкретної дії безпосередньо перед викликом.

Де можна помилитися
  • Змінює live-стан магазину; результат і помилки записуються в AI-журнал.
  • Дію може бути складно або неможливо скасувати; потрібне підтвердження точної операції.
Що перевірити перед викликом
  • orders.get — Прочитай поточний стан і не перезаписуй поля, яких користувач не просив змінювати. (before_write)
Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "order_id": {
      "type": "integer",
      "minimum": 1
    }
  },
  "additionalProperties": false,
  "required": [
    "order_id"
  ]
}
Результат (data)
{
  "type": "object"
}
write Ризик: high Підтвердження: required

orders.documents.mark_sent — Позначити документи відправленими

Що робить: Викликає чинний Order.doc_send().

ДоступwriteРизикhigh
ПідтвердженняrequiredІдемпотентністьnot_needed
Потрібні модулі—
Класи данихshop_internal
Наслідкиdocument_state_changed
Додатковий контекст для AI

Що зачіпає: orders, customers, stock

Правило рішення: Отримай явне підтвердження конкретної дії безпосередньо перед викликом.

Де можна помилитися
  • Змінює live-стан магазину; результат і помилки записуються в AI-журнал.
  • Дію може бути складно або неможливо скасувати; потрібне підтвердження точної операції.
Що перевірити перед викликом
  • orders.get — Прочитай поточний стан і не перезаписуй поля, яких користувач не просив змінювати. (before_write)
Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "order_id": {
      "type": "integer",
      "minimum": 1
    }
  },
  "additionalProperties": false,
  "required": [
    "order_id"
  ]
}
Результат (data)
{
  "type": "object"
}
write Ризик: high Підтвердження: required

orders.fiscalization.mark — Позначити фіскалізованим

Що робить: Викликає Order.order_fiscalized(check_link) і ставить лист із чеком у чергу.

ДоступwriteРизикhigh
ПідтвердженняrequiredІдемпотентністьnot_needed
Потрібні модулі—
Класи данихshop_internal
Наслідкиfiscalization_state_changed, customer_email_enqueued
Додатковий контекст для AI

Що зачіпає: orders, customers, stock

Правило рішення: Отримай явне підтвердження конкретної дії безпосередньо перед викликом.

Де можна помилитися
  • Змінює live-стан магазину; результат і помилки записуються в AI-журнал.
  • Дію може бути складно або неможливо скасувати; потрібне підтвердження точної операції.
Що перевірити перед викликом
  • orders.get — Прочитай поточний стан і не перезаписуй поля, яких користувач не просив змінювати. (before_write)
Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "order_id": {
      "type": "integer",
      "minimum": 1
    },
    "check_link": {
      "type": "string"
    }
  },
  "additionalProperties": false,
  "required": [
    "order_id",
    "check_link"
  ]
}
Результат (data)
{
  "type": "object"
}
write Ризик: high Підтвердження: required

orders.fulfillment.pack — Позначити запакованим

Що робить: Викликає Order.order_pack() і ставить клієнтський email у чергу.

ДоступwriteРизикhigh
ПідтвердженняrequiredІдемпотентністьnot_needed
Потрібні модулі—
Класи данихshop_internal
Наслідкиpacking_state_changed, customer_email_enqueued
Додатковий контекст для AI

Що зачіпає: orders, customers, stock

Правило рішення: Отримай явне підтвердження конкретної дії безпосередньо перед викликом.

Де можна помилитися
  • Змінює live-стан магазину; результат і помилки записуються в AI-журнал.
  • Дію може бути складно або неможливо скасувати; потрібне підтвердження точної операції.
Що перевірити перед викликом
  • orders.get — Прочитай поточний стан і не перезаписуй поля, яких користувач не просив змінювати. (before_write)
Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "order_id": {
      "type": "integer",
      "minimum": 1
    }
  },
  "additionalProperties": false,
  "required": [
    "order_id"
  ]
}
Результат (data)
{
  "type": "object"
}
write Ризик: high Підтвердження: required

orders.fulfillment.ship — Позначити відправленим

Що робить: Викликає Order.order_send(ttn), синхронізує ТТН у чинній OrderDelivery і ставить email у чергу.

ДоступwriteРизикhigh
ПідтвердженняrequiredІдемпотентністьnot_needed
Потрібні модулі—
Класи данихshop_internal
Наслідкиshipping_state_changed, customer_email_enqueued
Додатковий контекст для AI

Що зачіпає: orders, customers, stock

Правило рішення: Отримай явне підтвердження конкретної дії безпосередньо перед викликом.

Де можна помилитися
  • Змінює live-стан магазину; результат і помилки записуються в AI-журнал.
  • Дію може бути складно або неможливо скасувати; потрібне підтвердження точної операції.
Що перевірити перед викликом
  • orders.get — Прочитай поточний стан і не перезаписуй поля, яких користувач не просив змінювати. (before_write)
Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "order_id": {
      "type": "integer",
      "minimum": 1
    },
    "ttn": {
      "type": "string"
    }
  },
  "additionalProperties": false,
  "required": [
    "order_id",
    "ttn"
  ]
}
Результат (data)
{
  "type": "object"
}
read Ризик: medium

orders.get — Дані замовлення

Що робить: Повертає повне замовлення: товари, суму, доставку, оплату, статуси, документи та внутрішні коментарі.

ДоступreadРизикmedium
ПідтвердженняnoneІдемпотентністьnot_needed
Потрібні модулі—
Класи данихcustomer_pii, financial
Наслідки—
Додатковий контекст для AI

Що зачіпає: orders, customers, stock

Правило рішення: Спочатку виконай preflight, покажи користувачу наслідок і віддай перевагу вузькому методу.

Де можна помилитися
  • Помилка може змінити поведінку магазину або дані; покажи очікуваний результат до запису.
  • Метод працює з чутливими класами даних: customer_pii, financial. Не передавай їх поза завданням.
Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "order_id": {
      "type": "integer",
      "minimum": 1
    }
  },
  "additionalProperties": false,
  "required": [
    "order_id"
  ]
}
Результат (data)
{
  "type": "object"
}
read Ризик: medium

orders.list — Список замовлень

Що робить: Повертає замовлення з пошуком, джерелом і окремими status-фільтрами; містить контактні дані клієнтів.

ДоступreadРизикmedium
ПідтвердженняnoneІдемпотентністьnot_needed
Потрібні модулі—
Класи данихcustomer_pii, financial
Наслідки—
Додатковий контекст для AI

Що зачіпає: orders, customers, stock

Правило рішення: Спочатку виконай preflight, покажи користувачу наслідок і віддай перевагу вузькому методу.

Де можна помилитися
  • Помилка може змінити поведінку магазину або дані; покажи очікуваний результат до запису.
  • Метод працює з чутливими класами даних: customer_pii, financial. Не передавай їх поза завданням.
Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "query": {
      "type": "string",
      "description": "Пошук за текстовими полями."
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 100,
      "default": 20
    },
    "offset": {
      "type": "integer",
      "minimum": 0,
      "maximum": 1000000,
      "default": 0
    },
    "source": {
      "type": "string"
    },
    "confirmed": {
      "type": "boolean"
    },
    "is_paid": {
      "type": "boolean"
    },
    "is_cansel": {
      "type": "boolean"
    },
    "is_sended": {
      "type": "boolean"
    }
  },
  "additionalProperties": false
}
Результат (data)
{
  "type": "object"
}
write Ризик: high Підтвердження: required

orders.payment.mark_paid — Позначити оплаченим

Що робить: Викликає Order.order_paid(): фіксує оплату, резервує склад і ставить email у чергу.

ДоступwriteРизикhigh
ПідтвердженняrequiredІдемпотентністьnot_needed
Потрібні модуліwarehouse
Класи данихshop_internal
Наслідкиpayment_state_changed, stock_reserved, customer_email_enqueued
Додатковий контекст для AI

Що зачіпає: orders, customers, stock

Правило рішення: Отримай явне підтвердження конкретної дії безпосередньо перед викликом.

Де можна помилитися
  • Змінює live-стан магазину; результат і помилки записуються в AI-журнал.
  • Дію може бути складно або неможливо скасувати; потрібне підтвердження точної операції.
Що перевірити перед викликом
  • orders.get — Прочитай поточний стан і не перезаписуй поля, яких користувач не просив змінювати. (before_write)
Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "order_id": {
      "type": "integer",
      "minimum": 1
    }
  },
  "additionalProperties": false,
  "required": [
    "order_id"
  ]
}
Результат (data)
{
  "type": "object"
}

Оплати (3)

read Ризик: medium

payments.settings.get — Налаштування методу оплати

Що робить: Повертає один платіжний провайдер і його безпечну конфігурацію; секрет показується лише як secret_configured. Для code=wayforpay поле integration містить custom_domain_ready, причину блокування без власного домену, чинний Service URL після підключення та повну послідовність налаштування.

ДоступreadРизикmedium
ПідтвердженняnoneІдемпотентністьnot_needed
Потрібні модулі—
Класи данихfinancial, shop_internal
Наслідки—
Додатковий контекст для AI

Що зачіпає: checkout.payments, payment_configuration

Правило рішення: Спочатку виконай preflight, покажи користувачу наслідок і віддай перевагу вузькому методу.

Де можна помилитися
  • Помилка може змінити поведінку магазину або дані; покажи очікуваний результат до запису.
  • Метод працює з чутливими класами даних: financial. Не передавай їх поза завданням.
  • Секрети приймаються лише як вхідні дані й ніколи не повертаються у відповіді або журналі.
  • Для code=wayforpay спочатку перевір integration.custom_domain_ready. Якщо false, confirmation_url=null: підключи власний домен і не використовуй технічний URL як Service URL.
  • Коли custom_domain_ready=true, обов'язково перенеси integration.confirmation_url у поле Service URL кабінету WayForPay; без callback Shopcore не підтвердить оплату.
  • WayForPay testMode=true передає ціну кожного товарного рядка і платної доставки як 1; перед production-активацією встанови false.
  • Після зміни активного домену confirmation_url зміниться — Service URL у кабінеті WayForPay також треба оновити.
Безпечніший шлях
  • Спочатку налаштуй метод вимкненим, перевір власний домен через domain.settings.get, прочитай payments.settings.get, перенеси Service URL, перевір тестову оплату й лише потім активуй.
Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "code": {
      "type": "string",
      "enum": [
        "wayforpay",
        "bank_personal",
        "bank_business",
        "cash"
      ]
    }
  },
  "additionalProperties": false,
  "required": [
    "code"
  ]
}
Результат (data)
{
  "type": "object"
}
read Ризик: medium

payments.settings.list — Налаштування оплат

Що робить: Повертає всі зареєстровані платіжні провайдери, checkout-представлення і стан налаштувань без secret_key. Для WayForPay також повертає custom_domain_ready і точний confirmation_url для поля Service URL лише після підключення власного домену, порядок налаштування, поведінку testMode і результат callback.

ДоступreadРизикmedium
ПідтвердженняnoneІдемпотентністьnot_needed
Потрібні модулі—
Класи данихfinancial, shop_internal
Наслідки—
Додатковий контекст для AI

Що зачіпає: checkout.payments, payment_configuration

Правило рішення: Спочатку виконай preflight, покажи користувачу наслідок і віддай перевагу вузькому методу.

Де можна помилитися
  • Помилка може змінити поведінку магазину або дані; покажи очікуваний результат до запису.
  • Метод працює з чутливими класами даних: financial. Не передавай їх поза завданням.
  • Секрети приймаються лише як вхідні дані й ніколи не повертаються у відповіді або журналі.
  • Для code=wayforpay спочатку перевір integration.custom_domain_ready. Якщо false, confirmation_url=null: підключи власний домен і не використовуй технічний URL як Service URL.
  • Коли custom_domain_ready=true, обов'язково перенеси integration.confirmation_url у поле Service URL кабінету WayForPay; без callback Shopcore не підтвердить оплату.
  • WayForPay testMode=true передає ціну кожного товарного рядка і платної доставки як 1; перед production-активацією встанови false.
  • Після зміни активного домену confirmation_url зміниться — Service URL у кабінеті WayForPay також треба оновити.
Безпечніший шлях
  • Спочатку налаштуй метод вимкненим, перевір власний домен через domain.settings.get, прочитай payments.settings.get, перенеси Service URL, перевір тестову оплату й лише потім активуй.
Вхідні дані (params)
{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}
Результат (data)
{
  "type": "object"
}
write Ризик: high Підтвердження: required

payments.settings.update — Оновити метод оплати

Що робить: Частково оновлює налаштування зареєстрованого платіжного provider через чинні моделі та full_clean(). secret_key можна передати для WayForPay, але він не повертається у відповіді або журналі. confirmation_url є обчислюваним read-only полем: його не передають у patch. Копіювати його з after.integration.confirmation_url до Service URL можна лише коли custom_domain_ready=true; технічний домен для production не використовують.

ДоступwriteРизикhigh
ПідтвердженняrequiredІдемпотентністьnot_needed
Потрібні модулі—
Класи данихfinancial, secret_input
Наслідкиcheckout_payment_options_changed, payment_credentials_may_change
Додатковий контекст для AI

Що зачіпає: checkout.payments, payment_configuration

Правило рішення: Отримай явне підтвердження конкретної дії безпосередньо перед викликом.

Де можна помилитися
  • Змінює live-стан магазину; результат і помилки записуються в AI-журнал.
  • Дію може бути складно або неможливо скасувати; потрібне підтвердження точної операції.
  • Метод працює з чутливими класами даних: financial, secret_input. Не передавай їх поза завданням.
  • Секрети приймаються лише як вхідні дані й ніколи не повертаються у відповіді або журналі.
  • Для code=wayforpay спочатку перевір integration.custom_domain_ready. Якщо false, confirmation_url=null: підключи власний домен і не використовуй технічний URL як Service URL.
  • Коли custom_domain_ready=true, обов'язково перенеси integration.confirmation_url у поле Service URL кабінету WayForPay; без callback Shopcore не підтвердить оплату.
  • WayForPay testMode=true передає ціну кожного товарного рядка і платної доставки як 1; перед production-активацією встанови false.
  • Після зміни активного домену confirmation_url зміниться — Service URL у кабінеті WayForPay також треба оновити.
  • Зміна впливає на варіанти оплати в checkout і може змінити платіжні реквізити.
Що перевірити перед викликом
  • payments.settings.get — Прочитай поточний стан і не перезаписуй поля, яких користувач не просив змінювати. (before_write)
Безпечніший шлях
  • Спочатку налаштуй метод вимкненим, перевір власний домен через domain.settings.get, прочитай payments.settings.get, перенеси Service URL, перевір тестову оплату й лише потім активуй.
Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "code": {
      "type": "string",
      "enum": [
        "wayforpay",
        "bank_personal",
        "bank_business",
        "cash"
      ]
    },
    "patch": {
      "type": "object",
      "description": "Частковий набір дозволених полів."
    },
    "translations": {
      "type": "object"
    }
  },
  "additionalProperties": false,
  "required": [
    "code",
    "patch"
  ]
}
Результат (data)
{
  "type": "object"
}

Клієнти (5)

read Ризик: medium

customers.get — Дані клієнта

Що робить: Повертає профіль користувача магазину й останні замовлення.

ДоступreadРизикmedium
ПідтвердженняnoneІдемпотентністьnot_needed
Потрібні модулі—
Класи данихcustomer_pii, financial
Наслідки—
Додатковий контекст для AI

Що зачіпає: customers

Правило рішення: Спочатку виконай preflight, покажи користувачу наслідок і віддай перевагу вузькому методу.

Де можна помилитися
  • Помилка може змінити поведінку магазину або дані; покажи очікуваний результат до запису.
  • Метод працює з чутливими класами даних: customer_pii, financial. Не передавай їх поза завданням.
Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "customer_id": {
      "type": "integer",
      "minimum": 1
    }
  },
  "additionalProperties": false,
  "required": [
    "customer_id"
  ]
}
Результат (data)
{
  "type": "object"
}
read Ризик: medium

customers.list — Список клієнтів і працівників

Що робить: Повертає користувачів магазину з ролями; потрібний, зокрема, для явного author_user_id у внутрішніх коментарях.

ДоступreadРизикmedium
ПідтвердженняnoneІдемпотентністьnot_needed
Потрібні модулі—
Класи данихcustomer_pii
Наслідки—
Додатковий контекст для AI

Що зачіпає: customers

Правило рішення: Спочатку виконай preflight, покажи користувачу наслідок і віддай перевагу вузькому методу.

Де можна помилитися
  • Помилка може змінити поведінку магазину або дані; покажи очікуваний результат до запису.
  • Метод працює з чутливими класами даних: customer_pii. Не передавай їх поза завданням.
Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "query": {
      "type": "string",
      "description": "Пошук за текстовими полями."
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 100,
      "default": 20
    },
    "offset": {
      "type": "integer",
      "minimum": 0,
      "maximum": 1000000,
      "default": 0
    },
    "role": {
      "type": "string",
      "enum": [
        "customer",
        "worker",
        "all"
      ]
    }
  },
  "additionalProperties": false
}
Результат (data)
{
  "type": "object"
}
write Ризик: high Підтвердження: required

customers.update — Оновити профіль клієнта

Що робить: Частково змінює контактні дані й активність профілю; паролі, права та ролі не доступні.

ДоступwriteРизикhigh
ПідтвердженняrequiredІдемпотентністьnot_needed
Потрібні модулі—
Класи данихcustomer_pii
Наслідкиcustomer_profile_changed
Додатковий контекст для AI

Що зачіпає: customers

Правило рішення: Отримай явне підтвердження конкретної дії безпосередньо перед викликом.

Де можна помилитися
  • Змінює live-стан магазину; результат і помилки записуються в AI-журнал.
  • Дію може бути складно або неможливо скасувати; потрібне підтвердження точної операції.
  • Метод працює з чутливими класами даних: customer_pii. Не передавай їх поза завданням.
Що перевірити перед викликом
  • customers.get — Прочитай поточний стан і не перезаписуй поля, яких користувач не просив змінювати. (before_write)
Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "customer_id": {
      "type": "integer",
      "minimum": 1
    },
    "patch": {
      "type": "object",
      "description": "Частковий набір дозволених полів."
    }
  },
  "additionalProperties": false,
  "required": [
    "customer_id",
    "patch"
  ]
}
Результат (data)
{
  "type": "object"
}
write Ризик: high Підтвердження: required

subscribers.delete — Видалити підписника

Що робить: Видаляє email із підписок магазину.

ДоступwriteРизикhigh
ПідтвердженняrequiredІдемпотентністьnot_needed
Потрібні модулі—
Класи данихcustomer_pii
Наслідкиsubscriber_deleted
Додатковий контекст для AI

Що зачіпає: customers

Правило рішення: Отримай явне підтвердження конкретної дії безпосередньо перед викликом.

Де можна помилитися
  • Змінює live-стан магазину; результат і помилки записуються в AI-журнал.
  • Дію може бути складно або неможливо скасувати; потрібне підтвердження точної операції.
  • Метод працює з чутливими класами даних: customer_pii. Не передавай їх поза завданням.
Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "subscriber_id": {
      "type": "integer",
      "minimum": 1
    }
  },
  "additionalProperties": false,
  "required": [
    "subscriber_id"
  ]
}
Результат (data)
{
  "type": "object"
}
read Ризик: medium

subscribers.list — Підписники розсилки

Що робить: Повертає email-підписників магазину.

ДоступreadРизикmedium
ПідтвердженняnoneІдемпотентністьnot_needed
Потрібні модулі—
Класи данихcustomer_pii
Наслідки—
Додатковий контекст для AI

Що зачіпає: customers

Правило рішення: Спочатку виконай preflight, покажи користувачу наслідок і віддай перевагу вузькому методу.

Де можна помилитися
  • Помилка може змінити поведінку магазину або дані; покажи очікуваний результат до запису.
  • Метод працює з чутливими класами даних: customer_pii. Не передавай їх поза завданням.
Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "query": {
      "type": "string",
      "description": "Пошук за текстовими полями."
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 100,
      "default": 20
    },
    "offset": {
      "type": "integer",
      "minimum": 0,
      "maximum": 1000000,
      "default": 0
    }
  },
  "additionalProperties": false
}
Результат (data)
{
  "type": "object"
}

Відгуки (6)

write Ризик: high Підтвердження: required

reviews.delete — Видалити відгук

Що робить: Безповоротно видаляє відгук і перераховує рейтинг товару. Для спаму й небажаних відгуків спершу розглянь reviews.moderate зі status=rejected: запис зникає з сайту, але лишається в історії.

ДоступwriteРизикhigh
ПідтвердженняrequiredІдемпотентністьnot_needed
Потрібні модулі—
Класи данихcustomer_pii
Наслідкиreview_deleted, product_rating_recalculated
Додатковий контекст для AI

Що зачіпає: reviews, product_rating

Правило рішення: Отримай явне підтвердження конкретної дії безпосередньо перед викликом.

Де можна помилитися
  • Змінює live-стан магазину; результат і помилки записуються в AI-журнал.
  • Дію може бути складно або неможливо скасувати; потрібне підтвердження точної операції.
  • Метод працює з чутливими класами даних: customer_pii. Не передавай їх поза завданням.
  • Містить персональні дані покупців (email): не розкривай їх без потреби й не передавай третім сторонам.
  • Зміна одразу впливає на те, що бачать покупці на сторінці товару.
Що перевірити перед викликом
  • reviews.get — Прочитай поточний стан і не перезаписуй поля, яких користувач не просив змінювати. (before_write)
Безпечніший шлях
  • Для спаму й небажаних записів використовуй статус rejected через reviews.moderate / questions.moderate замість видалення.
Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "review_id": {
      "type": "integer",
      "minimum": 1
    }
  },
  "additionalProperties": false,
  "required": [
    "review_id"
  ]
}
Результат (data)
{
  "type": "object"
}
read Ризик: medium

reviews.get — Дані відгуку

Що робить: Повертає один відгук магазину з повним текстом, статусом модерації, нотаткою модератора й даними підтвердженої покупки.

ДоступreadРизикmedium
ПідтвердженняnoneІдемпотентністьnot_needed
Потрібні модулі—
Класи данихcustomer_pii
Наслідки—
Додатковий контекст для AI

Що зачіпає: reviews, product_rating

Правило рішення: Спочатку виконай preflight, покажи користувачу наслідок і віддай перевагу вузькому методу.

Де можна помилитися
  • Помилка може змінити поведінку магазину або дані; покажи очікуваний результат до запису.
  • Метод працює з чутливими класами даних: customer_pii. Не передавай їх поза завданням.
  • Містить персональні дані покупців (email): не розкривай їх без потреби й не передавай третім сторонам.
Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "review_id": {
      "type": "integer",
      "minimum": 1
    }
  },
  "additionalProperties": false,
  "required": [
    "review_id"
  ]
}
Результат (data)
{
  "type": "object"
}
read Ризик: medium

reviews.list — Список відгуків

Що робить: Повертає відгуки магазину з фільтрами за статусом модерації (pending/published/rejected), товаром, оцінкою, підтвердженою покупкою й текстом. За замовчуванням спочатку ті, що чекають модерації. status_counts показує кількість за статусами з урахуванням інших фільтрів. Містить email авторів.

ДоступreadРизикmedium
ПідтвердженняnoneІдемпотентністьnot_needed
Потрібні модулі—
Класи данихcustomer_pii
Наслідки—
Додатковий контекст для AI

Що зачіпає: reviews, product_rating

Правило рішення: Спочатку виконай preflight, покажи користувачу наслідок і віддай перевагу вузькому методу.

Де можна помилитися
  • Помилка може змінити поведінку магазину або дані; покажи очікуваний результат до запису.
  • Метод працює з чутливими класами даних: customer_pii. Не передавай їх поза завданням.
  • Містить персональні дані покупців (email): не розкривай їх без потреби й не передавай третім сторонам.
Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "query": {
      "type": "string",
      "description": "Пошук за текстовими полями."
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 100,
      "default": 20
    },
    "offset": {
      "type": "integer",
      "minimum": 0,
      "maximum": 1000000,
      "default": 0
    },
    "status": {
      "type": "string",
      "enum": [
        "pending",
        "published",
        "rejected",
        "all"
      ],
      "default": "all"
    },
    "product_id": {
      "type": "integer",
      "minimum": 1
    },
    "rating": {
      "type": "integer",
      "minimum": 1,
      "maximum": 5
    },
    "verified_purchase": {
      "type": "boolean"
    }
  },
  "additionalProperties": false
}
Результат (data)
{
  "type": "object"
}
write Ризик: medium Підтвердження: recommended

reviews.moderate — Модерувати відгуки

Що робить: Змінює статус модерації одного або до 100 відгуків: published — показати на сайті й врахувати в рейтингу, rejected — приховати (запис лишається, спам краще відхиляти, а не видаляти), pending — повернути на перевірку. Рейтинг кожного зачепленого товару перераховується. note зберігається як внутрішня нотатка модератора.

ДоступwriteРизикmedium
ПідтвердженняrecommendedІдемпотентністьsupported
Потрібні модулі—
Класи данихcustomer_pii
Наслідкиreview_status_changed, storefront_reviews_changed, product_rating_recalculated
Додатковий контекст для AI

Що зачіпає: reviews, product_rating

Правило рішення: Спочатку виконай preflight, покажи користувачу наслідок і віддай перевагу вузькому методу.

Де можна помилитися
  • Змінює live-стан магазину; результат і помилки записуються в AI-журнал.
  • Помилка може змінити поведінку магазину або дані; покажи очікуваний результат до запису.
  • Метод працює з чутливими класами даних: customer_pii. Не передавай їх поза завданням.
  • Містить персональні дані покупців (email): не розкривай їх без потреби й не передавай третім сторонам.
  • Зміна одразу впливає на те, що бачать покупці на сторінці товару.
Що перевірити перед викликом
  • reviews.get — Прочитай поточний стан і не перезаписуй поля, яких користувач не просив змінювати. (before_write)
Безпечніший шлях
  • Для спаму й небажаних записів використовуй статус rejected через reviews.moderate / questions.moderate замість видалення.
Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "review_id": {
      "type": "integer",
      "minimum": 1
    },
    "review_ids": {
      "type": "array",
      "items": {
        "type": "integer",
        "minimum": 1
      },
      "minItems": 1,
      "maxItems": 100,
      "uniqueItems": true
    },
    "status": {
      "type": "string",
      "enum": [
        "pending",
        "published",
        "rejected"
      ]
    },
    "note": {
      "type": "string",
      "maxLength": 1000,
      "description": "Внутрішня нотатка модератора; покупцю не показується."
    }
  },
  "additionalProperties": false,
  "required": [
    "status"
  ]
}
Результат (data)
{
  "type": "object"
}
read Ризик: low

reviews.settings.get — Налаштування відгуків

Що робить: Повертає налаштування відгуків і питань магазину: головний вимикач reviews_enabled (без нього блок відгуків не рендериться, питання теж неактивні), хто може писати відгуки та питання, режим публікації (immediate/moderated) і чи увімкнено питання. effective показує, чи сайт зараз реально приймає відгуки й питання з урахуванням модуля «Кабінет користувача».

ДоступreadРизикlow
ПідтвердженняnoneІдемпотентністьnot_needed
Потрібні модулі—
Класи данихshop_internal
Наслідки—
Додатковий контекст для AI

Що зачіпає: reviews, product_rating

Правило рішення: Можна викликати без підтвердження, але запитуй лише потрібні дані й не роби зайвих змін.

Вхідні дані (params)
{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}
Результат (data)
{
  "type": "object"
}
write Ризик: medium Підтвердження: recommended

reviews.settings.update — Змінити налаштування відгуків

Що робить: Частково змінює налаштування відгуків і питань. Політики registered і purchased доступні лише з увімкненим модулем «Кабінет користувача». Зміна publication_mode діє лише на нові відгуки й питання; черга pending автоматично не публікується. reviews_enabled=false прибирає блок відгуків із сайту й зупиняє прийом відгуків і питань (опубліковані дані не видаляються).

ДоступwriteРизикmedium
ПідтвердженняrecommendedІдемпотентністьnot_needed
Потрібні модулі—
Класи данихshop_internal
Наслідкиstorefront_feedback_rules_changed
Додатковий контекст для AI

Що зачіпає: reviews, product_rating

Правило рішення: Спочатку виконай preflight, покажи користувачу наслідок і віддай перевагу вузькому методу.

Де можна помилитися
  • Змінює live-стан магазину; результат і помилки записуються в AI-журнал.
  • Помилка може змінити поведінку магазину або дані; покажи очікуваний результат до запису.
  • reviews_enabled=false прибирає блок відгуків із сайту й зупиняє прийом відгуків і питань.
  • Політики registered і purchased працюють лише з увімкненим модулем «Кабінет користувача».
Що перевірити перед викликом
  • reviews.settings.get — Прочитай поточний стан і не перезаписуй поля, яких користувач не просив змінювати. (before_write)
Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "reviews_enabled": {
      "type": "boolean"
    },
    "review_author_policy": {
      "type": "string",
      "enum": [
        "anyone",
        "registered",
        "purchased"
      ]
    },
    "questions_enabled": {
      "type": "boolean"
    },
    "question_author_policy": {
      "type": "string",
      "enum": [
        "anyone",
        "registered",
        "purchased"
      ]
    },
    "publication_mode": {
      "type": "string",
      "enum": [
        "immediate",
        "moderated"
      ]
    }
  },
  "additionalProperties": false
}
Результат (data)
{
  "type": "object"
}

Питання про товари (8)

write Ризик: high Підтвердження: required

questions.delete — Видалити питання

Що робить: Безповоротно видаляє питання разом з усією розмовою. Для спаму спершу розглянь questions.moderate зі status=rejected: питання зникне з сайту, але лишиться в історії.

ДоступwriteРизикhigh
ПідтвердженняrequiredІдемпотентністьnot_needed
Потрібні модулі—
Класи данихcustomer_pii
Наслідкиquestion_deleted, storefront_questions_changed
Додатковий контекст для AI

Що зачіпає: product_questions, storefront.product

Правило рішення: Отримай явне підтвердження конкретної дії безпосередньо перед викликом.

Де можна помилитися
  • Змінює live-стан магазину; результат і помилки записуються в AI-журнал.
  • Дію може бути складно або неможливо скасувати; потрібне підтвердження точної операції.
  • Метод працює з чутливими класами даних: customer_pii. Не передавай їх поза завданням.
  • Містить персональні дані покупців (email): не розкривай їх без потреби й не передавай третім сторонам.
  • Зміна одразу впливає на те, що бачать покупці на сторінці товару.
Що перевірити перед викликом
  • questions.get — Прочитай поточний стан і не перезаписуй поля, яких користувач не просив змінювати. (before_write)
Безпечніший шлях
  • Для спаму й небажаних записів використовуй статус rejected через reviews.moderate / questions.moderate замість видалення.
Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "question_id": {
      "type": "integer",
      "minimum": 1
    }
  },
  "additionalProperties": false,
  "required": [
    "question_id"
  ]
}
Результат (data)
{
  "type": "object"
}
read Ризик: medium

questions.get — Питання з розмовою

Що робить: Повертає питання разом з усією розмовою: повідомлення покупця й відповіді магазину з їхніми статусами модерації.

ДоступreadРизикmedium
ПідтвердженняnoneІдемпотентністьnot_needed
Потрібні модулі—
Класи данихcustomer_pii
Наслідки—
Додатковий контекст для AI

Що зачіпає: product_questions, storefront.product

Правило рішення: Спочатку виконай preflight, покажи користувачу наслідок і віддай перевагу вузькому методу.

Де можна помилитися
  • Помилка може змінити поведінку магазину або дані; покажи очікуваний результат до запису.
  • Метод працює з чутливими класами даних: customer_pii. Не передавай їх поза завданням.
  • Містить персональні дані покупців (email): не розкривай їх без потреби й не передавай третім сторонам.
Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "question_id": {
      "type": "integer",
      "minimum": 1
    }
  },
  "additionalProperties": false,
  "required": [
    "question_id"
  ]
}
Результат (data)
{
  "type": "object"
}
read Ризик: medium

questions.list — Список питань про товари

Що робить: Повертає питання покупців із фільтрами за статусом (pending/published/rejected/closed), товаром, наявністю відповіді магазину й текстом. Спочатку ті, що чекають модерації або мають нові повідомлення на перевірці. text — перше повідомлення, has_shop_answer і pending_messages допомагають знайти питання без відповіді. Містить email авторів.

ДоступreadРизикmedium
ПідтвердженняnoneІдемпотентністьnot_needed
Потрібні модулі—
Класи данихcustomer_pii
Наслідки—
Додатковий контекст для AI

Що зачіпає: product_questions, storefront.product

Правило рішення: Спочатку виконай preflight, покажи користувачу наслідок і віддай перевагу вузькому методу.

Де можна помилитися
  • Помилка може змінити поведінку магазину або дані; покажи очікуваний результат до запису.
  • Метод працює з чутливими класами даних: customer_pii. Не передавай їх поза завданням.
  • Містить персональні дані покупців (email): не розкривай їх без потреби й не передавай третім сторонам.
Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "query": {
      "type": "string",
      "description": "Пошук за текстовими полями."
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 100,
      "default": 20
    },
    "offset": {
      "type": "integer",
      "minimum": 0,
      "maximum": 1000000,
      "default": 0
    },
    "status": {
      "type": "string",
      "enum": [
        "pending",
        "published",
        "rejected",
        "closed",
        "all"
      ],
      "default": "all"
    },
    "product_id": {
      "type": "integer",
      "minimum": 1
    },
    "answered": {
      "type": "boolean",
      "description": "true — є відповідь магазину, false — ще немає."
    },
    "has_pending_messages": {
      "type": "boolean"
    }
  },
  "additionalProperties": false
}
Результат (data)
{
  "type": "object"
}
write Ризик: high Підтвердження: required

questions.messages.delete — Видалити повідомлення в питанні

Що робить: Безповоротно видаляє одне повідомлення з розмови (наприклад, помилкову відповідь магазину). Перше повідомлення — це саме питання, його видаляє questions.delete. Для спаму від покупця спершу розглянь questions.messages.moderate зі status=rejected.

ДоступwriteРизикhigh
ПідтвердженняrequiredІдемпотентністьnot_needed
Потрібні модулі—
Класи данихcustomer_pii
Наслідкиquestion_message_deleted, storefront_questions_changed
Додатковий контекст для AI

Що зачіпає: product_questions, storefront.product

Правило рішення: Отримай явне підтвердження конкретної дії безпосередньо перед викликом.

Де можна помилитися
  • Змінює live-стан магазину; результат і помилки записуються в AI-журнал.
  • Дію може бути складно або неможливо скасувати; потрібне підтвердження точної операції.
  • Метод працює з чутливими класами даних: customer_pii. Не передавай їх поза завданням.
  • Містить персональні дані покупців (email): не розкривай їх без потреби й не передавай третім сторонам.
  • Зміна одразу впливає на те, що бачать покупці на сторінці товару.
Що перевірити перед викликом
  • questions.get — Прочитай поточний стан і не перезаписуй поля, яких користувач не просив змінювати. (before_write)
Безпечніший шлях
  • Для спаму й небажаних записів використовуй статус rejected через reviews.moderate / questions.moderate замість видалення.
Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "message_id": {
      "type": "integer",
      "minimum": 1
    }
  },
  "additionalProperties": false,
  "required": [
    "message_id"
  ]
}
Результат (data)
{
  "type": "object"
}
write Ризик: medium Підтвердження: recommended

questions.messages.moderate — Модерувати повідомлення в питаннях

Що робить: Змінює статус окремих повідомлень у розмовах (до 100): published, rejected або pending. Перше повідомлення питання модерується разом із питанням через questions.moderate, тому тут воно не приймається.

ДоступwriteРизикmedium
ПідтвердженняrecommendedІдемпотентністьsupported
Потрібні модулі—
Класи данихcustomer_pii
Наслідкиquestion_message_status_changed, storefront_questions_changed
Додатковий контекст для AI

Що зачіпає: product_questions, storefront.product

Правило рішення: Спочатку виконай preflight, покажи користувачу наслідок і віддай перевагу вузькому методу.

Де можна помилитися
  • Змінює live-стан магазину; результат і помилки записуються в AI-журнал.
  • Помилка може змінити поведінку магазину або дані; покажи очікуваний результат до запису.
  • Метод працює з чутливими класами даних: customer_pii. Не передавай їх поза завданням.
  • Містить персональні дані покупців (email): не розкривай їх без потреби й не передавай третім сторонам.
  • Зміна одразу впливає на те, що бачать покупці на сторінці товару.
Що перевірити перед викликом
  • questions.get — Прочитай поточний стан і не перезаписуй поля, яких користувач не просив змінювати. (before_write)
Безпечніший шлях
  • Для спаму й небажаних записів використовуй статус rejected через reviews.moderate / questions.moderate замість видалення.
Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "message_id": {
      "type": "integer",
      "minimum": 1
    },
    "message_ids": {
      "type": "array",
      "items": {
        "type": "integer",
        "minimum": 1
      },
      "minItems": 1,
      "maxItems": 100,
      "uniqueItems": true
    },
    "status": {
      "type": "string",
      "enum": [
        "pending",
        "published",
        "rejected"
      ]
    }
  },
  "additionalProperties": false,
  "required": [
    "status"
  ]
}
Результат (data)
{
  "type": "object"
}
write Ризик: medium Підтвердження: recommended

questions.messages.update — Змінити відповідь магазину

Що робить: Змінює текст однієї відповіді магазину. Повідомлення покупців змінювати не можна — їх можна лише модерувати.

ДоступwriteРизикmedium
ПідтвердженняrecommendedІдемпотентністьnot_needed
Потрібні модулі—
Класи данихshop_internal
Наслідкиshop_answer_changed, storefront_questions_changed
Додатковий контекст для AI

Що зачіпає: product_questions, storefront.product

Правило рішення: Спочатку виконай preflight, покажи користувачу наслідок і віддай перевагу вузькому методу.

Де можна помилитися
  • Змінює live-стан магазину; результат і помилки записуються в AI-журнал.
  • Помилка може змінити поведінку магазину або дані; покажи очікуваний результат до запису.
  • Містить персональні дані покупців (email): не розкривай їх без потреби й не передавай третім сторонам.
  • Зміна одразу впливає на те, що бачать покупці на сторінці товару.
Що перевірити перед викликом
  • questions.get — Прочитай поточний стан і не перезаписуй поля, яких користувач не просив змінювати. (before_write)
Безпечніший шлях
  • Для спаму й небажаних записів використовуй статус rejected через reviews.moderate / questions.moderate замість видалення.
Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "message_id": {
      "type": "integer",
      "minimum": 1
    },
    "text": {
      "type": "string",
      "minLength": 1,
      "maxLength": 5000
    }
  },
  "additionalProperties": false,
  "required": [
    "message_id",
    "text"
  ]
}
Результат (data)
{
  "type": "object"
}
write Ризик: medium Підтвердження: recommended

questions.moderate — Модерувати питання

Що робить: Змінює статус одного або до 100 питань: published — показати на сторінці товару, rejected — приховати, pending — повернути на перевірку, closed — закрити розмову (питання лишається видимим, покупець більше не може писати). published і rejected застосовуються також до повідомлень покупця в цьому питанні, як у панелі модерації.

ДоступwriteРизикmedium
ПідтвердженняrecommendedІдемпотентністьsupported
Потрібні модулі—
Класи данихcustomer_pii
Наслідкиquestion_status_changed, storefront_questions_changed
Додатковий контекст для AI

Що зачіпає: product_questions, storefront.product

Правило рішення: Спочатку виконай preflight, покажи користувачу наслідок і віддай перевагу вузькому методу.

Де можна помилитися
  • Змінює live-стан магазину; результат і помилки записуються в AI-журнал.
  • Помилка може змінити поведінку магазину або дані; покажи очікуваний результат до запису.
  • Метод працює з чутливими класами даних: customer_pii. Не передавай їх поза завданням.
  • Містить персональні дані покупців (email): не розкривай їх без потреби й не передавай третім сторонам.
  • Зміна одразу впливає на те, що бачать покупці на сторінці товару.
Що перевірити перед викликом
  • questions.get — Прочитай поточний стан і не перезаписуй поля, яких користувач не просив змінювати. (before_write)
Безпечніший шлях
  • Для спаму й небажаних записів використовуй статус rejected через reviews.moderate / questions.moderate замість видалення.
Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "question_id": {
      "type": "integer",
      "minimum": 1
    },
    "question_ids": {
      "type": "array",
      "items": {
        "type": "integer",
        "minimum": 1
      },
      "minItems": 1,
      "maxItems": 100,
      "uniqueItems": true
    },
    "status": {
      "type": "string",
      "enum": [
        "pending",
        "published",
        "rejected",
        "closed"
      ]
    },
    "note": {
      "type": "string",
      "maxLength": 1000,
      "description": "Внутрішня нотатка модератора; покупцю не показується."
    }
  },
  "additionalProperties": false,
  "required": [
    "status"
  ]
}
Результат (data)
{
  "type": "object"
}
write Ризик: medium Підтвердження: recommended

questions.reply — Відповісти на питання

Що робить: Додає відповідь магазину в розмову; вона публікується одразу й видима на сторінці товару. Якщо питання ще чекає модерації, відповідь можлива лише з publish_question=true (питання й повідомлення покупця будуть опубліковані). close_after=true закриває розмову після відповіді. У закрите питання відповісти не можна.

ДоступwriteРизикmedium
ПідтвердженняrecommendedІдемпотентністьnot_needed
Потрібні модулі—
Класи данихcustomer_pii
Наслідкиshop_answer_published, storefront_questions_changed
Додатковий контекст для AI

Що зачіпає: product_questions, storefront.product

Правило рішення: Спочатку виконай preflight, покажи користувачу наслідок і віддай перевагу вузькому методу.

Де можна помилитися
  • Змінює live-стан магазину; результат і помилки записуються в AI-журнал.
  • Помилка може змінити поведінку магазину або дані; покажи очікуваний результат до запису.
  • Метод працює з чутливими класами даних: customer_pii. Не передавай їх поза завданням.
  • Містить персональні дані покупців (email): не розкривай їх без потреби й не передавай третім сторонам.
  • Зміна одразу впливає на те, що бачать покупці на сторінці товару.
  • Відповідь публікується одразу від імені магазину; перевір факти (наявність, ціну, терміни) перед відповіддю.
Що перевірити перед викликом
  • questions.get — Прочитай поточний стан і не перезаписуй поля, яких користувач не просив змінювати. (before_write)
Безпечніший шлях
  • Для спаму й небажаних записів використовуй статус rejected через reviews.moderate / questions.moderate замість видалення.
Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "question_id": {
      "type": "integer",
      "minimum": 1
    },
    "text": {
      "type": "string",
      "minLength": 1,
      "maxLength": 5000
    },
    "publish_question": {
      "type": "boolean",
      "default": false
    },
    "close_after": {
      "type": "boolean",
      "default": false
    }
  },
  "additionalProperties": false,
  "required": [
    "question_id",
    "text"
  ]
}
Результат (data)
{
  "type": "object"
}

Операції (49)

Склад (12)

read Ризик: medium

warehouse.history.report — Склад на дату

Що робить: Будує пагінований історичний звіт через чинний build_stock_history_page().

ДоступreadРизикmedium
ПідтвердженняnoneІдемпотентністьnot_needed
Потрібні модуліwarehouse
Класи данихfinancial
Наслідки—
Додатковий контекст для AI

Що зачіпає: warehouse, stock_movements

Правило рішення: Спочатку виконай preflight, покажи користувачу наслідок і віддай перевагу вузькому методу.

Де можна помилитися
  • Помилка може змінити поведінку магазину або дані; покажи очікуваний результат до запису.
  • Метод працює з чутливими класами даних: financial. Не передавай їх поза завданням.
Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "date": {
      "type": "string",
      "description": "ISO datetime"
    },
    "category_id": {
      "type": "integer",
      "minimum": 1
    },
    "query": {
      "type": "string"
    },
    "only_positive": {
      "type": "boolean",
      "default": true
    },
    "page": {
      "type": "integer",
      "minimum": 1
    },
    "per_page": {
      "type": "integer",
      "minimum": 1,
      "maximum": 200
    }
  },
  "additionalProperties": false,
  "required": [
    "date"
  ]
}
Результат (data)
{
  "type": "object"
}
read Ризик: medium

warehouse.movements.list — Рухи складу

Що робить: Повертає незмінюваний журнал складських рухів з фільтрами товару й типу.

ДоступreadРизикmedium
ПідтвердженняnoneІдемпотентністьnot_needed
Потрібні модуліwarehouse
Класи данихfinancial, shop_internal
Наслідки—
Додатковий контекст для AI

Що зачіпає: warehouse, stock_movements

Правило рішення: Спочатку виконай preflight, покажи користувачу наслідок і віддай перевагу вузькому методу.

Де можна помилитися
  • Помилка може змінити поведінку магазину або дані; покажи очікуваний результат до запису.
  • Метод працює з чутливими класами даних: financial. Не передавай їх поза завданням.
Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "query": {
      "type": "string",
      "description": "Пошук за текстовими полями."
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 100,
      "default": 20
    },
    "offset": {
      "type": "integer",
      "minimum": 0,
      "maximum": 1000000,
      "default": 0
    },
    "product_id": {
      "type": "integer",
      "minimum": 1
    },
    "movement_type": {
      "type": "string"
    }
  },
  "additionalProperties": false
}
Результат (data)
{
  "type": "object"
}
read Ризик: medium

warehouse.purchases.get — Дані закупівлі

Що робить: Повертає закупівлю та її товарні партії.

ДоступreadРизикmedium
ПідтвердженняnoneІдемпотентністьnot_needed
Потрібні модуліwarehouse
Класи данихfinancial
Наслідки—
Додатковий контекст для AI

Що зачіпає: warehouse, stock_movements

Правило рішення: Спочатку виконай preflight, покажи користувачу наслідок і віддай перевагу вузькому методу.

Де можна помилитися
  • Помилка може змінити поведінку магазину або дані; покажи очікуваний результат до запису.
  • Метод працює з чутливими класами даних: financial. Не передавай їх поза завданням.
Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "purchase_id": {
      "type": "integer",
      "minimum": 1
    }
  },
  "additionalProperties": false,
  "required": [
    "purchase_id"
  ]
}
Результат (data)
{
  "type": "object"
}
read Ризик: medium

warehouse.purchases.list — Список закупівель

Що робить: Повертає закупівлі, їх етап, суми та стан синхронізації.

ДоступreadРизикmedium
ПідтвердженняnoneІдемпотентністьnot_needed
Потрібні модуліwarehouse
Класи данихfinancial
Наслідки—
Додатковий контекст для AI

Що зачіпає: warehouse, stock_movements

Правило рішення: Спочатку виконай preflight, покажи користувачу наслідок і віддай перевагу вузькому методу.

Де можна помилитися
  • Помилка може змінити поведінку магазину або дані; покажи очікуваний результат до запису.
  • Метод працює з чутливими класами даних: financial. Не передавай їх поза завданням.
Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "query": {
      "type": "string",
      "description": "Пошук за текстовими полями."
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 100,
      "default": 20
    },
    "offset": {
      "type": "integer",
      "minimum": 0,
      "maximum": 1000000,
      "default": 0
    },
    "is_paid": {
      "type": "boolean"
    },
    "stage_id": {
      "type": "integer",
      "minimum": 1
    }
  },
  "additionalProperties": false
}
Результат (data)
{
  "type": "object"
}
write Ризик: high Підтвердження: required

warehouse.purchases.sync — Синхронізувати закупівлю

Що робить: Викликає чинний request_purchase_sync(); залежно від обсягу виконує роботу одразу або через Celery.

ДоступwriteРизикhigh
ПідтвердженняrequiredІдемпотентністьnot_needed
Потрібні модуліwarehouse
Класи данихfinancial
Наслідкиphysical_stock_rows_rebuilt, background_task_may_start
Додатковий контекст для AI

Що зачіпає: warehouse, stock_movements

Правило рішення: Отримай явне підтвердження конкретної дії безпосередньо перед викликом.

Де можна помилитися
  • Змінює live-стан магазину; результат і помилки записуються в AI-журнал.
  • Дію може бути складно або неможливо скасувати; потрібне підтвердження точної операції.
  • Метод працює з чутливими класами даних: financial. Не передавай їх поза завданням.
Що перевірити перед викликом
  • warehouse.purchases.get — Прочитай поточний стан і не перезаписуй поля, яких користувач не просив змінювати. (before_write)
Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "purchase_id": {
      "type": "integer",
      "minimum": 1
    }
  },
  "additionalProperties": false,
  "required": [
    "purchase_id"
  ]
}
Результат (data)
{
  "type": "object"
}
write Ризик: medium Підтвердження: recommended

warehouse.revisions.create — Створити ревізію

Що робить: Створює чернетку ревізії й рахує system_qty кожного рядка через available_stock_count().

ДоступwriteРизикmedium
ПідтвердженняrecommendedІдемпотентністьsupported
Потрібні модуліwarehouse
Класи данихshop_internal
Наслідкиstock_revision_draft_created
Додатковий контекст для AI

Що зачіпає: warehouse, stock_movements

Правило рішення: Спочатку виконай preflight, покажи користувачу наслідок і віддай перевагу вузькому методу.

Де можна помилитися
  • Змінює live-стан магазину; результат і помилки записуються в AI-журнал.
  • Помилка може змінити поведінку магазину або дані; покажи очікуваний результат до запису.
  • Проведення ревізії створює складські рухи та змінює фактичні залишки.
Що перевірити перед викликом
  • warehouse.revisions.list — Прочитай поточний стан і не перезаписуй поля, яких користувач не просив змінювати. (before_write)
  • warehouse.stock.list — Звір поточний точний залишок перед формуванням fact_qty. (before_revision_write)
Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "title": {
      "type": "string"
    },
    "comment": {
      "type": "string"
    },
    "items": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "product_id": {
            "type": "integer",
            "minimum": 1
          },
          "fact_qty": {
            "type": "integer",
            "minimum": 0
          },
          "comment": {
            "type": "string"
          }
        }
      }
    }
  },
  "additionalProperties": false,
  "required": [
    "items"
  ]
}
Результат (data)
{
  "type": "object"
}
read Ризик: low

warehouse.revisions.get — Дані ревізії

Що робить: Повертає ревізію і всі її товарні рядки.

ДоступreadРизикlow
ПідтвердженняnoneІдемпотентністьnot_needed
Потрібні модуліwarehouse
Класи данихshop_internal
Наслідки—
Додатковий контекст для AI

Що зачіпає: warehouse, stock_movements

Правило рішення: Можна викликати без підтвердження, але запитуй лише потрібні дані й не роби зайвих змін.

Де можна помилитися
  • Проведення ревізії створює складські рухи та змінює фактичні залишки.
Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "revision_id": {
      "type": "integer",
      "minimum": 1
    }
  },
  "additionalProperties": false,
  "required": [
    "revision_id"
  ]
}
Результат (data)
{
  "type": "object"
}
read Ризик: low

warehouse.revisions.list — Список ревізій

Що робить: Повертає складські ревізії та їх фоновий стан.

ДоступreadРизикlow
ПідтвердженняnoneІдемпотентністьnot_needed
Потрібні модуліwarehouse
Класи данихshop_internal
Наслідки—
Додатковий контекст для AI

Що зачіпає: warehouse, stock_movements

Правило рішення: Можна викликати без підтвердження, але запитуй лише потрібні дані й не роби зайвих змін.

Де можна помилитися
  • Проведення ревізії створює складські рухи та змінює фактичні залишки.
Що перевірити перед викликом
  • warehouse.stock.list — Звір поточний точний залишок перед формуванням fact_qty. (before_revision_write)
Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "query": {
      "type": "string",
      "description": "Пошук за текстовими полями."
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 100,
      "default": 20
    },
    "offset": {
      "type": "integer",
      "minimum": 0,
      "maximum": 1000000,
      "default": 0
    },
    "status": {
      "type": "string",
      "enum": [
        "draft",
        "posted"
      ]
    }
  },
  "additionalProperties": false
}
Результат (data)
{
  "type": "object"
}
write Ризик: high Підтвердження: required

warehouse.revisions.post — Провести ревізію

Що робить: Викликає чинний request_stock_revision_post(); операція може виконатися синхронно або перейти в Celery.

ДоступwriteРизикhigh
ПідтвердженняrequiredІдемпотентністьnot_needed
Потрібні модуліwarehouse
Класи данихshop_internal
Наслідкиstock_quantities_changed, stock_movements_created, background_task_may_start
Додатковий контекст для AI

Що зачіпає: warehouse, stock_movements

Правило рішення: Отримай явне підтвердження конкретної дії безпосередньо перед викликом.

Де можна помилитися
  • Змінює live-стан магазину; результат і помилки записуються в AI-журнал.
  • Дію може бути складно або неможливо скасувати; потрібне підтвердження точної операції.
  • Проведення ревізії створює складські рухи та змінює фактичні залишки.
Що перевірити перед викликом
  • warehouse.revisions.get — Прочитай поточний стан і не перезаписуй поля, яких користувач не просив змінювати. (before_write)
  • warehouse.stock.list — Звір поточний точний залишок перед формуванням fact_qty. (before_revision_write)
Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "revision_id": {
      "type": "integer",
      "minimum": 1
    },
    "author_user_id": {
      "type": "integer",
      "minimum": 1
    }
  },
  "additionalProperties": false,
  "required": [
    "revision_id",
    "author_user_id"
  ]
}
Результат (data)
{
  "type": "object"
}
write Ризик: high Підтвердження: required

warehouse.revisions.update — Оновити чернетку ревізії

Що робить: Замінює рядки лише чернетки ревізії та заново фіксує system_qty через наявний сервіс залишку.

ДоступwriteРизикhigh
ПідтвердженняrequiredІдемпотентністьsupported
Потрібні модуліwarehouse
Класи данихshop_internal
Наслідкиstock_revision_draft_replaced
Додатковий контекст для AI

Що зачіпає: warehouse, stock_movements

Правило рішення: Отримай явне підтвердження конкретної дії безпосередньо перед викликом.

Де можна помилитися
  • Змінює live-стан магазину; результат і помилки записуються в AI-журнал.
  • Дію може бути складно або неможливо скасувати; потрібне підтвердження точної операції.
  • Проведення ревізії створює складські рухи та змінює фактичні залишки.
Що перевірити перед викликом
  • warehouse.revisions.get — Прочитай поточний стан і не перезаписуй поля, яких користувач не просив змінювати. (before_write)
  • warehouse.stock.list — Звір поточний точний залишок перед формуванням fact_qty. (before_revision_write)
Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "revision_id": {
      "type": "integer",
      "minimum": 1
    },
    "title": {
      "type": "string"
    },
    "comment": {
      "type": "string"
    },
    "items": {
      "type": "array",
      "items": {
        "type": "object"
      }
    }
  },
  "additionalProperties": false,
  "required": [
    "revision_id",
    "items"
  ]
}
Результат (data)
{
  "type": "object"
}
read Ризик: low

warehouse.stock.list — Залишки товарів

Що робить: Повертає кешований залишок SKU та, за потреби, точний доступний залишок із чинного available_stock_count().

ДоступreadРизикlow
ПідтвердженняnoneІдемпотентністьnot_needed
Потрібні модуліwarehouse
Класи данихshop_internal
Наслідки—
Додатковий контекст для AI

Що зачіпає: warehouse, stock_movements

Правило рішення: Можна викликати без підтвердження, але запитуй лише потрібні дані й не роби зайвих змін.

Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "query": {
      "type": "string",
      "description": "Пошук за текстовими полями."
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 100,
      "default": 20
    },
    "offset": {
      "type": "integer",
      "minimum": 0,
      "maximum": 1000000,
      "default": 0
    },
    "only_positive": {
      "type": "boolean",
      "default": false
    },
    "exact": {
      "type": "boolean",
      "default": false
    }
  },
  "additionalProperties": false
}
Результат (data)
{
  "type": "object"
}
read Ризик: low

warehouse.summary — Огляд складу

Що робить: Повертає кількість SKU, доступних одиниць, чернеток ревізій і незавершених складських операцій.

ДоступreadРизикlow
ПідтвердженняnoneІдемпотентністьnot_needed
Потрібні модуліwarehouse
Класи данихshop_internal
Наслідки—
Додатковий контекст для AI

Що зачіпає: warehouse, stock_movements

Правило рішення: Можна викликати без підтвердження, але запитуй лише потрібні дані й не роби зайвих змін.

Вхідні дані (params)
{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}
Результат (data)
{
  "type": "object"
}

Доставка (7)

read Ризик: low

shipping.methods.list — Методи доставки

Що робить: Повертає публічні увімкнені методи та розраховану вартість. Для відсоткової ціни й порога передайте order_amount — суму товарів без доставки.

ДоступreadРизикlow
ПідтвердженняnoneІдемпотентністьnot_needed
Потрібні модулі—
Класи данихshop_internal
Наслідки—
Додатковий контекст для AI

Що зачіпає: checkout.shipping, shipping_configuration

Правило рішення: Можна викликати без підтвердження, але запитуй лише потрібні дані й не роби зайвих змін.

Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "order_amount": {
      "type": "number",
      "minimum": 0
    }
  },
  "additionalProperties": false
}
Результат (data)
{
  "type": "object"
}
read Ризик: low

Що робить: Викликає чинний cached search_cities() з обмеженням результатів.

ДоступreadРизикlow
ПідтвердженняnoneІдемпотентністьnot_needed
Потрібні модулі—
Класи данихshop_internal
Наслідки—
Додатковий контекст для AI

Що зачіпає: checkout.shipping, shipping_configuration

Правило рішення: Можна викликати без підтвердження, але запитуй лише потрібні дані й не роби зайвих змін.

Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "query": {
      "type": "string",
      "minLength": 2
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 100
    }
  },
  "additionalProperties": false,
  "required": [
    "query"
  ]
}
Результат (data)
{
  "type": "object"
}
read Ризик: low

shipping.nova_poshta.warehouses.list — Відділення Нової пошти

Що робить: Викликає чинний cached get_warehouses() за city_ref, settlement_ref або city_name.

ДоступreadРизикlow
ПідтвердженняnoneІдемпотентністьnot_needed
Потрібні модулі—
Класи данихshop_internal
Наслідки—
Додатковий контекст для AI

Що зачіпає: checkout.shipping, shipping_configuration

Правило рішення: Можна викликати без підтвердження, але запитуй лише потрібні дані й не роби зайвих змін.

Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "city_ref": {
      "type": "string"
    },
    "settlement_ref": {
      "type": "string"
    },
    "city_name": {
      "type": "string"
    },
    "query": {
      "type": "string"
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 1000
    }
  },
  "additionalProperties": false
}
Результат (data)
{
  "type": "object"
}
write Ризик: medium Підтвердження: recommended

shipping.settings.create — Створити метод доставки

Що робить: Створює ще один екземпляр courier, post або self_pickup лише в магазині токена. У patch можна передати is_paid, price_mode=fixed|order_percent, price_value і free_from_order_amount.

ДоступwriteРизикmedium
ПідтвердженняrecommendedІдемпотентністьsupported
Потрібні модулі—
Класи данихshop_internal
Наслідкиcheckout_shipping_option_created
Додатковий контекст для AI

Що зачіпає: checkout.shipping, shipping_configuration

Правило рішення: Спочатку виконай preflight, покажи користувачу наслідок і віддай перевагу вузькому методу.

Де можна помилитися
  • Змінює live-стан магазину; результат і помилки записуються в AI-журнал.
  • Помилка може змінити поведінку магазину або дані; покажи очікуваний результат до запису.
  • Зміна впливає на варіанти доставки та поля, які побачить покупець у checkout.
Що перевірити перед викликом
  • shipping.settings.list — Прочитай поточний стан і не перезаписуй поля, яких користувач не просив змінювати. (before_write)
Безпечніший шлях
  • Спочатку збережи метод вимкненим або перевір його поточний settings snapshot.
Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "provider_code": {
      "type": "string",
      "enum": [
        "courier",
        "post",
        "self_pickup"
      ]
    },
    "patch": {
      "type": "object",
      "description": "Частковий набір дозволених полів."
    },
    "translations": {
      "type": "object"
    }
  },
  "additionalProperties": false,
  "required": [
    "provider_code"
  ]
}
Результат (data)
{
  "type": "object"
}
write Ризик: high Підтвердження: required

shipping.settings.delete — Видалити метод доставки

Що робить: Видаляє конкретний courier, post або self_pickup за кодом provider:id. Старі замовлення зберігають snapshot назви й адреси.

ДоступwriteРизикhigh
ПідтвердженняrequiredІдемпотентністьnot_needed
Потрібні модулі—
Класи данихshop_internal
Наслідкиcheckout_shipping_option_deleted
Додатковий контекст для AI

Що зачіпає: checkout.shipping, shipping_configuration

Правило рішення: Отримай явне підтвердження конкретної дії безпосередньо перед викликом.

Де можна помилитися
  • Змінює live-стан магазину; результат і помилки записуються в AI-журнал.
  • Дію може бути складно або неможливо скасувати; потрібне підтвердження точної операції.
  • Зміна впливає на варіанти доставки та поля, які побачить покупець у checkout.
Що перевірити перед викликом
  • shipping.settings.get — Прочитай поточний стан і не перезаписуй поля, яких користувач не просив змінювати. (before_write)
Безпечніший шлях
  • Спочатку збережи метод вимкненим або перевір його поточний settings snapshot.
Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "code": {
      "type": "string"
    }
  },
  "additionalProperties": false,
  "required": [
    "code"
  ]
}
Результат (data)
{
  "type": "object"
}
read Ризик: low

shipping.settings.get — Налаштування доставки

Що робить: Повертає всі екземпляри методів доставки, їх публічні коди, поля checkout і переклади.

ДоступreadРизикlow
ПідтвердженняnoneІдемпотентністьnot_needed
Потрібні модулі—
Класи данихshop_internal
Наслідки—
Додатковий контекст для AI

Що зачіпає: checkout.shipping, shipping_configuration

Правило рішення: Можна викликати без підтвердження, але запитуй лише потрібні дані й не роби зайвих змін.

Де можна помилитися
  • Зміна впливає на варіанти доставки та поля, які побачить покупець у checkout.
Безпечніший шлях
  • Спочатку збережи метод вимкненим або перевір його поточний settings snapshot.
Вхідні дані (params)
{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}
Результат (data)
{
  "type": "object"
}
write Ризик: medium Підтвердження: recommended

shipping.settings.update — Оновити метод доставки

Що робить: Оновлює конкретний shop-scoped метод. Для courier, post і self_pickup передавай точний код виду provider:id; required_fields мають бути підмножиною show_fields. Платність задають is_paid, price_mode=fixed|order_percent, price_value та необов’язковий free_from_order_amount.

ДоступwriteРизикmedium
ПідтвердженняrecommendedІдемпотентністьnot_needed
Потрібні модулі—
Класи данихshop_internal
Наслідкиcheckout_shipping_options_changed, checkout_shipping_price_changed
Додатковий контекст для AI

Що зачіпає: checkout.shipping, shipping_configuration

Правило рішення: Спочатку виконай preflight, покажи користувачу наслідок і віддай перевагу вузькому методу.

Де можна помилитися
  • Змінює live-стан магазину; результат і помилки записуються в AI-журнал.
  • Помилка може змінити поведінку магазину або дані; покажи очікуваний результат до запису.
  • Зміна впливає на варіанти доставки та поля, які побачить покупець у checkout.
Що перевірити перед викликом
  • shipping.settings.get — Прочитай поточний стан і не перезаписуй поля, яких користувач не просив змінювати. (before_write)
Безпечніший шлях
  • Спочатку збережи метод вимкненим або перевір його поточний settings snapshot.
Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "code": {
      "type": "string"
    },
    "patch": {
      "type": "object",
      "description": "Частковий набір дозволених полів."
    },
    "translations": {
      "type": "object"
    }
  },
  "additionalProperties": false,
  "required": [
    "code",
    "patch"
  ]
}
Результат (data)
{
  "type": "object"
}

Імпорт та експорт (20)

read Ризик: medium

exchange.auto_import.get — Стан автоматичного імпорту

Що робить: Повертає активність, графік, політику дублікатів і managed_fields автоімпорту без повного source URL. Використовуй перед ручним оновленням товарів, щоб побачити, які поля може перетерти наступний запуск.

ДоступreadРизикmedium
ПідтвердженняnoneІдемпотентністьnot_needed
Потрібні модулі—
Класи данихshop_internal
Наслідки—
Додатковий контекст для AI

Що зачіпає: catalog.import_export, background_operations

Правило рішення: Спочатку виконай preflight, покажи користувачу наслідок і віддай перевагу вузькому методу.

Де можна помилитися
  • Помилка може змінити поведінку магазину або дані; покажи очікуваний результат до запису.
  • managed_fields — консервативний список полів, які наступний автоімпорт може оновити.
Вхідні дані (params)
{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}
Результат (data)
{
  "type": "object"
}
read Ризик: low

exchange.catalog — Можливості імпорту й експорту

Що робить: Повертає системні пресети, field registries, трансформації та marketplace providers із чинних registry-функцій.

ДоступreadРизикlow
ПідтвердженняnoneІдемпотентністьnot_needed
Потрібні модуліimport_export
Класи данихshop_internal
Наслідки—
Додатковий контекст для AI

Що зачіпає: catalog.import_export, background_operations

Правило рішення: Можна викликати без підтвердження, але запитуй лише потрібні дані й не роби зайвих змін.

Вхідні дані (params)
{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}
Результат (data)
{
  "type": "object"
}
write Ризик: medium Підтвердження: recommended

exchange.export_presets.create — Створити експортний пресет

Що робить: Створює пресет і колонки, перевіряючи поля та transforms чинними registry validators.

ДоступwriteРизикmedium
ПідтвердженняrecommendedІдемпотентністьsupported
Потрібні модуліimport_export
Класи данихshop_internal
Наслідкиexport_preset_created
Додатковий контекст для AI

Що зачіпає: catalog.import_export, background_operations

Правило рішення: Спочатку виконай preflight, покажи користувачу наслідок і віддай перевагу вузькому методу.

Де можна помилитися
  • Змінює live-стан магазину; результат і помилки записуються в AI-журнал.
  • Помилка може змінити поведінку магазину або дані; покажи очікуваний результат до запису.
Що перевірити перед викликом
  • exchange.export_presets.list — Прочитай поточний стан і не перезаписуй поля, яких користувач не просив змінювати. (before_write)
Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "data": {
      "type": "object",
      "description": "Частковий набір дозволених полів."
    },
    "columns": {
      "type": "array",
      "items": {
        "type": "object"
      }
    }
  },
  "additionalProperties": false,
  "required": [
    "data",
    "columns"
  ]
}
Результат (data)
{
  "type": "object"
}
write Ризик: high Підтвердження: required

exchange.export_presets.delete — Видалити експортний пресет

Що робить: Видаляє кастомний пресет, колонки й пов'язані data gateways каскадно.

ДоступwriteРизикhigh
ПідтвердженняrequiredІдемпотентністьnot_needed
Потрібні модуліimport_export
Класи данихshop_internal
Наслідкиexport_preset_and_gateways_deleted
Додатковий контекст для AI

Що зачіпає: catalog.import_export, background_operations

Правило рішення: Отримай явне підтвердження конкретної дії безпосередньо перед викликом.

Де можна помилитися
  • Змінює live-стан магазину; результат і помилки записуються в AI-журнал.
  • Дію може бути складно або неможливо скасувати; потрібне підтвердження точної операції.
Що перевірити перед викликом
  • exchange.export_presets.get — Прочитай поточний стан і не перезаписуй поля, яких користувач не просив змінювати. (before_write)
Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "preset_id": {
      "type": "integer",
      "minimum": 1
    }
  },
  "additionalProperties": false,
  "required": [
    "preset_id"
  ]
}
Результат (data)
{
  "type": "object"
}
read Ризик: low

exchange.export_presets.get — Дані експортного пресету

Що робить: Повертає кастомний експортний пресет і колонки через get_runtime_custom_preset().

ДоступreadРизикlow
ПідтвердженняnoneІдемпотентністьnot_needed
Потрібні модуліimport_export
Класи данихshop_internal
Наслідки—
Додатковий контекст для AI

Що зачіпає: catalog.import_export, background_operations

Правило рішення: Можна викликати без підтвердження, але запитуй лише потрібні дані й не роби зайвих змін.

Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "preset_id": {
      "type": "integer",
      "minimum": 1
    }
  },
  "additionalProperties": false,
  "required": [
    "preset_id"
  ]
}
Результат (data)
{
  "type": "object"
}
read Ризик: low

exchange.export_presets.list — Експортні пресети

Що робить: Повертає системні й кастомні експортні пресети через чинні serializers.

ДоступreadРизикlow
ПідтвердженняnoneІдемпотентністьnot_needed
Потрібні модуліimport_export
Класи данихshop_internal
Наслідки—
Додатковий контекст для AI

Що зачіпає: catalog.import_export, background_operations

Правило рішення: Можна викликати без підтвердження, але запитуй лише потрібні дані й не роби зайвих змін.

Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "query": {
      "type": "string",
      "description": "Пошук за текстовими полями."
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 100,
      "default": 20
    },
    "offset": {
      "type": "integer",
      "minimum": 0,
      "maximum": 1000000,
      "default": 0
    }
  },
  "additionalProperties": false
}
Результат (data)
{
  "type": "object"
}
write Ризик: medium Підтвердження: recommended

exchange.export_presets.update — Оновити експортний пресет

Що робить: Частково оновлює пресет і атомарно замінює колонки через чинні validators.

ДоступwriteРизикmedium
ПідтвердженняrecommendedІдемпотентністьnot_needed
Потрібні модуліimport_export
Класи данихshop_internal
Наслідкиexport_preset_changed
Додатковий контекст для AI

Що зачіпає: catalog.import_export, background_operations

Правило рішення: Спочатку виконай preflight, покажи користувачу наслідок і віддай перевагу вузькому методу.

Де можна помилитися
  • Змінює live-стан магазину; результат і помилки записуються в AI-журнал.
  • Помилка може змінити поведінку магазину або дані; покажи очікуваний результат до запису.
Що перевірити перед викликом
  • exchange.export_presets.get — Прочитай поточний стан і не перезаписуй поля, яких користувач не просив змінювати. (before_write)
Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "preset_id": {
      "type": "integer",
      "minimum": 1
    },
    "patch": {
      "type": "object",
      "description": "Частковий набір дозволених полів."
    },
    "columns": {
      "type": "array",
      "items": {
        "type": "object"
      }
    }
  },
  "additionalProperties": false,
  "required": [
    "preset_id",
    "patch",
    "columns"
  ]
}
Результат (data)
{
  "type": "object"
}
write Ризик: high Підтвердження: required

exchange.gateways.create — Створити data gateway

Що робить: Створює публічний gateway через DataGateway.clean() і необов'язковий IP allowlist.

ДоступwriteРизикhigh
ПідтвердженняrequiredІдемпотентністьnot_needed
Потрібні модуліimport_export
Класи данихshop_internal
Наслідкиpublic_export_endpoint_created
Додатковий контекст для AI

Що зачіпає: catalog.import_export, background_operations

Правило рішення: Отримай явне підтвердження конкретної дії безпосередньо перед викликом.

Де можна помилитися
  • Змінює live-стан магазину; результат і помилки записуються в AI-журнал.
  • Дію може бути складно або неможливо скасувати; потрібне підтвердження точної операції.
Що перевірити перед викликом
  • exchange.gateways.list — Прочитай поточний стан і не перезаписуй поля, яких користувач не просив змінювати. (before_write)
Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "data": {
      "type": "object",
      "description": "Частковий набір дозволених полів."
    },
    "allowed_ips": {
      "type": "array",
      "items": {
        "type": "string"
      }
    }
  },
  "additionalProperties": false,
  "required": [
    "data"
  ]
}
Результат (data)
{
  "type": "object"
}
write Ризик: high Підтвердження: required

exchange.gateways.delete — Видалити data gateway

Що робить: Видаляє публічний data gateway та IP allowlist.

ДоступwriteРизикhigh
ПідтвердженняrequiredІдемпотентністьnot_needed
Потрібні модуліimport_export
Класи данихshop_internal
Наслідкиpublic_export_endpoint_deleted
Додатковий контекст для AI

Що зачіпає: catalog.import_export, background_operations

Правило рішення: Отримай явне підтвердження конкретної дії безпосередньо перед викликом.

Де можна помилитися
  • Змінює live-стан магазину; результат і помилки записуються в AI-журнал.
  • Дію може бути складно або неможливо скасувати; потрібне підтвердження точної операції.
Що перевірити перед викликом
  • exchange.gateways.get — Прочитай поточний стан і не перезаписуй поля, яких користувач не просив змінювати. (before_write)
Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "gateway_id": {
      "type": "integer",
      "minimum": 1
    }
  },
  "additionalProperties": false,
  "required": [
    "gateway_id"
  ]
}
Результат (data)
{
  "type": "object"
}
read Ризик: low

exchange.gateways.get — Дані data gateway

Що робить: Повертає один публічний data gateway.

ДоступreadРизикlow
ПідтвердженняnoneІдемпотентністьnot_needed
Потрібні модуліimport_export
Класи данихshop_internal
Наслідки—
Додатковий контекст для AI

Що зачіпає: catalog.import_export, background_operations

Правило рішення: Можна викликати без підтвердження, але запитуй лише потрібні дані й не роби зайвих змін.

Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "gateway_id": {
      "type": "integer",
      "minimum": 1
    }
  },
  "additionalProperties": false,
  "required": [
    "gateway_id"
  ]
}
Результат (data)
{
  "type": "object"
}
read Ризик: low

exchange.gateways.list — Публічні data gateways

Що робить: Повертає публічні URL експорту, джерела пресетів і IP allowlist.

ДоступreadРизикlow
ПідтвердженняnoneІдемпотентністьnot_needed
Потрібні модуліimport_export
Класи данихshop_internal
Наслідки—
Додатковий контекст для AI

Що зачіпає: catalog.import_export, background_operations

Правило рішення: Можна викликати без підтвердження, але запитуй лише потрібні дані й не роби зайвих змін.

Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "query": {
      "type": "string",
      "description": "Пошук за текстовими полями."
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 100,
      "default": 20
    },
    "offset": {
      "type": "integer",
      "minimum": 0,
      "maximum": 1000000,
      "default": 0
    }
  },
  "additionalProperties": false
}
Результат (data)
{
  "type": "object"
}
write Ризик: high Підтвердження: required

exchange.gateways.update — Оновити data gateway

Що робить: Частково оновлює gateway і за потреби атомарно замінює IP allowlist.

ДоступwriteРизикhigh
ПідтвердженняrequiredІдемпотентністьnot_needed
Потрібні модуліimport_export
Класи данихshop_internal
Наслідкиpublic_export_endpoint_changed
Додатковий контекст для AI

Що зачіпає: catalog.import_export, background_operations

Правило рішення: Отримай явне підтвердження конкретної дії безпосередньо перед викликом.

Де можна помилитися
  • Змінює live-стан магазину; результат і помилки записуються в AI-журнал.
  • Дію може бути складно або неможливо скасувати; потрібне підтвердження точної операції.
Що перевірити перед викликом
  • exchange.gateways.get — Прочитай поточний стан і не перезаписуй поля, яких користувач не просив змінювати. (before_write)
Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "gateway_id": {
      "type": "integer",
      "minimum": 1
    },
    "patch": {
      "type": "object",
      "description": "Частковий набір дозволених полів."
    },
    "allowed_ips": {
      "type": "array",
      "items": {
        "type": "string"
      }
    }
  },
  "additionalProperties": false,
  "required": [
    "gateway_id",
    "patch"
  ]
}
Результат (data)
{
  "type": "object"
}
write Ризик: medium Підтвердження: recommended

exchange.import_presets.create — Створити імпортний пресет

Що робить: Створює імпортний пресет і колонки, перевіряючи target fields і transforms чинними registry validators.

ДоступwriteРизикmedium
ПідтвердженняrecommendedІдемпотентністьsupported
Потрібні модуліimport_export
Класи данихshop_internal
Наслідкиimport_preset_created
Додатковий контекст для AI

Що зачіпає: catalog.import_export, background_operations

Правило рішення: Спочатку виконай preflight, покажи користувачу наслідок і віддай перевагу вузькому методу.

Де можна помилитися
  • Змінює live-стан магазину; результат і помилки записуються в AI-журнал.
  • Помилка може змінити поведінку магазину або дані; покажи очікуваний результат до запису.
Що перевірити перед викликом
  • exchange.import_presets.list — Прочитай поточний стан і не перезаписуй поля, яких користувач не просив змінювати. (before_write)
Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "data": {
      "type": "object",
      "description": "Частковий набір дозволених полів."
    },
    "columns": {
      "type": "array",
      "items": {
        "type": "object"
      }
    }
  },
  "additionalProperties": false,
  "required": [
    "data",
    "columns"
  ]
}
Результат (data)
{
  "type": "object"
}
write Ризик: high Підтвердження: required

exchange.import_presets.delete — Видалити імпортний пресет

Що робить: Видаляє кастомний імпортний пресет і його колонки.

ДоступwriteРизикhigh
ПідтвердженняrequiredІдемпотентністьnot_needed
Потрібні модуліimport_export
Класи данихshop_internal
Наслідкиimport_preset_deleted
Додатковий контекст для AI

Що зачіпає: catalog.import_export, background_operations

Правило рішення: Отримай явне підтвердження конкретної дії безпосередньо перед викликом.

Де можна помилитися
  • Змінює live-стан магазину; результат і помилки записуються в AI-журнал.
  • Дію може бути складно або неможливо скасувати; потрібне підтвердження точної операції.
Що перевірити перед викликом
  • exchange.import_presets.get — Прочитай поточний стан і не перезаписуй поля, яких користувач не просив змінювати. (before_write)
Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "preset_id": {
      "type": "integer",
      "minimum": 1
    }
  },
  "additionalProperties": false,
  "required": [
    "preset_id"
  ]
}
Результат (data)
{
  "type": "object"
}
read Ризик: low

exchange.import_presets.get — Дані імпортного пресету

Що робить: Повертає кастомний імпортний пресет і колонки через get_runtime_custom_import_preset().

ДоступreadРизикlow
ПідтвердженняnoneІдемпотентністьnot_needed
Потрібні модуліimport_export
Класи данихshop_internal
Наслідки—
Додатковий контекст для AI

Що зачіпає: catalog.import_export, background_operations

Правило рішення: Можна викликати без підтвердження, але запитуй лише потрібні дані й не роби зайвих змін.

Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "preset_id": {
      "type": "integer",
      "minimum": 1
    }
  },
  "additionalProperties": false,
  "required": [
    "preset_id"
  ]
}
Результат (data)
{
  "type": "object"
}
read Ризик: low

exchange.import_presets.list — Імпортні пресети

Що робить: Повертає системні й кастомні імпортні пресети через чинний payload builder.

ДоступreadРизикlow
ПідтвердженняnoneІдемпотентністьnot_needed
Потрібні модуліimport_export
Класи данихshop_internal
Наслідки—
Додатковий контекст для AI

Що зачіпає: catalog.import_export, background_operations

Правило рішення: Можна викликати без підтвердження, але запитуй лише потрібні дані й не роби зайвих змін.

Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "query": {
      "type": "string",
      "description": "Пошук за текстовими полями."
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 100,
      "default": 20
    },
    "offset": {
      "type": "integer",
      "minimum": 0,
      "maximum": 1000000,
      "default": 0
    }
  },
  "additionalProperties": false
}
Результат (data)
{
  "type": "object"
}
write Ризик: medium Підтвердження: recommended

exchange.import_presets.update — Оновити імпортний пресет

Що робить: Частково оновлює пресет і атомарно замінює колонки через чинні validators.

ДоступwriteРизикmedium
ПідтвердженняrecommendedІдемпотентністьnot_needed
Потрібні модуліimport_export
Класи данихshop_internal
Наслідкиimport_preset_changed
Додатковий контекст для AI

Що зачіпає: catalog.import_export, background_operations

Правило рішення: Спочатку виконай preflight, покажи користувачу наслідок і віддай перевагу вузькому методу.

Де можна помилитися
  • Змінює live-стан магазину; результат і помилки записуються в AI-журнал.
  • Помилка може змінити поведінку магазину або дані; покажи очікуваний результат до запису.
Що перевірити перед викликом
  • exchange.import_presets.get — Прочитай поточний стан і не перезаписуй поля, яких користувач не просив змінювати. (before_write)
Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "preset_id": {
      "type": "integer",
      "minimum": 1
    },
    "patch": {
      "type": "object",
      "description": "Частковий набір дозволених полів."
    },
    "columns": {
      "type": "array",
      "items": {
        "type": "object"
      }
    }
  },
  "additionalProperties": false,
  "required": [
    "preset_id",
    "patch",
    "columns"
  ]
}
Результат (data)
{
  "type": "object"
}
write Ризик: high Підтвердження: required

exchange.operations.cancel — Скасувати операцію обміну

Що робить: Скасовує активну Celery-задачу, якщо вона є, і завершує операцію через чинний cancel_exchange_operation().

ДоступwriteРизикhigh
ПідтвердженняrequiredІдемпотентністьnot_needed
Потрібні модуліimport_export
Класи данихshop_internal
Наслідкиbackground_task_revoked, exchange_operation_cancelled
Додатковий контекст для AI

Що зачіпає: catalog.import_export, background_operations

Правило рішення: Отримай явне підтвердження конкретної дії безпосередньо перед викликом.

Де можна помилитися
  • Змінює live-стан магазину; результат і помилки записуються в AI-журнал.
  • Дію може бути складно або неможливо скасувати; потрібне підтвердження точної операції.
Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "operation_id": {
      "type": "integer",
      "minimum": 1
    }
  },
  "additionalProperties": false,
  "required": [
    "operation_id"
  ]
}
Результат (data)
{
  "type": "object"
}
read Ризик: low

exchange.operations.get — Дані операції обміну

Що робить: Повертає один статус імпорту/експорту та error_json.

ДоступreadРизикlow
ПідтвердженняnoneІдемпотентністьnot_needed
Потрібні модуліimport_export
Класи данихshop_internal
Наслідки—
Додатковий контекст для AI

Що зачіпає: catalog.import_export, background_operations

Правило рішення: Можна викликати без підтвердження, але запитуй лише потрібні дані й не роби зайвих змін.

Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "operation_id": {
      "type": "integer",
      "minimum": 1
    }
  },
  "additionalProperties": false,
  "required": [
    "operation_id"
  ]
}
Результат (data)
{
  "type": "object"
}
read Ризик: low

exchange.operations.list — Операції обміну

Що робить: Повертає історію імпорту/експорту через чинний serialize_operation().

ДоступreadРизикlow
ПідтвердженняnoneІдемпотентністьnot_needed
Потрібні модуліimport_export
Класи данихshop_internal
Наслідки—
Додатковий контекст для AI

Що зачіпає: catalog.import_export, background_operations

Правило рішення: Можна викликати без підтвердження, але запитуй лише потрібні дані й не роби зайвих змін.

Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "query": {
      "type": "string",
      "description": "Пошук за текстовими полями."
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 100,
      "default": 20
    },
    "offset": {
      "type": "integer",
      "minimum": 0,
      "maximum": 1000000,
      "default": 0
    },
    "status": {
      "type": "string"
    },
    "kind": {
      "type": "string"
    }
  },
  "additionalProperties": false
}
Результат (data)
{
  "type": "object"
}

Канали сповіщень (6)

write Ризик: high Підтвердження: required

notifications.channels.create — Створити канал

Що робить: Створює канал; provider.clean_config() викликається чинним model.clean(). Секрети приймаються, але не повертаються й редагуються в аудиті.

ДоступwriteРизикhigh
ПідтвердженняrequiredІдемпотентністьnot_needed
Потрібні модулі—
Класи данихshop_internal
Наслідкиnotification_channel_created
Додатковий контекст для AI

Що зачіпає: notifications, delivery_logs

Правило рішення: Отримай явне підтвердження конкретної дії безпосередньо перед викликом.

Де можна помилитися
  • Змінює live-стан магазину; результат і помилки записуються в AI-журнал.
  • Дію може бути складно або неможливо скасувати; потрібне підтвердження точної операції.
Що перевірити перед викликом
  • notifications.channels.list — Прочитай поточний стан і не перезаписуй поля, яких користувач не просив змінювати. (before_write)
Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "kind": {
      "type": "string"
    },
    "data": {
      "type": "object",
      "description": "Частковий набір дозволених полів."
    }
  },
  "additionalProperties": false,
  "required": [
    "kind",
    "data"
  ]
}
Результат (data)
{
  "type": "object"
}
write Ризик: high Підтвердження: required

notifications.channels.delete — Видалити канал

Що робить: Видаляє канал; delivery logs залишаються з channel=null.

ДоступwriteРизикhigh
ПідтвердженняrequiredІдемпотентністьnot_needed
Потрібні модулі—
Класи данихshop_internal
Наслідкиnotification_channel_deleted
Додатковий контекст для AI

Що зачіпає: notifications, delivery_logs

Правило рішення: Отримай явне підтвердження конкретної дії безпосередньо перед викликом.

Де можна помилитися
  • Змінює live-стан магазину; результат і помилки записуються в AI-журнал.
  • Дію може бути складно або неможливо скасувати; потрібне підтвердження точної операції.
Що перевірити перед викликом
  • notifications.channels.get — Прочитай поточний стан і не перезаписуй поля, яких користувач не просив змінювати. (before_write)
Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "kind": {
      "type": "string"
    },
    "channel_id": {
      "type": "integer",
      "minimum": 1
    }
  },
  "additionalProperties": false,
  "required": [
    "kind",
    "channel_id"
  ]
}
Результат (data)
{
  "type": "object"
}
read Ризик: medium

notifications.channels.get — Дані каналу

Що робить: Повертає один канал без секретних значень конфігурації.

ДоступreadРизикmedium
ПідтвердженняnoneІдемпотентністьnot_needed
Потрібні модулі—
Класи данихshop_internal
Наслідки—
Додатковий контекст для AI

Що зачіпає: notifications, delivery_logs

Правило рішення: Спочатку виконай preflight, покажи користувачу наслідок і віддай перевагу вузькому методу.

Де можна помилитися
  • Помилка може змінити поведінку магазину або дані; покажи очікуваний результат до запису.
Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "kind": {
      "type": "string"
    },
    "channel_id": {
      "type": "integer",
      "minimum": 1
    }
  },
  "additionalProperties": false,
  "required": [
    "kind",
    "channel_id"
  ]
}
Результат (data)
{
  "type": "object"
}
read Ризик: medium

notifications.channels.list — Канали сповіщень

Що робить: Повертає customer/form і merchant канали, schema провайдерів та ознаки налаштованих секретів без самих секретів.

ДоступreadРизикmedium
ПідтвердженняnoneІдемпотентністьnot_needed
Потрібні модулі—
Класи данихshop_internal
Наслідки—
Додатковий контекст для AI

Що зачіпає: notifications, delivery_logs

Правило рішення: Спочатку виконай preflight, покажи користувачу наслідок і віддай перевагу вузькому методу.

Де можна помилитися
  • Помилка може змінити поведінку магазину або дані; покажи очікуваний результат до запису.
Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "query": {
      "type": "string",
      "description": "Пошук за текстовими полями."
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 100,
      "default": 20
    },
    "offset": {
      "type": "integer",
      "minimum": 0,
      "maximum": 1000000,
      "default": 0
    },
    "kind": {
      "type": "string",
      "enum": [
        "form",
        "merchant"
      ]
    }
  },
  "additionalProperties": false
}
Результат (data)
{
  "type": "object"
}
write Ризик: high Підтвердження: required

notifications.channels.update — Оновити канал

Що робить: Частково оновлює канал; відсутні секретні поля зберігаються, передані — замінюються й не повертаються.

ДоступwriteРизикhigh
ПідтвердженняrequiredІдемпотентністьnot_needed
Потрібні модулі—
Класи данихshop_internal
Наслідкиnotification_channel_changed
Додатковий контекст для AI

Що зачіпає: notifications, delivery_logs

Правило рішення: Отримай явне підтвердження конкретної дії безпосередньо перед викликом.

Де можна помилитися
  • Змінює live-стан магазину; результат і помилки записуються в AI-журнал.
  • Дію може бути складно або неможливо скасувати; потрібне підтвердження точної операції.
Що перевірити перед викликом
  • notifications.channels.get — Прочитай поточний стан і не перезаписуй поля, яких користувач не просив змінювати. (before_write)
Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "kind": {
      "type": "string"
    },
    "channel_id": {
      "type": "integer",
      "minimum": 1
    },
    "patch": {
      "type": "object",
      "description": "Частковий набір дозволених полів."
    }
  },
  "additionalProperties": false,
  "required": [
    "kind",
    "channel_id",
    "patch"
  ]
}
Результат (data)
{
  "type": "object"
}
read Ризик: medium

notifications.delivery_logs.list — Журнал доставок

Що робить: Повертає журнали customer/form або merchant повідомлень без повного HTML та секретів.

ДоступreadРизикmedium
ПідтвердженняnoneІдемпотентністьnot_needed
Потрібні модулі—
Класи данихshop_internal
Наслідки—
Додатковий контекст для AI

Що зачіпає: notifications, delivery_logs

Правило рішення: Спочатку виконай preflight, покажи користувачу наслідок і віддай перевагу вузькому методу.

Де можна помилитися
  • Помилка може змінити поведінку магазину або дані; покажи очікуваний результат до запису.
Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "query": {
      "type": "string",
      "description": "Пошук за текстовими полями."
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 100,
      "default": 20
    },
    "offset": {
      "type": "integer",
      "minimum": 0,
      "maximum": 1000000,
      "default": 0
    },
    "kind": {
      "type": "string",
      "enum": [
        "form",
        "merchant"
      ]
    },
    "status": {
      "type": "string"
    }
  },
  "additionalProperties": false
}
Результат (data)
{
  "type": "object"
}

Редиректи (4)

write Ризик: medium Підтвердження: recommended

redirects.create — Створити редирект

Що робить: Створює правило base_path → target_url через чинну модель.

ДоступwriteРизикmedium
ПідтвердженняrecommendedІдемпотентністьnot_needed
Потрібні модулі—
Класи данихshop_internal
Наслідкиrouting_changed
Додатковий контекст для AI

Що зачіпає: storefront.routing

Правило рішення: Спочатку виконай preflight, покажи користувачу наслідок і віддай перевагу вузькому методу.

Де можна помилитися
  • Змінює live-стан магазину; результат і помилки записуються в AI-журнал.
  • Помилка може змінити поведінку магазину або дані; покажи очікуваний результат до запису.
Що перевірити перед викликом
  • redirects.list — Прочитай поточний стан і не перезаписуй поля, яких користувач не просив змінювати. (before_write)
Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "base_path": {
      "type": "string"
    },
    "target_url": {
      "type": "string"
    }
  },
  "additionalProperties": false,
  "required": [
    "base_path",
    "target_url"
  ]
}
Результат (data)
{
  "type": "object"
}
write Ризик: high Підтвердження: required

redirects.delete — Видалити редирект

Що робить: Видаляє правило редиректу.

ДоступwriteРизикhigh
ПідтвердженняrequiredІдемпотентністьnot_needed
Потрібні модулі—
Класи данихshop_internal
Наслідкиrouting_changed
Додатковий контекст для AI

Що зачіпає: storefront.routing

Правило рішення: Отримай явне підтвердження конкретної дії безпосередньо перед викликом.

Де можна помилитися
  • Змінює live-стан магазину; результат і помилки записуються в AI-журнал.
  • Дію може бути складно або неможливо скасувати; потрібне підтвердження точної операції.
Що перевірити перед викликом
  • redirects.list — Прочитай поточний стан і не перезаписуй поля, яких користувач не просив змінювати. (before_write)
Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "redirect_id": {
      "type": "integer",
      "minimum": 1
    }
  },
  "additionalProperties": false,
  "required": [
    "redirect_id"
  ]
}
Результат (data)
{
  "type": "object"
}
read Ризик: low

redirects.list — Список редиректів

Що робить: Повертає правила редиректів магазину.

ДоступreadРизикlow
ПідтвердженняnoneІдемпотентністьnot_needed
Потрібні модулі—
Класи данихshop_internal
Наслідки—
Додатковий контекст для AI

Що зачіпає: storefront.routing

Правило рішення: Можна викликати без підтвердження, але запитуй лише потрібні дані й не роби зайвих змін.

Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "query": {
      "type": "string",
      "description": "Пошук за текстовими полями."
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 100,
      "default": 20
    },
    "offset": {
      "type": "integer",
      "minimum": 0,
      "maximum": 1000000,
      "default": 0
    }
  },
  "additionalProperties": false
}
Результат (data)
{
  "type": "object"
}
write Ризик: medium Підтвердження: recommended

redirects.update — Оновити редирект

Що робить: Частково змінює source і target правила редиректу.

ДоступwriteРизикmedium
ПідтвердженняrecommendedІдемпотентністьnot_needed
Потрібні модулі—
Класи данихshop_internal
Наслідкиrouting_changed
Додатковий контекст для AI

Що зачіпає: storefront.routing

Правило рішення: Спочатку виконай preflight, покажи користувачу наслідок і віддай перевагу вузькому методу.

Де можна помилитися
  • Змінює live-стан магазину; результат і помилки записуються в AI-журнал.
  • Помилка може змінити поведінку магазину або дані; покажи очікуваний результат до запису.
Що перевірити перед викликом
  • redirects.list — Прочитай поточний стан і не перезаписуй поля, яких користувач не просив змінювати. (before_write)
Вхідні дані (params)
{
  "type": "object",
  "properties": {
    "redirect_id": {
      "type": "integer",
      "minimum": 1
    },
    "patch": {
      "type": "object",
      "description": "Частковий набір дозволених полів."
    }
  },
  "additionalProperties": false,
  "required": [
    "redirect_id",
    "patch"
  ]
}
Результат (data)
{
  "type": "object"
}