Як підключити AI-агента до магазину Shopcore
AI API Shopcore — це один шлюз до дозволених дій магазину. Агент не отримує доступу до Python, бази даних, файлової системи чи сервера: він бачить лише методи нижче та їхні параметри.
Для AI-агента: ця стаття пояснює архітектуру й правила. Перед роботою завжди отримай живий каталог через
GET /ai/v1/methods/. Не вигадуй назви методів або параметрів. Спочатку використовуй read-методи з низьким ризиком; для небезпечних дій отримай явне підтвердження власника.
Де взяти доступ
- В адмінці Hive відкрийте Налаштування сайту.
- Переконайтеся, що останній тумблер «API для AI-агентів» увімкнений.
- Відкрийте секцію «Доступ для 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-підміна справді необхідна:
- Через
pages.listзнайдіть header runtime-сторінку; не використовуйте зашитий page ID. - Додайте preloader на початку header, до скрипта, який змінює UI. Він має приховати лише нестабільну область або, коли підмін багато, коротко закрити сторінку нейтральною заставкою.
- Виконайте всі підміни одним раннім скриптом і зніміть preloader централізовано після завершення DOM-оновлень.
- Додайте гарантоване зняття при exception і timeout приблизно 3–5 секунд,
noscript-поведінку та доступний текст стану. Ані помилка, ані заблокований зовнішній ресурс не повинні залишити магазин закритим. - Перевірте hard reload із повільною мережею, мобільний viewport, сторінки каталогу/товару/кошика й відсутність стрибка layout після зняття заставки.
Рекомендований конвеєр перенесення магазину
- Discovery. Завантажте live manifest, викличте
system.overviewі перевірте доступність потрібних методів. Не копіюйте назви методів або schemas зі старого скрипта. - Preflight. Перевірте
exchange.auto_import.get, модулі, мови, склад, поточні категорії/товари,pages.list, блоки сторінок іpages.blocks.catalog. Конфлікт автоімпорту вирішіть до першого запису. - Інвентаризація джерела. До запису перевірте encoding, delimiter, обов'язкові поля, унікальність source ID/SKU, батьківські зв'язки, дублікати slug, ціни, порожні категорії, URL та типи медіа. Сформуйте звіт про проблемні рядки.
- Стабільне зіставлення. Основний ключ — незмінний source ID або SKU. Збережіть локальний mapping
source_id → shopcore_idпісля кожного успішного кроку. Нормалізована назва допустима лише як явно перевірений fallback без колізій. - Dry-run. Покажіть кількість create/update/skip/conflict, майбутні slug і категорії, варіаційні сім'ї, медіа та high-risk операції. На цьому етапі API-записи не виконуються.
- Staged write. Створюйте категорії й товари непублікованими; для update спочатку читайте об'єкт і передавайте
expected_updated_at. Не зашивайте page/category/block ID — один раз знайдіть їх за runtime context, slug або точним стабільним атрибутом і покладіть у mapping. - Зв'язки після сутностей. Варіації, фільтри, upsell та інші залежності задавайте лише коли всі потрібні ID вже відомі. Не покладайтеся на неявне успадкування: upsell прив'язується окремо до кожного точного товару/варіації.
- Медіа. Завантажуйте з обмеженою паралельністю, перевіряйте Content-Type/розмір, ведіть список помилок і retry з backoff для 429/5xx. Після timeout спочатку перечитайте галерею: не повторюйте можливий успішний upload наосліп.
- Storefront. Спочатку використовуйте стандартні blocks і їх schemas, зберігайте незмінені поля, а custom HTML/JS — лише як presentation layer. Для JS-підмін застосуйте правило preloader вище.
- Verify and publish. Звірте кількість і mapping, дублікати, ціни, категорії, варіації, upsell, картинки, SEO, сторінки та блоки; відкрийте ключові storefront URL. Публікуйте батьківські товари й сторінки тільки після успішної перевірки.
- Resume-safe result. Збережіть checkpoint, request IDs, створені/оновлені/пропущені записи й окремий список помилок без токена. Повторний запуск має продовжувати роботу, а не дублювати її.
Для великих переносів краще кілька контрольованих фаз і підсумок після кожної, ніж один довгий скрипт без checkpoint. Паралелити безпечно переважно читання та завантаження незалежних медіа; записи зі зв'язками й публікацію виконуйте у визначеному порядку.
Каталог методів: 204
Нижче — повний знімок каталогу для людей і агентів. Живий manifest має пріоритет, якщо версії відрізняються. catalog_version: 2026-09-18.2
Система (4)
Стан і можливості (2)
system.overview — Огляд даних магазину
Що робить: Дає компактні лічильники каталогу, сторінок, замовлень, клієнтів і журналу AI без завантаження самих записів.
| Доступ | read | Ризик | low |
|---|---|---|---|
| Підтвердження | none | Ідемпотентність | not_needed |
| Потрібні модулі | — | ||
| Класи даних | shop_internal | ||
| Наслідки | — | ||
Додатковий контекст для AI
Що зачіпає: shop.capabilities
Правило рішення: Можна викликати без підтвердження, але запитуй лише потрібні дані й не роби зайвих змін.
Вхідні дані (params)
{
"type": "object",
"properties": {},
"additionalProperties": false
}
Результат (data)
{
"type": "object"
}
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)
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"
}
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)
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"
}
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"
}
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"
}
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"
}
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)
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"
}
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"
}
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"
}
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"
}
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"
}
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"
}
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"
}
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"
}
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"
}
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"
}
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"
}
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"
}
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"
}
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"
}
catalog.products.update — Оновити товар
Що робить: Частково оновлює дозволені поля товару й переклади; бізнес-логіка save() для slug/SKU не дублюється.
| Доступ | 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"
}
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)
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"
}
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"
}
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"
}
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"
}
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"
}
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"
}
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"
}
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"
}
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"
}
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"
}
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"
}
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"
}
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"
}
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"
}
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"
}
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"
}
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"
}
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"
}
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)
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"
}
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"
}
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"
}
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"
}
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"
}
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"
}
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"
}
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"
}
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"
}
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"
}
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"
}
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)
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"
}
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"
}
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"
}
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"
}
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"
}
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"
}
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"
}
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"
}
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"
}
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)
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"
}
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"
}
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"
}
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"
}
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"
}
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"
}
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"
}
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"
}
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"
}
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"
}
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"
}
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"
}
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"
}
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"
}
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"
}
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"
}
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)
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"
}
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"
}
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"
}
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"
}
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"
}
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"
}
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"
}
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"
}
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"
}
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)
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"
}
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"
}
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"
}
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"
}
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"
}
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"
}
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"
}
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)
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"
}
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"
}
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"
}
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)
settings.catalog.get — Налаштування каталогу
Що робить: Повертає чинні параметри показу дочірніх товарів і фільтрації варіацій.
| Доступ | read | Ризик | low |
|---|---|---|---|
| Підтвердження | none | Ідемпотентність | not_needed |
| Потрібні модулі | — | ||
| Класи даних | shop_internal | ||
| Наслідки | — | ||
Додатковий контекст для AI
Що зачіпає: shop.settings
Правило рішення: Можна викликати без підтвердження, але запитуй лише потрібні дані й не роби зайвих змін.
Вхідні дані (params)
{
"type": "object",
"properties": {},
"additionalProperties": false
}
Результат (data)
{
"type": "object"
}
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"
}
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"
}
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"
}
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"
}
settings.languages.get — Мови магазину
Що робить: Повертає базову, увімкнені й доступні мови магазину.
| Доступ | read | Ризик | low |
|---|---|---|---|
| Підтвердження | none | Ідемпотентність | not_needed |
| Потрібні модулі | — | ||
| Класи даних | shop_internal | ||
| Наслідки | — | ||
Додатковий контекст для AI
Що зачіпає: shop.settings
Правило рішення: Можна викликати без підтвердження, але запитуй лише потрібні дані й не роби зайвих змін.
Вхідні дані (params)
{
"type": "object",
"properties": {},
"additionalProperties": false
}
Результат (data)
{
"type": "object"
}
settings.modules.get — Стани модулів
Що робить: Повертає тумблери модулів і тарифні стани з чинного serializer налаштувань.
| Доступ | read | Ризик | low |
|---|---|---|---|
| Підтвердження | none | Ідемпотентність | not_needed |
| Потрібні модулі | — | ||
| Класи даних | shop_internal | ||
| Наслідки | — | ||
Додатковий контекст для AI
Що зачіпає: shop.settings
Правило рішення: Можна викликати без підтвердження, але запитуй лише потрібні дані й не роби зайвих змін.
Вхідні дані (params)
{
"type": "object",
"properties": {},
"additionalProperties": false
}
Результат (data)
{
"type": "object"
}
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"
}
settings.profile.get — Профіль налаштувань
Що робить: Повертає безпечний зріз базових, каталожних, модульних, мовних і компанійних налаштувань без паролів, токенів та секретів.
| Доступ | read | Ризик | low |
|---|---|---|---|
| Підтвердження | none | Ідемпотентність | not_needed |
| Потрібні модулі | — | ||
| Класи даних | shop_internal | ||
| Наслідки | — | ||
Додатковий контекст для AI
Що зачіпає: shop.settings
Правило рішення: Можна викликати без підтвердження, але запитуй лише потрібні дані й не роби зайвих змін.
Вхідні дані (params)
{
"type": "object",
"properties": {},
"additionalProperties": false
}
Результат (data)
{
"type": "object"
}
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)
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"
}
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)
design.theme.get — Дизайн теми
Що робить: Повертає активну тему, кольори, системні шрифти, ваги, розміри та власні font groups без бінарних даних.
| Доступ | read | Ризик | low |
|---|---|---|---|
| Підтвердження | none | Ідемпотентність | not_needed |
| Потрібні модулі | — | ||
| Класи даних | shop_internal | ||
| Наслідки | — | ||
Додатковий контекст для AI
Що зачіпає: storefront.theme
Правило рішення: Можна викликати без підтвердження, але запитуй лише потрібні дані й не роби зайвих змін.
Вхідні дані (params)
{
"type": "object",
"properties": {},
"additionalProperties": false
}
Результат (data)
{
"type": "object"
}
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)
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"
}
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"
}
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)
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"
}
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"
}
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"
}
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"
}
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"
}
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"
}
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"
}
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"
}
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"
}
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"
}
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)
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"
}
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"
}
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)
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"
}
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"
}
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"
}
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"
}
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)
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"
}
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"
}
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"
}
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"
}
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"
}
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)
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"
}
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"
}
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"
}
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"
}
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"
}
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"
}
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"
}
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)
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"
}
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"
}
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"
}
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"
}
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"
}
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"
}
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"
}
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"
}
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"
}
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"
}
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"
}
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)
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"
}
shipping.nova_poshta.cities.search — Пошук міст Нової пошти
Що робить: Викликає чинний 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"
}
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"
}
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"
}
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"
}
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"
}
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)
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"
}
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"
}
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"
}
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"
}
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"
}
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"
}
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"
}
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"
}
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"
}
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"
}
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"
}
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"
}
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"
}
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"
}
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"
}
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"
}
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"
}
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"
}
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"
}
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)
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"
}
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"
}
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"
}
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"
}
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"
}
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)
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"
}
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"
}
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"
}
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"
}