Якщо у вас 500, 5000 або 50 000 товарів у магазині на WooCommerce, ручне редагування цін, описів, SEO-полів чи залишків — це місяці роботи й гарантовані помилки. WooCommerce REST API дозволяє оновлювати каталог пакетами по 100 товарів за один запит, синхронізувати залишки з 1С, ERP чи постачальником, переписувати description і мета-теги через AI. У цій статті я покажу, як підняти API за 15 хвилин, як обійти типові граблі на shared-хостингу й чому ваш перший batch-запит може повернути 500-ту помилку.
Що таке REST API у WooCommerce і чому без нього не вижити
WooCommerce постачається з вбудованим REST API ще з версії 2.6 (2016 рік). Це означає, що жодних плагінів встановлювати не потрібно — інтерфейс уже працює за адресою /wp-json/wc/v3/. Через нього ви читаєте та змінюєте товари, варіації, категорії, замовлення, купони, клієнтів і навіть налаштування магазину.
Чому це критично для будь-якого магазину розміром від 200 SKU? Бо альтернативи — це або плагіни на кшталт WP All Import (одноразова операція, без зворотного звʼязку), або експорт-імпорт CSV (катастрофа з кодуванням і втраченими полями). API дає вам точковий контроль: оновити 47 товарів конкретного бренду, не торкаючись інших.
Що саме можна автоматизувати
- Ціни й залишки — синхронізація з постачальником раз на годину
- SEO-поля — масове переписування title, meta description, focus keyword (Yoast чи Rank Math)
- Описи товарів — генерація через GPT-4 або Claude для всього каталогу
- Атрибути й категорії — реструктуризація без ручного клацання
- Замовлення — автоматичне передавання у CRM, Нову Пошту, бухгалтерію
На відміну від Shopify Admin API чи закритих інтерфейсів Horoshop і Prom.ua, у WooCommerce ви платите тільки за хостинг — лімітів запитів від платформи немає. Але це палка з двома кінцями, і про це нижче. Спочатку розберемося з ключами доступу.
Створення API-ключа з правами Read/Write
Цей крок займає буквально дві хвилини, але саме тут половина розробників робить першу помилку — створює ключ із правами тільки Read, а потім дві години шукає, чому PUT-запит повертає 401.
- Зайдіть в адмінку: WooCommerce → Settings → Advanced → REST API
- Натисніть Add key
- У полі Description вкажіть зрозумілу назву, наприклад «Sync from ERP» або «Revenza AI integration» — потім ви будете вдячні собі, коли ключів стане десять
- В User оберіть користувача з роллю Administrator або Shop Manager
- В Permissions виберіть Read/Write — без цього ви не зможете оновлювати товари
- Натисніть Generate API key
Система покаже вам Consumer Key (починається з ck_) і Consumer Secret (починається з cs_). Скопіюйте їх одразу — після оновлення сторінки secret більше не буде доступний, доведеться генерувати новий ключ.
Як правильно зберігати ключі
Ніколи не комітьте ключі в Git. Базова гігієна: .env-файл, секретне сховище хостингу або змінні середовища. Якщо ви використовуєте сторонні сервіси (Zapier, Make, n8n, Revenza), додайте ключі лише через інтерфейс — ніколи не пересилайте їх у Telegram чи на email у відкритому вигляді. Скомпрометований Consumer Secret = повний доступ до вашого каталогу й замовлень.
Перевірка ключа через curl
Перш ніж писати скрипт на 200 рядків, зробіть один тестовий запит:
curl https://your-shop.com/wp-json/wc/v3/products?per_page=1 -u ck_xxx:cs_xxx
Якщо у відповідь прийшов JSON із товаром — ви живі. Якщо 401 — перевірте права ключа. Якщо 404 — у вас проблема з permalinks, і це наступна тема.
Чому pretty permalinks — обовʼязкова умова
WordPress за замовчуванням використовує URL виду /?p=123. Це називається «plain permalinks». Якщо у вас увімкнений саме цей варіант, REST API не працюватиме — точніше, працюватиме лише через старий формат /?rest_route=/wc/v3/products, який погано підтримується клієнтськими бібліотеками.
Як виправити:
- Перейдіть у Settings → Permalinks
- Виберіть будь-який варіант, окрім Plain — рекомендую Post name (
/sample-post/) - Збережіть зміни — навіть якщо вони не помінялися, натискання Save оновлює правила
.htaccess
На Nginx-хостингах (наприклад, у багатьох українських провайдерів типу Ukraine.com.ua, HostPro чи Mirohost) .htaccess ігнорується. Перевірте, чи в конфігу Nginx є директива:
try_files $uri $uri/ /index.php?$args;
Без неї запити до /wp-json/ будуть повертати 404 від Nginx ще до того, як WordPress отримає шанс відповісти. Це найчастіша причина «у мене API не працює», з якою стикаються власники магазинів. Тепер, коли інфраструктура готова, переходимо до головного болю — лімітів.
Rate limits: як не покласти власний магазин
WooCommerce REST API не має вбудованих rate limits. І саме це найнебезпечніше. Сам WordPress готовий обробляти ваші запити нескінченно — а от shared-хостинг убʼється на 50-100-му паралельному запиті.
Типова ситуація: ви запускаєте скрипт, який оновлює 3000 товарів у циклі по одному. Через 4 хвилини хостер блокує вашу IP-адресу за «підозрілу активність», а магазин тимчасово недоступний для покупців. Знайомо?
Реальні обмеження українських хостингів
- Shared-тарифи (200-500 грн/міс) — реально витримують 5-10 запитів/секунду, далі 503 або тимчасовий бан
- VPS від 800 грн/міс — 30-50 запитів/секунду без проблем
- Managed WooCommerce (Kinsta, WP Engine, від $35/міс) — 100+ rps, але є власні захисні ліміти
- Cloudflare перед сайтом — може блокувати ваш скрипт як атаку, додайте свою IP в whitelist
Стратегії обходу обмежень
По-перше, використовуйте batch endpoint замість одиночних запитів. Один запит на 100 товарів навантажує сервер у 30-50 разів менше, ніж 100 окремих PUT-запитів — детальніше про це в наступному розділі.
По-друге, додайте затримку між запитами. PHP sleep(1), JavaScript await new Promise(r => setTimeout(r, 1000)). Так, це повільніше — але краще оновити каталог за 20 хвилин, ніж за 5 хвилин і потім годину чекати розблокування.
По-третє, запускайте оновлення вночі (з 2 до 6 ранку). Конверсії впадуть на нуль, тому навіть якщо щось ляже — реальних втрат немає.
По-четверте, моніторте відповіді. Якщо приходить 429 (Too Many Requests) або 503 — зупиніться на 30 секунд і повторіть. Якщо стратегію переписування каталогу варто продумати наперед, рекомендую почитати про Переписати 1000 товарів WooCommerce: стратегія без поломки SEO — там розписано порядок дій і чого не робити одразу.
Batch endpoint: один запит замість сотні
Це найпотужніша фіча WooCommerce REST API і одночасно найменш відома серед власників магазинів. Endpoint /wp-json/wc/v3/products/batch приймає до 100 операцій create, update і delete за один HTTP-запит.
Структура body:
{ "update": [ {"id": 123, "regular_price": "299"}, {"id": 124, "regular_price": "349"} ], "create": [...], "delete": [125, 126] }
Приклад: масове оновлення SEO-полів
Припустимо, у вас 800 товарів і ви згенерували для них нові meta_description через AI. Замість 800 окремих PUT-запитів робимо 8 batch-запитів по 100 товарів:
POST /wp-json/wc/v3/products/batch
Body (фрагмент):
{ "update": [ { "id": 1547, "meta_data": [ { "key": "_yoast_wpseo_metadesc", "value": "Купуйте кросівки Nike Air Max 270 за 3299 грн з доставкою по Україні. Оригінал, гарантія 2 роки." } ] } ] }
Зверніть увагу на префікс _yoast_wpseo_metadesc — Yoast SEO зберігає мета-опис саме в цьому ключі. Для Rank Math ключ буде rank_math_description. Якщо плутаєте — оновлення «спрацює», але візуально нічого не зміниться, бо ви заповнюєте не те поле.
Обробка помилок у batch-відповіді
Найважливіше про batch: якщо один товар з 100 не оновився, інші 99 збережуться. Сервер поверне масив з результатами по кожному ID, де успішні матимуть повний обʼєкт товару, а проблемні — обʼєкт з полем error. Завжди парсіть відповідь і логуйте збої — інакше пропустите ситуацію, коли 30 товарів тихо не оновилися через невалідні ціни (наприклад, з комою замість крапки).
Швидкісне порівняння
- Одиночні запити, 1000 товарів: ~25-40 хвилин на shared-хостингу, високий ризик блокування
- Batch по 100, 1000 товарів: 10 запитів, ~2-4 хвилини, мінімум навантаження
- Batch + паузи 2 секунди: ~5 хвилин, нульовий ризик
Різниця в десять разів — і це не маркетинг, а арифметика. Тепер питання: чи варто писати все це самому, чи делегувати інструменту.
Готові інструменти проти власного скрипта
У вас є три шляхи: писати скрипт самому, зібрати ланцюжок у no-code платформі (Make, n8n, Zapier), або використати спеціалізований сервіс типу Revenza, який уже має готові інтеграції з WooCommerce REST API.
Власний скрипт на Python чи Node.js виправданий, якщо у вас є розробник у команді й унікальна логіка (наприклад, ціна залежить від курсу долара, націнки бренду й залишку). Але памʼятайте: написати — це 20% роботи. 80% — це обробка помилок, retry-логіка, логування, моніторинг, оновлення під нові версії WooCommerce.
No-code платформи типу Make коштують від $9/міс, але швидко стають дорогими — кожна операція = одне «дія», 1000 товарів = 1000 операцій, навіть якщо ви робите batch. Та й SEO-логіки в них фактично немає.
Якщо ваше завдання — саме SEO та контент-автоматизація для WooCommerce, варто спробувати Revenza: платформа підключається до магазину через той самий REST API, генерує описи й мета-поля через AI з урахуванням брендингу, відстежує SERP і пушить оновлення назад у каталог через batch-запити. Для нішевих магазинів є окремий сценарій під дропшипінг, де асортимент змінюється щотижня.
FAQ
Чи можна використовувати WooCommerce REST API без HTTPS?
Технічно — так, через URL-параметри consumer_key і consumer_secret. Але це гарантована компрометація: ключі видно в логах сервера, у проксі, у Wi-Fi-снаферах. Ставте Lets Encrypt (безкоштовно), і використовуйте Basic Auth.
Що робити, якщо batch-запит постійно повертає 504 Gateway Timeout?
Сервер не встигає обробити 100 товарів за відведений час (зазвичай 30-60 секунд на shared-хостингу). Зменшіть розмір пачки до 25-50, увімкніть Object Cache (Redis або Memcached на VPS), або попросіть хостера підняти max_execution_time до 120 секунд.
Як отримати товари з конкретної категорії, не вивантажуючи весь каталог?
Використовуйте параметр category з ID: GET /wp-json/wc/v3/products?category=42&per_page=100. Для пагінації додавайте &page=2. Загальну кількість сторінок API повертає в заголовку X-WP-TotalPages.
Чи зберігаються revision-и при оновленні через API?
Ні — це важливо. WooCommerce оновлює товар «на місці», без створення ревізії, як для звичайних post-ів. Тому перед масовим оновленням завжди робіть бекап БД або експорт CSV — відкотити зміни постфактум буде неможливо.
Чому я бачу новий опис в API, але на сайті — старий?
Кеш. Перевірте: серверний кеш (LiteSpeed, Nginx FastCGI), плагіни кешу (WP Rocket, W3 Total Cache), Cloudflare. API працює напряму з БД, а фронтенд віддає кешовану копію. Очистіть кеш після масового оновлення.
Що далі
WooCommerce REST API — це фундамент будь-якої серйозної автоматизації магазину на WordPress. Налаштований ключ із правами Read/Write, увімкнені pretty permalinks, batch endpoint замість циклу, моніторинг лімітів хостингу — це чотири речі, які перетворюють API з теоретичної можливості на робочий інструмент.
Якщо ви не хочете писати скрипти й тестувати retry-логіку, а вам потрібно просто оновити SEO у 2000 товарах за вечір — підключіть магазин до Revenza за 5 хвилин і подивіться, що вийде. Перші запити можна зробити безкоштовно, тестова інтеграція не вимагає карти.
