Как получить заказы с Ozon программно: API, вебхуки и готовые скрипты

Если вы продавец на Ozon и хотите автоматизировать обработку заказов, вам не обойтись без программного доступа к данным. Ручное копирование информации из личного кабинета отнимает время и чревато ошибками — особенно когда заказов сотни в день. В этой статье разберём все легальные способы получения заказов с Ozon: от официального API до альтернативных решений для тех, кто не может использовать стандартные инструменты.

Мы не будем ограничиваться теорией. Здесь вы найдёте готовые коды на Python для работы с API, примеры обработки вебхуков, таблицу статусов заказов и даже обходные пути для случаев, когда API недоступен (например, для новых аккаунтов с ограничениями). Особое внимание уделим недокументированным нюансам аутентификации и ограничениям на количество запросов, о которых Ozon не предупреждает в официальной документации.

1. Официальное API Ozon: регистрация и доступ к заказам

Основной способ программного получения заказов — REST API от Ozon. Чтобы им воспользоваться, нужно пройти несколько обязательных шагов:

  • 🔑 Зарегистрировать приложение в личном кабинете продавца (раздел "API и Интеграции"). Укажите название, описание и Redirect URI (можно использовать https://localhost для тестирования).
  • 📝 Получить Client ID и Client Secret — эти данные понадобятся для аутентификации. Храните их в безопасности: при компрометации придётся создавать новое приложение.
  • 🔄 Сгенерировать токен доступа через OAuth 2.0. Для этого нужно отправить POST-запрос на https://api-seller.ozon.ru/v1/token с параметрами grant_type=client_credentials.

После успешной аутентификации вы получите access_token, который действует 1 час. Его нужно передавать в заголовке каждого запроса к API:

Authorization: Bearer ваш_access_token

Client-Id: ваш_client_id

⚠️ Внимание: Ozon ограничивает количество запросов к API — 1000 в минуту на одно приложение. При превышении лимита вы получите ошибку 429 Too Many Requests. Чтобы избежать блокировки, используйте кэширование данных или увеличивайте интервал между запросами.

Для получения списка заказов используйте эндпоинт:

GET https://api-seller.ozon.ru/v2/posting/fbs/list

Пример запроса с фильтрацией по дате (параметры передаются в URL):

GET https://api-seller.ozon.ru/v2/posting/fbs/list?dir=ASC&filter={"since":"2026-05-01T00:00:00Z","to":"2026-05-02T00:00:00Z"}&limit=1000
📊 Какой язык программирования вы используете для работы с API Ozon?
Python
JavaScript
PHP
Java
Другой

2. Пример кода на Python для получения заказов

Ниже приведён рабочий скрипт на Python 3.10+, который:

  1. Аутентифицируется в API Ozon;
  2. Получает список заказов за последние 24 часа;
  3. Сохраняет данные в файл orders.json.

Установите зависимости перед запуском:

pip install requests python-dotenv

Создайте файл .env в той же папке, что и скрипт, и добавьте туда:

CLIENT_ID=ваш_client_id

CLIENT_SECRET=ваш_client_secret

Сам скрипт:

import requests

import json

from datetime import datetime, timedelta

from dotenv import load_dotenv

import os

Загрузка переменных окружения

load_dotenv()

Данные для аутентификации

auth_url = "https://api-seller.ozon.ru/v1/token"

client_id = os.getenv("CLIENT_ID")

client_secret = os.getenv("CLIENT_SECRET")

Получение токена

def get_token():

payload = {

"grant_type": "client_credentials",

"client_id": client_id,

"client_secret": client_secret

}

response = requests.post(auth_url, data=payload)

return response.json().get("access_token")

Получение заказов

def get_orders(token):

headers = {

"Authorization": f"Bearer {token}",

"Client-Id": client_id

}

# Дата "от" — 24 часа назад

since = (datetime.utcnow() - timedelta(days=1)).strftime("%Y-%m-%dT%H:%M:%SZ")

params = {

"dir": "ASC",

"filter": json.dumps({"since": since}),

"limit": 1000

}

response = requests.get(

"https://api-seller.ozon.ru/v2/posting/fbs/list",

headers=headers,

params=params

)

return response.json()

Сохранение в файл

def save_orders(orders):

with open("orders.json", "w", encoding="utf-8") as f:

json.dump(orders, f, ensure_ascii=False, indent=2)

Основной поток

if __name__ == "__main__":

token = get_token()

if token:

orders = get_orders(token)

save_orders(orders)

print("Данные сохранены в orders.json")

else:

print("Ошибка аутентификации")

Скрипт возвращает массив заказов со всеми деталями: posting_number (номер заказа), status (статус), products (список товаров), delivery_method (способ доставки) и другие поля. Полный список параметров см. в официальной документации.

☑️ Подготовка к работе со скриптом

Выполнено: 0 / 4

3. Вебхуки: автоматическое уведомление о новых заказах

Если вам не нужно постоянно опрашивать API, можно настроить вебхуки — уведомления о новых заказах в реальном времени. Для этого:

  1. В личном кабинете Ozon перейдите в Настройки → API и Интеграции → Вебхуки.
  2. Укажите URL вашего сервера, который будет принимать уведомления (должен поддерживать HTTPS).
  3. Выберите события, которые вас интересуют (например, posting_created — новый заказ).

Пример обработчика вебхука на Python (фреймворк Flask):

from flask import Flask, request, jsonify

app = Flask(__name__)

@app.route('/webhook/ozon', methods=['POST'])

def webhook():

data = request.json

if data.get("event") == "posting_created":

# Обработка нового заказа

posting_number = data["posting"]["posting_number"]

print(f"Новый заказ: {posting_number}")

# Здесь можно добавить логику отправки уведомления в Telegram, базу данных и т.д.

return jsonify({"status": "success"})

if __name__ == "__main__":

app.run(port=5000, ssl_context='adhoc') # Для тестирования

Важно: Ozon отправляет вебхуки с заголовком X-Ozon-Signature, который содержит подпись для проверки подлинности запроса. Пропускать эту проверку небезопасно!

⚠️ Внимание: Если ваш сервер не отвечает в течение 5 секунд или возвращает ошибку, Ozon повторяет отправку вебхука ещё 3 раза с интервалом в 1 минуту. После этого событие считается потерянным.

4. Альтернативные способы получения заказов

Не всем продавцам доступно официальное API. Например, новые аккаунты с низким рейтингом могут столкнуться с ограничениями. В таких случаях используют:

  • 📊 Экспорт в CSV/Excel из личного кабинета (раздел Заказы → Экспорт). Минус: данные обновляются раз в час и требуют ручной загрузки.
  • 🤖 Парсинг личного кабинета через Selenium или Playwright. Рискованно — Ozon блокирует аккаунты за автоматизированный сбор данных.
  • 🔄 Интеграции через сервисы-посредники (например, MoySklad, RetailCRM). Они уже имеют готовые коннекторы к API Ozon.

Пример скрипта для экспорта заказов в CSV через Selenium (только для личного использования!):

from selenium import webdriver

from selenium.webdriver.common.by import By

import time

Авторизация (замените на свои данные)

driver = webdriver.Chrome()

driver.get("https://seller.ozon.ru/login")

driver.find_element(By.NAME, "email").send_keys("ваш_email")

driver.find_element(By.NAME, "password").send_keys("ваш_пароль")

driver.find_element(By.CSS_SELECTOR, "button[type='submit']").click()

time.sleep(5) # Ждём загрузки

Переход в раздел заказов

driver.get("https://seller.ozon.ru/performance/orders")

time.sleep(3)

Клик по кнопке экспорта

export_button = driver.find_element(By.XPATH, "//button[contains(text(), 'Экспорт')]")

export_button.click()

time.sleep(10) # Ждём генерации файла

driver.quit()

Чем опасен парсинг личного кабинета?

Ozon активно борется с автоматизированным сбором данных. При обнаружении подозрительной активности (частые запросы, нетипичное поведение) аккаунт может быть заблокирован на 3–30 дней. Кроме того, структура HTML страниц часто меняется, поэтому скрипты требуют постоянной поддержки.

5. Таблица статусов заказов и их значения

При работе с заказами критично понимать их текущий статус. Ниже — расшифровка основных значений, которые возвращает API:

Статус (код) Описание Действия продавца
awaiting_packaging Заказ ожидает упаковки на складе Ozon (для FBS). Подготовить товар к передаче на склад (если FBS) или ждать сборки (если FBO).
awaiting_deliver Заказ собран и ожидает передачи курьеру. Для FBS: передать товар на склад Ozon в течение 24 часов.
delivering Заказ в пути к покупателю. Отслеживать доставку, быть готовым к вопросам клиента.
delivered Заказ доставлен покупателю. Ждать подтверждения получения или возможного возврата (14 дней).
cancelled Заказ отменён (покупателем или системой). Проверьте причину в поле cancellation_reason.

Полный список статусов (включая редкие, например, returning или lost) см. в документации API.

6. Ошибки API и их решение

При работе с API Ozon вы можете столкнуться с ошибками. Вот самые распространённые и способы их исправления:

  • 🔴 401 Unauthorized — неверный access_token или истёк срок его действия. Решение: запросите новый токен.
  • 🔴 403 Forbidden — у приложения нет прав на запрашиваемый эндпоинт. Решение: проверьте scope-ы в настройках приложения.
  • 🔴 429 Too Many Requests — превышен лимит запросов. Решение: добавьте задержку между запросами или используйте кэш.
  • 🔴 500 Internal Server Error — ошибка на стороне Ozon. Решение: повторите запрос через 5–10 минут.

Если ошибка повторяется, проверьте:

  1. Актуальность версии API (в URL может быть /v1/, /v2/ или /v3/).
  2. Корректность передачи заголовков (Client-Id и Authorization).
  3. Формат фильтров в параметрах запроса (например, даты должны быть в формате ISO 8601).
⚠️ Внимание: Если вы получаете ошибку 400 Bad Request с сообщением "Invalid warehouse_id", убедитесь, что вы указываете правильный идентификатор склада. Список доступных складов можно получить через эндпоинт /v2/warehouse/list.

7. Интеграция с 1С и другими системами учёта

Для автоматизации учёта заказов в или аналогичных системах используйте:

  1. Готовые коннекторы (например, модуль "Интеграция с Ozon" для 1С:Управление торговлей).
  2. Обмен через CSV/Excel — экспортируйте заказы из Ozon и импортируйте в с помощью обработки.
  3. Прямое подключение через API — напишите скрипт на 1С:Предприятие или используйте HTTP-Сервисы.

Пример кода для 1С 8.3 (выгрузка заказов через HTTP-запрос):

// Подключаем HTTP-Соединение

ПодключитьВнешнююКомпоненту("C:\Program Files\1cv8\8.3.20.1520\bin\1cv8c.dll");

HTTPСоединение = Новый HTTPСоединение("api-seller.ozon.ru", 443, "", "", Истина);

// Получаем токен (упрощённо)

Запрос = Новый HTTPЗапрос("/v1/token");

Запрос.УстановитьТелоИзСтроки("grant_type=client_credentials&client_id=ВАШ_ID&client_secret=ВАШ_SECRET");

Ответ = HTTPСоединение.ОтправитьДляПолученияДанных(Запрос);

Токен = JSON.Прочитать(Ответ.ПолучитьТелоКакСтроку()).access_token;

// Получаем заказы

Запрос = Новый HTTPЗапрос("/v2/posting/fbs/list?limit=100");

Запрос.УстановитьЗаголовок("Authorization", "Bearer " + Токен);

Ответ = HTTPСоединение.ОтправитьДляПолученияДанных(Запрос);

Результат = JSON.Прочитать(Ответ.ПолучитьТелоКакСтроку());

Для также доступны готовые решения от партнёров Ozon, например, "АйТи-Бизнес" или "Клеверенс". Они предлагают плагины с визуальным интерфейсом и поддержкой всех статусов заказов.

FAQ: Частые вопросы по работе с заказами на Ozon

Как часто обновляются данные в API?

Данные о заказах в API обновляются в реальном времени, но с задержкой до 5 минут. Если вы используете вебхуки, уведомления приходят мгновенно. При ручном экспорте в CSV данные могут быть устаревшими на 1–2 часа.

Можно ли получить заказы за прошлый год?

Через API доступны заказы за последние 90 дней. Для более старых данных используйте архив в личном кабинете (Аналитика → История заказов) или запросите выгрузку у поддержки Ozon.

Что делать, если API возвращает пустой список заказов?

Проверьте:

  1. Корректность фильтров (особенно параметры since и to).
  2. Права приложения (должен быть доступ к эндпоинту /posting/fbs/list).
  3. Регион продавца (некоторые эндпоинты работают только для российских аккаунтов).

Если проблема остаётся, обратитесь в техническую поддержку с указанием Client-Id и времени запроса.

Как отменить заказ через API?

Для отмены заказа используйте эндпоинт:

POST https://api-seller.ozon.ru/v2/posting/fbs/cancel

В теле запроса укажите:

{

"posting_number": "123456789",

"cancellation_reason": "Отсутствует товар на складе",

"items": [{"offer_id": "12345", "quantity": 1}]

}

Подробнее о причинах отмены (cancellation_reason) см. в документации.

Как проверить, что вебхук работает?

Для тестирования вебхуков:

  1. Используйте сервисы вроде webhook.site для эмуляции endpoint-а.
  2. Проверьте, что ваш сервер возвращает статус 200 OK и заголовок Content-Type: application/json.
  3. В личном кабинете Ozon отправьте тестовое событие через кнопку Проверить вебхук.