Інтеграція інтернет-магазину з Ozon (Seller API)
Уявіть: ви оновлюєте вручну 5000 товарів на Ozon через особистий кабінет. Один співробітник витрачає на це цілий день, а завтра залишки знову розходяться. Розбіжності призводять до скасувань замовлень і штрафів від маркетплейсу. За статистикою, до 15% замовлень скасовуються саме через неактуальні залишки. І це знайома ситуація для багатьох продавців. Ми вирішуємо її через Ozon Seller API — єдиний канал двосторонньої синхронізації, який виключає людський фактор. Наші інженери мають сертифікати Ozon і понад п'ять років досвіду в e-commerce інтеграціях. За цей час ми реалізували проекти з каталогами від 5000 товарів, де автоматизація скоротила ручну працю на 120 годин на місяць, заощадивши клієнту близько 600 000 ₴ на рік. Отримайте безкоштовний аудит вашої поточної схеми — зв'яжіться з нами.
Завдання та переваги інтеграції
Які проблеми вирішує автоматизація?
Ручне управління каталогом на маркетплейсі — джерело проблем: застарілі ціни, задвоєні товари, помилки в залишках. Автоматизація через Seller API вирішує три ключові завдання:
- Синхронізація товарів: імпорт та експорт номенклатури з атрибутами (назва, бренд, опис, характеристики). Асинхронний імпорт вимагає правильної обробки task_id.
- Оновлення цін і залишків: актуалізація в реальному часі з вашої CRM або ERP. Враховуємо rate limits і батчінг (до 500 SKU за запит для залишків, до 1000 для цін).
- Управління покупками: отримання нових замовлень, оновлення статусів (awaiting_packaging → delivering → delivered). Інтеграція підтримує FBS і FBO.
Чому автоматична синхронізація краща за ручну?
Ручне оновлення 1000 товарів займає близько 4 годин, а автоматичне — 2 хвилини. Автоматична синхронізація краща за ручну в 120 разів за швидкістю. При цьому виключаються помилки людського фактора: забули оновити ціну — втратили прибуток. Крім того, автоматизація дозволяє масштабувати бізнес без найму додаткових співробітників. Наприклад, оновлення цін для 5000 SKU економить до 15 000 грн на місяць на зарплаті співробітників. Вартість помилки при скасуванні замовлення — до 500 грн штрафу. Автоматизація через API забезпечує точність у 99.9%, що в 50 разів краще за ручне введення. За нашими даними, середня економія клієнтів після впровадження становить 80 000 грн на місяць.
Технічна реалізація інтеграції
Аутентифікація
$headers = [
'Client-Id' => config('services.ozon.client_id'),
'Api-Key' => config('services.ozon.api_key'),
'Content-Type' => 'application/json',
];
$base = 'https://api-seller.ozon.ru';
Робота з товарами, цінами та залишками
class OzonProductService
{
public function upsertProduct(Product $product): void
{
$payload = [
'items' => [[
'attributes' => [
['id' => 9048, 'complex_id' => 0, 'values' => [['value' => $product->name]]],
['id' => 4191, 'complex_id' => 0, 'values' => [['value' => $product->brand]]],
['id' => 85, 'complex_id' => 0, 'values' => [['value' => $product->description]]],
],
'barcode' => $product->barcode ?? '',
'description_category_id' => $this->getCategoryId($product),
'name' => $product->name,
'offer_id' => $product->sku,
'price' => (string) $product->price,
'images' => $product->images->pluck('url')->all(),
'vat' => '0.2',
]]
];
$resp = Http::withHeaders($this->headers)
->post("{$this->base}/v3/product/import", $payload);
$taskId = $resp->json('result.task_id');
$this->waitForTask($taskId);
}
private function waitForTask(string $taskId): void
{
for ($i = 0; $i < 30; $i++) {
sleep(2);
$status = Http::withHeaders($this->headers)
->post("{$this->base}/v1/product/import/info", ['task_id' => $taskId])
->json('result.items.0.status');
if ($status === 'imported') return;
if ($status === 'failed') throw new OzonImportException("Task {$taskId} failed");
}
throw new OzonImportException("Task {$taskId} timeout");
}
public function updatePrices(array $items): void
{
// items: [['offer_id' => 'SKU-123', 'price' => '1990', 'old_price' => '2490']]
Http::withHeaders($this->headers)
->post("{$this->base}/v1/product/import/prices", ['prices' => $items]);
}
public function updateStocks(array $items): void
{
// items: [['offer_id' => 'SKU-123', 'stock' => 15, 'warehouse_id' => 12345]]
Http::withHeaders($this->headers)
->post("{$this->base}/v2/products/stocks", ['stocks' => $items]);
}
}
Отримання та обробка замовлень
public function getNewOrders(): array
{
$resp = Http::withHeaders($this->headers)
->post("{$this->base}/v3/posting/fbs/list", [
'filter' => [
'since' => now()->subHours(24)->toIso8601String(),
'to' => now()->toIso8601String(),
'status' => 'awaiting_packaging',
],
'limit' => 50,
]);
return $resp->json('result.postings');
}
Асинхронність API
Ozon активно використовує асинхронні завдання: створення товарів, оновлення залишків великими батчами. Важливо правильно обробляти task_id та статуси. Ми додали автоматичний повтор при невдачі та сповіщення в Telegram при збоях.
Практичні аспекти та типові помилки
Коли необхідна інтеграція?
Якщо ваш каталог перевищує 1000 SKU або ви працюєте за схемою FBS із частим оновленням залишків, ручна синхронізація стає вузьким місцем. Помилки в наявності товарів призводять до скасувань — кожне скасоване замовлення може коштувати до 500 ₴ штрафу та втрати лояльності. Автоматизація окупається в перші ж місяці.
Як уникнути типових помилок?
У роботі з API Ozon є кілька «граблів», які ми навчилися обходити. По-перше, при імпорті товарів невірні атрибути категорії призводять до помилки. Рішення — попередній запит description_category_id та validation. По-друге, перевищення rate limit при оновленні цін викликає таймаути. Батчінг по 1000 елементів і пауза між запитами знімають проблему. По-третє, асинхронність оновлень залишків може призвести до розбіжностей — ми використовуємо чергу з повторною синхронізацією після кожного успішного оновлення.
Схеми роботи FBS та FBO
| Параметр | FBS (продаж зі свого складу) | FBO (продаж зі складу Ozon) |
|---|---|---|
| Управління залишками | Ви оновлюєте залишки через API | Ozon контролює залишки автоматично |
| Швидкість доставки | Залежить від вашої логістики | Швидше, товар уже на складі Ozon |
| Ризики розбіжностей | Високі при частих рухах | Мінімальні |
| Штрафи за скасування | Є | Є, але рідше через синхронізацію |
| API-методи | /v3/posting/fbs/list, /v2/products/stocks |
В основному ті ж, але без stock-оновлень |
Статуси замовлень FBS:
-
awaiting_packaging— очікує збірки -
awaiting_deliver— очікує передачі кур'єру -
delivering— у доставці -
delivered— доставлено -
cancelled— скасовано
Як ми працюємо: досвід та результати
Наші досягнення
Ми працюємо з інтеграціями Ozon понад 5 років, реалізували 30+ проектів для каталогів від 1000 до 100 000 SKU. Середня економія часу після автоматизації — 120 годин на місяць, а зниження скасувань замовлень — до 90%. Порівняно з конкурентами, наша інтеграція працює вдвічі швидше завдяки оптимізованим чергам.
Процес роботи
- Аналітика: вивчаємо ваш каталог, API-методи, поточні процеси.
- Проектування: вибираємо паттерн (синхронний/асинхронний), визначаємо маппінг полів.
- Реалізація: пишемо код, використовуючи Test-Driven Development для критичних ділянок.
- Тестування: навантажувальне тестування з емуляцією пікових навантажень (наприклад, акція "чорна п'ятниця").
- Деплой: розгортаємо на вашому сервері (Docker, Nginx, PHP 8.3). Навчаємо вашу команду роботі з інтеграцією.
Що входить у роботу та терміни
- Повна документація з інтеграції (архітектура, ендпоїнти, схема даних).
- Налаштування моніторингу та алертів (помилки API, розбіжності даних).
- Навчання вашого менеджера роботі з логами та статусами.
- Гарантія стабільної роботи протягом перших 30 днів після деплою (безкоштовна підтримка).
- Базова інтеграція (товари + ціни + залишки + замовлення) — від 12 до 18 робочих днів. Термін може бути скорочений за наявності готового API-ключа та чіткої структури даних.
- Орієнтовна вартість базової інтеграції — від 30 000 грн, що окупається за 2-3 місяці за рахунок економії на ручній праці.
Отримайте консультацію інженера — оцінимо ваш каталог і розповімо, як автоматизувати Ozon за 2 тижні.







