Справочник/Ozon Seller API

Как получить статистику и расход рекламы Ozon через Performance API

Проверено · Markdown-версия
Коротко

Статистику рекламы Ozon отдает отдельный Performance API (api-performance.ozon.ru) со своим ключом. Подробный отчет по товарам строится асинхронно: до 10 кампаний в одном отчете, в одном кабинете готовится один отчет за раз, ожидание от 15 секунд до 3 минут и дольше. Расход по дням быстрее брать синхронным методом /api/client/statistics/expense/json: его сумма совпадает с рекламными списаниями в начислениях Ozon до копейки.

Доступ

Ключ Performance API (Client ID и Client Secret) создается отдельно от ключа Seller API. По нему запрашивается токен POST /api/client/token (OAuth2 client_credentials), токен действует около 30 минут. Остальные запросы идут с заголовком Authorization: Bearer <токен>.

Какой метод что дает

МетодЧто возвращаетОсобенности
GET /api/client/campaignсписок кампанийполе PaymentType с заглавной буквы, placement - массив
POST /api/client/statisticsасинхронный отчет по товарам кампанийдо 10 кампаний в запросе, в ответе UUID отчета
GET /api/client/statistics/daily/jsonпоказы, клики, расход, заказы по кампаниям и днямсинхронно, есть кампании с оплатой за заказ
GET /api/client/statistics/expense/jsonрасход по кампаниям и днямсинхронно, совпадает со списаниями в начислениях

Синхронные методы принимают dateFrom и dateTo в формате Y-m-d, период не длиннее 62 дней (иначе ответ max statistics period: 62 days). Числа приходят строками с запятой в дробной части, например "463,35".

Асинхронный отчет по товарам

  1. Запрос POST /api/client/statistics с телом {"campaigns": [...], "from": "...", "to": "...", "groupBy": "DATE"}. Поля from и to - время в формате RFC 3339, а не дата: на "2026-09-28" Ozon отвечает invalid google.protobuf.Timestamp value.
  2. Опрос статуса GET /api/client/statistics/{UUID} до готовности.
  3. Загрузка GET /api/client/statistics/report?UUID=.... Для одной кампании приходит CSV, для нескольких - ZIP-архив с CSV на каждую кампанию, имя файла начинается с ID кампании.
  • Сутки в отчете московские. Если передать to как 23:59:59 UTC, первые 3 часа следующего дня придут отдельной неполной строкой. Границы суток: from - предыдущий день T21:00:00Z, to - последний день T20:59:59Z.
  • Отчеты одного рекламного кабинета Ozon готовит по одному. Пока готовится предыдущий, новый запрос получает 429. В кабинете с 60 кампаниями отчет на 10 кампаний готовился около 190 секунд.
  • Не бросайте недождавшийся отчет: он продолжает занимать очередь кабинета, и следующие запросы упираются в него. Ждите готовности до 10 минут, на 429 повторяйте запрос с паузой.
  • В отчете товарных кампаний строки только по товарам (sku), итоговой строки кампании за день нет: итог - сумма строк товаров.
  • По кампаниям с оплатой за заказ этот отчет не строится. Их показы и расход есть в синхронных методах daily/json и expense/json.

Как сверить расход с начислениями

Ozon списывает рекламу начислениями без привязки к товару (категория NON_ITEM в /v1/finance/accrual/by-day). Сумма moneySpent из expense/json за день совпала с ними до копейки (проверено 01.10.2026).

Тип начисления (type_id)Что это
41Оплата за клик
54Продвижение товара, в том числе оплата за заказ
75Трафареты
19Внешнее продвижение
33Рекламные услуги

У начислений типа 54 за кампании с оплатой за заказ в поле номера отправления стоит ID кампании, по нему расход привязывается к кампании.

ДРР и ROAS по товару считаются по статистике кампаний, а прибыль магазина - по списаниям из начислений. Если складывать обе суммы, реклама вычтется дважды.
Эти цифры по вашему магазину

MP Index считает комиссии, логистику и прибыль каждого товара по начислениям вашего Ozon Seller API.

Открыть демо →