API каталога2026-11Предпросмотр
Правила синхронизации
Что происходит с вашей карточкой, когда продавец в Китае меняет цену или у него заканчивается товар.
- Мы заново читаем карточку, когда на неё приходит заказ, и по регулярному графику; last_checked_at каждого товара показывает, когда мы делали это последний раз. Синхронизация товаров бесплатна.
- Каждое изменение, на которое мы реагируем, — это ещё и событие: product.cost_changed и product.out_of_stock.
Объект Sync rule
idstring- Начинается с rule_; правило по умолчанию — rule_default.
applies_tostring- all для правила по умолчанию или ID товара для переопределения.
on_cost_increase.actionstring- reprice — пересчитать цену с сохранением маржи, pause — поставить товар на паузу, notify — только уведомить.
on_cost_increase.keep_margin_percentstring- При reprice: маржа от цены продажи, которую нужно сохранить.
on_cost_increase.max_increase_percentstring|null- При reprice: максимальный рост цены за раз. Выше него действует above_max: pause или notify.
on_cost_decreasestring- keep_price или снижение цены до той же маржи.
on_out_of_stockstring- Всегда zero_stock: у распроданного SKU на ваших каналах продаж отображается 0.
on_back_in_stockstring- restock или stay_paused до тех пор, пока вы не возобновите.
round_tostring|null- Окончание цены для пересчитанных цен, например .99 или .00.
{
"id": "rule_default",
"applies_to": "all",
"on_cost_increase": {
"action": "reprice",
"keep_margin_percent": "30",
"max_increase_percent": "15",
"above_max": "pause"
},
"on_cost_decrease": "keep_price",
"on_out_of_stock": "zero_stock",
"on_back_in_stock": "restock",
"round_to": ".99",
"updated_at": "2026-11-02T08:00:00Z"
}Список правил синхронизации
GET/v1/sync_rules
Сначала правило по умолчанию, затем все переопределения для товаров.
Область доступаproducts:read
curl "https://www.ninjabuy.com/api/v1/sync_rules" \
-H "Authorization: Bearer $NINJABUY_API_KEY" \
-H "NinjaBuy-Version: 2026-11"HTTP/2 200 OK
{
"data": [
{
"id": "rule_default",
"applies_to": "all",
"on_cost_increase": {
"action": "reprice",
"keep_margin_percent": "30",
"max_increase_percent": "15",
"above_max": "pause"
},
"on_cost_decrease": "keep_price",
"on_out_of_stock": "zero_stock",
"on_back_in_stock": "restock",
"round_to": ".99",
"updated_at": "2026-11-02T08:00:00Z"
},
{
"id": "rule_9p3e",
"applies_to": "prd_1x0a",
"on_cost_increase": { "action": "pause" },
"on_cost_decrease": "keep_price",
"on_out_of_stock": "zero_stock",
"on_back_in_stock": "stay_paused",
"round_to": null,
"updated_at": "2026-11-03T10:14:00Z"
}
],
"has_more": false,
"cursor": null
}Получение правила синхронизации
GET/v1/sync_rules/{id}
Одно правило.
Область доступаproducts:read
Параметры пути
idstringобязательно- ID правила.
Ошибки
| Статус | Тип | Когда |
|---|---|---|
| 404 | not-found | В этом аккаунте нет такого правила. |
curl "https://www.ninjabuy.com/api/v1/sync_rules/rule_default" \
-H "Authorization: Bearer $NINJABUY_API_KEY" \
-H "NinjaBuy-Version: 2026-11"HTTP/2 200 OK
{
"id": "rule_default",
"applies_to": "all",
"on_cost_increase": {
"action": "reprice",
"keep_margin_percent": "30",
"max_increase_percent": "15",
"above_max": "pause"
},
"on_cost_decrease": "keep_price",
"on_out_of_stock": "zero_stock",
"on_back_in_stock": "restock",
"round_to": ".99",
"updated_at": "2026-11-02T08:00:00Z"
}Переопределение для товара
POST/v1/sync_rules
Товар со своим правилом следует ему вместо правила по умолчанию. Пропущенные поля берутся из правила по умолчанию.
Область доступаproducts:write
Тело
applies_tostringобязательно- all для правила по умолчанию или ID товара для переопределения.
on_cost_increase.actionstring- reprice — пересчитать цену с сохранением маржи, pause — поставить товар на паузу, notify — только уведомить.
on_cost_increase.keep_margin_percentstring- При reprice: маржа от цены продажи, которую нужно сохранить.
on_cost_increase.max_increase_percentstring|null- При reprice: максимальный рост цены за раз. Выше него действует above_max: pause или notify.
on_cost_decreasestring- keep_price или снижение цены до той же маржи.
on_out_of_stockstring- Всегда zero_stock: у распроданного SKU на ваших каналах продаж отображается 0.
on_back_in_stockstring- restock или stay_paused до тех пор, пока вы не возобновите.
round_tostring|null- Окончание цены для пересчитанных цен, например .99 или .00.
Ошибки
| Статус | Тип | Когда |
|---|---|---|
| 404 | not-found | В этом аккаунте нет такого товара. |
| 409 | invalid-state | У товара уже есть переопределение: замените его. |
curl -X POST "https://www.ninjabuy.com/api/v1/sync_rules" \
-H "Authorization: Bearer $NINJABUY_API_KEY" \
-H "NinjaBuy-Version: 2026-11" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{
"applies_to": "prd_1x0a",
"on_cost_increase": { "action": "pause" },
"on_back_in_stock": "stay_paused"
}'HTTP/2 201 Created
{
"id": "rule_9p3e",
"applies_to": "prd_1x0a",
"on_cost_increase": { "action": "pause" },
"on_cost_decrease": "keep_price",
"on_out_of_stock": "zero_stock",
"on_back_in_stock": "stay_paused",
"round_to": null,
"updated_at": "2026-11-03T10:14:00Z"
}Замена правила синхронизации
PUT/v1/sync_rules/{id}
Отправляйте правило целиком. Оно применяется со следующего прочтения каждой карточки.
Область доступаproducts:write
Параметры пути
idstringобязательно- ID правила.
Тело
on_cost_increase.actionstring- reprice — пересчитать цену с сохранением маржи, pause — поставить товар на паузу, notify — только уведомить.
on_cost_increase.keep_margin_percentstring- При reprice: маржа от цены продажи, которую нужно сохранить.
on_cost_increase.max_increase_percentstring|null- При reprice: максимальный рост цены за раз. Выше него действует above_max: pause или notify.
on_cost_decreasestring- keep_price или снижение цены до той же маржи.
on_out_of_stockstring- Всегда zero_stock: у распроданного SKU на ваших каналах продаж отображается 0.
on_back_in_stockstring- restock или stay_paused до тех пор, пока вы не возобновите.
round_tostring|null- Окончание цены для пересчитанных цен, например .99 или .00.
Ошибки
| Статус | Тип | Когда |
|---|---|---|
| 404 | not-found | В этом аккаунте нет такого правила. |
curl -X PUT "https://www.ninjabuy.com/api/v1/sync_rules/rule_default" \
-H "Authorization: Bearer $NINJABUY_API_KEY" \
-H "NinjaBuy-Version: 2026-11" \
-H "Content-Type: application/json" \
-d '{
"on_cost_increase": { "action": "notify" },
"on_cost_decrease": "keep_price",
"on_out_of_stock": "zero_stock",
"on_back_in_stock": "restock",
"round_to": ".99"
}'HTTP/2 200 OK
{
"id": "rule_default",
"applies_to": "all",
"on_cost_increase": { "action": "notify" },
"on_cost_decrease": "keep_price",
"on_out_of_stock": "zero_stock",
"on_back_in_stock": "restock",
"round_to": ".99",
"updated_at": "2026-11-02T08:00:00Z"
}Удаление переопределения
DELETE/v1/sync_rules/{id}
Товар снова следует правилу по умолчанию. Само rule_default удалить нельзя.
Область доступаproducts:write
Параметры пути
idstringобязательно- ID правила.
Ошибки
| Статус | Тип | Когда |
|---|---|---|
| 409 | invalid-state | rule_default нельзя удалить. |
curl -X DELETE "https://www.ninjabuy.com/api/v1/sync_rules/rule_9p3e" \
-H "Authorization: Bearer $NINJABUY_API_KEY" \
-H "NinjaBuy-Version: 2026-11"HTTP/2 200 OK
{ "id": "rule_9p3e", "deleted": true }