Расширенная аналитика Ozon API

12 POST-методов для исследования товаров и поискового спроса. Создайте ключ именно для аналитики Ozon. У направления отдельные тарифы и квота; ключ обычного Ozon не подходит.

Базовый URL: https://bhapi.ru/analytics/ozon/api/v1. Все методы принимают JSON object, Content-Type: application/json и X-API-Token: YOUR_OZON_ANALYTICS_API_TOKEN. Токен в query запрещён. Каждый успешный проверенный ответ, включая пустую выборку, расходует одну единицу квоты BHAPI.

Примеры ниже синтетические и показывают формат, а не фактические товары, цены или подтверждённые результаты. Замените SKU, бренд, категорию и ключ своими значениями. Пропущенные необязательные поля используют штатные значения по умолчанию, неизвестные значения ответа могут быть null.

12 методов аналитики Ozon
ЗадачаPOST путьРезультат
Поиск товаров/analytics/ozon/api/v1/products/searchOzonAnalyticsSearchResult
Базовая карточка товара/analytics/ozon/api/v1/products/detailOzonAnalyticsProductDetailResult
Расширенная карточка товара/analytics/ozon/api/v1/products/expanded-detailOzonAnalyticsExpandedProductResult
Отчёт по товарам/analytics/ozon/api/v1/products/reportOzonAnalyticsProductListResult
Дневная динамика товара/analytics/ozon/api/v1/products/trendOzonAnalyticsProductTrendResult
Товары бренда/analytics/ozon/api/v1/brands/productsOzonAnalyticsProductListResult
Товары по пути категории/analytics/ozon/api/v1/categories/productsOzonAnalyticsProductListResult
Аналитический поиск категории/analytics/ozon/api/v1/categories/searchOzonAnalyticsCategorySearchResult
Товары продавца/analytics/ozon/api/v1/sellers/productsOzonAnalyticsProductListResult
Обратный поиск фраз по SKU/analytics/ozon/api/v1/keywords/back-searchOzonAnalyticsKeywordListResult
Подбор поисковых фраз/analytics/ozon/api/v1/keywords/miningOzonAnalyticsKeywordListResult
Исследование поискового рынка/analytics/ozon/api/v1/keywords/market-searchOzonAnalyticsKeywordListResult

Базовая карточка товара

POST/analytics/ozon/api/v1/products/detail

Возвращает карточку одного товара и доступные показатели за выбранный период.

Когда применять: Подходит для изучения товара после поиска: проверьте сведения о бренде, продавце и доступные показатели перед сравнением с другими SKU.

  • Выбор товара: Укажите ровно одно поле: product_id или product_url.
  • Период: Необязательные start_date и end_date задают запрошенные границы. include_fbs при отсутствии не превращается в false.
  • Цена: Цена базовой карточки требует независимой сверки даже при currency=RUB и не гарантирует текущую цену сайта.

Формат и ключ: JSON; Content-Type: application/json и X-API-Token.

Учёт запросов: один проверенный успешный ответ — одна единица квоты. Ошибки успешную квоту не расходуют; подробнее в разделе ошибок.

Параметры запроса

OzonAnalyticsDetailRequest · поля
ПолеТипНаличиеОписание и ограничения
product_idstring | nullнеобязательно; null допустимОдин SKU Ozon как строка, вместо product_url; точное целое до 2^63-1. по умолчанию: null; мин. длина: 1; макс. длина: 19; формат: ^[0-9]+$.
product_urlstring | nullнеобязательно; null допустимHTTPS URL карточки ozon.ru вместо product_id; query/fragment удаляются без загрузки страницы. по умолчанию: null; макс. длина: 4096.
start_datedate | nullнеобязательно; null допустимЗапрошенное начало статистики YYYY-MM-DD; фактический период возвращается отдельно. по умолчанию: null.
end_datedate | nullнеобязательно; null допустимЗапрошенное окончание статистики YYYY-MM-DD; источник ограничивает свежесть до T-1. по умолчанию: null.
include_fbsboolean | nullнеобязательно; null допустимВключать ли данные FBS; при отсутствии действует настройка источника. по умолчанию: null.
JSON · запрос Базовая карточка товара
{
  "product_id": "123456789"
}
cURL · Базовая карточка товара
curl -X POST "https://bhapi.ru/analytics/ozon/api/v1/products/detail" \
  -H "X-API-Token: YOUR_OZON_ANALYTICS_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"product_id":"123456789"}'

Ответ

Envelope: OzonAnalyticsDetailResponse. Поля data и все вложенные типы: OzonAnalyticsProductDetailResult. Период, свежесть и предупреждения: meta. Необязательные значения не восстанавливаются из нулей или соседних методов.

JSON · ответ Базовая карточка товара
{
  "status": "success",
  "data": {
    "product": {
      "product_id": "123456789",
      "title": "Пример товара",
      "price": "1299.00",
      "currency": "RUB",
      "sales_units": 12,
      "sales_revenue": "15588.00"
    }
  },
  "meta": {
    "request_id": "00000000-0000-4000-8000-000000000001",
    "retrieved_at": "2026-10-10T12:00:01Z",
    "observed_at": "2026-10-10T12:00:00Z",
    "requested_period": null,
    "resolved_period": null,
    "snapshot_month": null,
    "freshness": "historical_or_periodic",
    "warnings": [
      "periodic_data_not_realtime",
      "coverage_and_estimation_method_unverified",
      "current_price_accuracy_unverified"
    ]
  }
}

Расширенная карточка товара

POST/analytics/ozon/api/v1/products/expanded-detail

Объединяет расширенную карточку товара, агрегаты выбранного окна и доступные исторические ряды.

Когда применять: Используйте для углублённого анализа выбранного SKU: изучите показатели одного окна, дневную динамику и историю позиций в категориях, если эти данные доступны.

  • Выбор товара: Укажите ровно одно поле: product_id или product_url.
  • Окно анализа: period_days принимает 7, 30, 60, 90, 180 или 365; по умолчанию 30. Окно past_N_days отличается от календарного месяца.
  • Состав результата: summary содержит агрегаты окна. sales_trend и category_ranks могут быть null.

Формат и ключ: JSON; Content-Type: application/json и X-API-Token.

Учёт запросов: один проверенный успешный ответ — одна единица квоты. Ошибки успешную квоту не расходуют; подробнее в разделе ошибок.

Параметры запроса

OzonAnalyticsExpandedDetailRequest · поля
ПолеТипНаличиеОписание и ограничения
product_idstring | nullнеобязательно; null допустимОдин SKU Ozon как строка, вместо product_url; точное целое до 2^63-1. по умолчанию: null; мин. длина: 1; макс. длина: 19; формат: ^[0-9]+$.
product_urlstring | nullнеобязательно; null допустимHTTPS URL карточки ozon.ru вместо product_id; query/fragment удаляются без загрузки страницы. по умолчанию: null; макс. длина: 4096.
period_daysintegerнеобязательноОкно статистики в днях: 7/30/60/90/180/365; фактические даты возвращаются в контексте. по умолчанию: 30; значения: [7, 30, 60, 90, 180, 365].
JSON · запрос Расширенная карточка товара
{
  "product_id": "123456789",
  "period_days": 30
}
cURL · Расширенная карточка товара
curl -X POST "https://bhapi.ru/analytics/ozon/api/v1/products/expanded-detail" \
  -H "X-API-Token: YOUR_OZON_ANALYTICS_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"product_id":"123456789","period_days":30}'

Ответ

Envelope: OzonAnalyticsExpandedDetailResponse. Поля data и все вложенные типы: OzonAnalyticsExpandedProductResult. Период, свежесть и предупреждения: meta. Необязательные значения не восстанавливаются из нулей или соседних методов.

JSON · ответ Расширенная карточка товара
{
  "status": "success",
  "data": {
    "product": {
      "product_id": "123456789",
      "title": "Пример товара",
      "price": "1299.00",
      "currency": "RUB",
      "sales_units": 12,
      "sales_revenue": "15588.00"
    },
    "summary": {
      "sales_units": 12,
      "sales_revenue": "15588.00",
      "sales_per_day": null,
      "stock_units": null
    },
    "sales_trend": null,
    "category_ranks": null
  },
  "meta": {
    "request_id": "00000000-0000-4000-8000-000000000001",
    "retrieved_at": "2026-10-10T12:00:01Z",
    "observed_at": "2026-10-10T12:00:00Z",
    "requested_period": {
      "start": null,
      "end": null,
      "label": "past_30_days"
    },
    "resolved_period": null,
    "snapshot_month": null,
    "freshness": "historical_or_periodic",
    "warnings": [
      "periodic_data_not_realtime",
      "coverage_and_estimation_method_unverified"
    ]
  }
}

Отчёт по товарам

POST/analytics/ozon/api/v1/products/report

Формирует выборку товаров по сочетанию характеристик и аналитических фильтров.

Когда применять: Подходит для отбора конкурентов или товаров по вашим критериям: задайте диапазоны показателей, бренд, продавца и другие условия, затем сравните результаты в одном периоде.

  • Отбор товаров: Все фильтры необязательны; product_ids содержит 1–10 SKU. fulfillment — массив до пяти значений; listing_months принимает 1/3/6/12/24.
  • Бренд и метки: brand.mode=include или exclude требует непустые names; unbranded — пустой массив. labels: 0 — новый, 1 — оригинальный, 2 — bestseller. Эти метки не подтверждают права на товар.
  • Диапазоны: review_rating ограничен 0–5. Единицы и ограничения остальных показателей смотрите в таблице параметров.
  • Период: search_date выбирает предыдущий полный месяц: 2026-04-01 → март. Без даты используется rolling30.
  • Сортировка: orders.field: sales_units, sales_revenue, price, rating, review_count, sales_growth_percent.

Формат и ключ: JSON; Content-Type: application/json и X-API-Token.

Учёт запросов: один проверенный успешный ответ — одна единица квоты. Ошибки успешную квоту не расходуют; подробнее в разделе ошибок.

Параметры запроса

OzonAnalyticsProductReportRequest · поля
ПолеТипНаличиеОписание и ограничения
pageintegerнеобязательноСтраница, начиная с 1; локальная верхняя граница 100000. по умолчанию: 1; минимум: 1; максимум: 100000.
page_sizeintegerнеобязательноСтрок на странице, от 1 до 20; локальный лимит. по умолчанию: 20; минимум: 1; максимум: 20.
ordersarray<OzonAnalyticsOrder> | nullнеобязательно; null допустимДо пяти правил сортировки; неизвестные поля отвергаются до запроса к источнику. по умолчанию: null; макс. элементов: 5.
product_idsarray<string> | nullнеобязательно; null допустимДо 10 точных SKU; разные базы могут иметь неодинаковое покрытие. по умолчанию: null; мин. элементов: 1; макс. элементов: 10; элемент — мин. длина: 1; элемент — макс. длина: 19; элемент — формат: ^[0-9]+$.
keywordsarray<string> | nullнеобязательно; null допустимФразы для фильтрации названия, локальный максимум 1000. по умолчанию: null; макс. элементов: 1000; элемент — мин. длина: 1; элемент — макс. длина: 1000.
category_idsarray<string> | nullнеобязательно; null допустимID категорий базы отчёта; не названия/пути категории. по умолчанию: null; макс. элементов: 1000; элемент — мин. длина: 1; элемент — макс. длина: 1000.
seller_namesarray<string> | nullнеобязательно; null допустимНазвания продавцов; не seller ID. по умолчанию: null; макс. элементов: 1000; элемент — мин. длина: 1; элемент — макс. длина: 1000.
brandOzonAnalyticsBrandFilter | nullнеобязательно; null допустимВключение/исключение названий брендов или отбор без бренда. по умолчанию: null.
fulfillmentarray<string> | nullнеобязательно; null допустимМассив способов доставки OZON/FBO/FBS/RFBS/FBP. по умолчанию: null; макс. элементов: 5; элемент — значения: ["OZON", "FBO", "FBS", "RFBS", "FBP"].
labelsarray<integer> | nullнеобязательно; null допустимМетки: 0 новый товар, 1 оригинальный, 2 bestseller; не подтверждение прав на товар. по умолчанию: null; макс. элементов: 3; элемент — значения: [0, 1, 2].
listing_monthsinteger | nullнеобязательно; null допустимВозраст размещения: последние 1/3/6/12/24 месяца. по умолчанию: null; значения: [1, 3, 6, 12, 24].
merge_variantsboolean | nullнеобязательно; null допустимОбъединять ли варианты в статистике;. по умолчанию: null.
search_datedate | nullнеобязательно; null допустимДата выбора предыдущего полного месяца; 2026-04-01 означает март, не апрель MTD. по умолчанию: null.
tagstring | nullнеобязательно; null допустимДополнительный тег источника; методика интерпретации не установлена. по умолчанию: null; мин. длина: 1; макс. длина: 1000.
monthly_salesOzonAnalyticsNumericRange | nullнеобязательно; null допустимЕдиницы продаж в выбранном периоде, несмотря на название поля monthly_sales. по умолчанию: null.
monthly_sales_rateOzonAnalyticsNumericRange | nullнеобязательно; null допустимРост продаж, проценты; отрицательная граница допустима. по умолчанию: null.
monthly_revenueOzonAnalyticsNumericRange | nullнеобязательно; null допустимВыручка источника за период, RUB; не подтверждённые оплаченные продажи. по умолчанию: null.
priceOzonAnalyticsNumericRange | nullнеобязательно; null допустимЦена в RUB; актуальность цены требует независимой сверки. по умолчанию: null.
conv_to_cart_pdpOzonAnalyticsNumericRange | nullнеобязательно; null допустимКонверсия корзины, проценты по документации. по умолчанию: null.
review_ratingOzonAnalyticsNumericRange | nullнеобязательно; null допустимРейтинг, шкала 0..5. по умолчанию: null.
review_countOzonAnalyticsNumericRange | nullнеобязательно; null допустимЧисло отзывов, единицы. по умолчанию: null.
questions_and_answersOzonAnalyticsNumericRange | nullнеобязательно; null допустимЧисло вопросов/ответов по определению источника. по умолчанию: null.
variantsOzonAnalyticsNumericRange | nullнеобязательно; null допустимЧисло вариантов товара. по умолчанию: null.
drrOzonAnalyticsNumericRange | nullнеобязательно; null допустимРасход на рекламу; шкала входного фильтра не подтверждена, сохраняется без пересчёта. по умолчанию: null.
gross_marginOzonAnalyticsNumericRange | nullнеобязательно; null допустимВаловая маржа по методике источника, проценты. по умолчанию: null.
return_cancellation_rateOzonAnalyticsNumericRange | nullнеобязательно; null допустимОбъединённая доля возвратов/отмен, проценты. по умолчанию: null.
weightOzonAnalyticsNumericRange | nullнеобязательно; null допустимМасса в граммах; включение упаковки неизвестно. по умолчанию: null.
volumeOzonAnalyticsNumericRange | nullнеобязательно; null допустимОбъём в литрах; предмет или упаковка не установлены. по умолчанию: null.
JSON · запрос Отчёт по товарам
{
  "product_ids": [
    "123456789"
  ],
  "page": 1,
  "page_size": 1
}
cURL · Отчёт по товарам
curl -X POST "https://bhapi.ru/analytics/ozon/api/v1/products/report" \
  -H "X-API-Token: YOUR_OZON_ANALYTICS_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"product_ids":["123456789"],"page":1,"page_size":1}'

Ответ

Envelope: OzonAnalyticsReportResponse. Поля data и все вложенные типы: OzonAnalyticsProductListResult. Период, свежесть и предупреждения: meta. Необязательные значения не восстанавливаются из нулей или соседних методов.

JSON · ответ Отчёт по товарам
{
  "status": "success",
  "data": {
    "items": [
      {
        "product_id": "123456789",
        "title": "Пример товара",
        "price": "1299.00",
        "currency": "RUB",
        "sales_units": 12,
        "sales_revenue": "15588.00"
      }
    ],
    "pagination": {
      "page": 1,
      "page_size": 1,
      "returned_count": 1,
      "total_count": null,
      "source_total": null,
      "source_total_semantics": "matched_count",
      "has_next": null
    }
  },
  "meta": {
    "request_id": "00000000-0000-4000-8000-000000000001",
    "retrieved_at": "2026-10-10T12:00:01Z",
    "observed_at": "2026-10-10T12:00:00Z",
    "requested_period": null,
    "resolved_period": null,
    "snapshot_month": null,
    "freshness": "historical_or_periodic",
    "warnings": [
      "periodic_data_not_realtime",
      "coverage_and_estimation_method_unverified"
    ]
  }
}

Дневная динамика товара

POST/analytics/ozon/api/v1/products/trend

Возвращает дневные точки продаж, цен и доступных остатков одного SKU.

Когда применять: Используйте, чтобы изучить изменение показателей по дням и отделить дни с данными от пропусков. Это полезно при анализе колебаний продаж или изменения цены.

  • Выбор товара: Укажите ровно одно поле: product_id или product_url. include_fbs и include_search_stats необязательны.
  • Дневной ряд: Точки отсортированы по дате; пропуски не интерполируются. has_data=false означает отсутствие данных, а не нулевые продажи.
  • Остатки: stock_units описывает FBO и не гарантирует полный складской остаток.

Формат и ключ: JSON; Content-Type: application/json и X-API-Token.

Учёт запросов: один проверенный успешный ответ — одна единица квоты. Ошибки успешную квоту не расходуют; подробнее в разделе ошибок.

Параметры запроса

OzonAnalyticsTrendRequest · поля
ПолеТипНаличиеОписание и ограничения
product_idstring | nullнеобязательно; null допустимОдин SKU Ozon как строка, вместо product_url; точное целое до 2^63-1. по умолчанию: null; мин. длина: 1; макс. длина: 19; формат: ^[0-9]+$.
product_urlstring | nullнеобязательно; null допустимHTTPS URL карточки ozon.ru вместо product_id; query/fragment удаляются без загрузки страницы. по умолчанию: null; макс. длина: 4096.
start_datedate | nullнеобязательно; null допустимЗапрошенное начало статистики YYYY-MM-DD; фактический период возвращается отдельно. по умолчанию: null.
end_datedate | nullнеобязательно; null допустимЗапрошенное окончание статистики YYYY-MM-DD; источник ограничивает свежесть до T-1. по умолчанию: null.
include_fbsboolean | nullнеобязательно; null допустимВключать ли данные FBS; при отсутствии действует настройка источника. по умолчанию: null.
include_search_statsboolean | nullнеобязательно; null допустимЗапросить search stats; доступны не всем нишам, coverage и поля требуют подтверждения. по умолчанию: null.
JSON · запрос Дневная динамика товара
{
  "product_id": "123456789",
  "start_date": "2026-09-01",
  "end_date": "2026-09-03"
}
cURL · Дневная динамика товара
curl -X POST "https://bhapi.ru/analytics/ozon/api/v1/products/trend" \
  -H "X-API-Token: YOUR_OZON_ANALYTICS_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"product_id":"123456789","start_date":"2026-09-01","end_date":"2026-09-03"}'

Ответ

Envelope: OzonAnalyticsTrendResponse. Поля data и все вложенные типы: OzonAnalyticsProductTrendResult. Период, свежесть и предупреждения: meta. Необязательные значения не восстанавливаются из нулей или соседних методов.

JSON · ответ Дневная динамика товара
{
  "status": "success",
  "data": {
    "product_id": "123456789",
    "points": [
      {
        "date": "2026-09-01",
        "has_data": false,
        "sales_units": null,
        "stock_units": null
      }
    ]
  },
  "meta": {
    "request_id": "00000000-0000-4000-8000-000000000001",
    "retrieved_at": "2026-10-10T12:00:01Z",
    "observed_at": "2026-10-10T12:00:00Z",
    "requested_period": {
      "start": "2026-09-01",
      "end": "2026-09-03",
      "label": null
    },
    "resolved_period": null,
    "snapshot_month": null,
    "freshness": "historical_or_periodic",
    "warnings": [
      "periodic_data_not_realtime",
      "coverage_and_estimation_method_unverified"
    ]
  }
}

Товары бренда

POST/analytics/ozon/api/v1/brands/products

Собирает товары выбранного бренда с доступными аналитическими показателями.

Когда применять: Подходит для исследования ассортимента бренда: отсортируйте товары по нужной метрике и отберите позиции для дальнейшего сравнения.

  • Бренд: brand_name — название бренда, а не ID.
  • Настройки выборки: Действуют общие правила drill-down: page до 100000, page_size до 100, парная сортировка, валюта и AND-фильтры.
  • Охват: Полнота рынка не гарантируется.

Формат и ключ: JSON; Content-Type: application/json и X-API-Token.

Учёт запросов: один проверенный успешный ответ — одна единица квоты. Ошибки успешную квоту не расходуют; подробнее в разделе ошибок.

Параметры запроса

OzonAnalyticsBrandRequest · поля
ПолеТипНаличиеОписание и ограничения
start_datedate | nullнеобязательно; null допустимЗапрошенное начало статистики YYYY-MM-DD; фактический период возвращается отдельно. по умолчанию: null.
end_datedate | nullнеобязательно; null допустимЗапрошенное окончание статистики YYYY-MM-DD; источник ограничивает свежесть до T-1. по умолчанию: null.
pageintegerнеобязательноСтраница с 1; локальная верхняя граница 100000. по умолчанию: 1; минимум: 1; максимум: 100000.
page_sizeintegerнеобязательноОт 1 до 100 строк на странице, по умолчанию 100. по умолчанию: 100; минимум: 1; максимум: 100.
sort_fieldstring | nullнеобязательно; null допустимПоказатель сортировки из разрешённого списка разрешённых значений. по умолчанию: null; значения: ["sales_units", "sales_revenue", "price", "stock_units", "rating", "review_count", "days_in_stock", "turnover_days", "lost_revenue", "category_position"].
sort_directionstring | nullнеобязательно; null допустимНаправление сортировки; задаётся вместе с sort_field. по умолчанию: null; значения: ["asc", "desc"].
currencystringнеобязательноЗапрошенная валюта цен/денежных показателей; корректность преобразования определяется источником. по умолчанию: "RUB"; значения: ["RUB", "USD", "EUR", "CNY"].
currency_rateinteger | nullнеобязательно; null допустимПользовательский курс для не-RUB валюты; источник документирует целое число. по умолчанию: null; максимум: 1000000.
include_fbsboolean | nullнеобязательно; null допустимВключать ли FBS показатели; отсутствующее поле не заменяется false. по умолчанию: null.
filtersarray<OzonAnalyticsNumericFilter> | nullнеобязательно; null допустимДо 20 условий, объединённых AND; каждое условие передаётся без дополнительного запроса. по умолчанию: null; макс. элементов: 20.
brand_namestringобязательноОтображаемое название бренда на русском или латинице, не brand ID. мин. длина: 1; макс. длина: 1000.
JSON · запрос Товары бренда
{
  "brand_name": "Пример",
  "page": 1,
  "page_size": 1
}
cURL · Товары бренда
curl -X POST "https://bhapi.ru/analytics/ozon/api/v1/brands/products" \
  -H "X-API-Token: YOUR_OZON_ANALYTICS_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"brand_name":"Пример","page":1,"page_size":1}'

Ответ

Envelope: OzonAnalyticsBrandProductsResponse. Поля data и все вложенные типы: OzonAnalyticsProductListResult. Период, свежесть и предупреждения: meta. Необязательные значения не восстанавливаются из нулей или соседних методов.

JSON · ответ Товары бренда
{
  "status": "success",
  "data": {
    "items": [
      {
        "product_id": "123456789",
        "title": "Пример товара",
        "price": "1299.00",
        "currency": "RUB",
        "sales_units": 12,
        "sales_revenue": "15588.00"
      }
    ],
    "pagination": {
      "page": 1,
      "page_size": 1,
      "returned_count": 1,
      "total_count": null,
      "source_total": null,
      "source_total_semantics": "unknown",
      "has_next": null
    }
  },
  "meta": {
    "request_id": "00000000-0000-4000-8000-000000000001",
    "retrieved_at": "2026-10-10T12:00:01Z",
    "observed_at": "2026-10-10T12:00:00Z",
    "requested_period": null,
    "resolved_period": null,
    "snapshot_month": null,
    "freshness": "historical_or_periodic",
    "warnings": [
      "periodic_data_not_realtime",
      "coverage_and_estimation_method_unverified",
      "total_semantics_unknown"
    ]
  }
}

Товары по пути категории

POST/analytics/ozon/api/v1/categories/products

Возвращает подборку товаров из выбранной ветки каталога, заданной полным путём категории.

Когда применять: Используйте для исследования конкурентов внутри конкретной категории, когда вам известен её русский путь в каталоге.

  • Категория: category_path — полный русский путь с разделителями /. Это отдельный селектор; category_id и niche_id здесь не используются.
  • Настройки выборки: Действуют общие правила drill-down: пагинация, парная сортировка, валюта и AND-фильтры.
  • Количество результатов: total источника может иметь неизвестную семантику; не трактуйте его как полный размер категории.

Формат и ключ: JSON; Content-Type: application/json и X-API-Token.

Учёт запросов: один проверенный успешный ответ — одна единица квоты. Ошибки успешную квоту не расходуют; подробнее в разделе ошибок.

Параметры запроса

OzonAnalyticsCategoryProductsRequest · поля
ПолеТипНаличиеОписание и ограничения
start_datedate | nullнеобязательно; null допустимЗапрошенное начало статистики YYYY-MM-DD; фактический период возвращается отдельно. по умолчанию: null.
end_datedate | nullнеобязательно; null допустимЗапрошенное окончание статистики YYYY-MM-DD; источник ограничивает свежесть до T-1. по умолчанию: null.
pageintegerнеобязательноСтраница с 1; локальная верхняя граница 100000. по умолчанию: 1; минимум: 1; максимум: 100000.
page_sizeintegerнеобязательноОт 1 до 100 строк на странице, по умолчанию 100. по умолчанию: 100; минимум: 1; максимум: 100.
sort_fieldstring | nullнеобязательно; null допустимПоказатель сортировки из разрешённого списка разрешённых значений. по умолчанию: null; значения: ["sales_units", "sales_revenue", "price", "stock_units", "rating", "review_count", "days_in_stock", "turnover_days", "lost_revenue", "category_position"].
sort_directionstring | nullнеобязательно; null допустимНаправление сортировки; задаётся вместе с sort_field. по умолчанию: null; значения: ["asc", "desc"].
currencystringнеобязательноЗапрошенная валюта цен/денежных показателей; корректность преобразования определяется источником. по умолчанию: "RUB"; значения: ["RUB", "USD", "EUR", "CNY"].
currency_rateinteger | nullнеобязательно; null допустимПользовательский курс для не-RUB валюты; источник документирует целое число. по умолчанию: null; максимум: 1000000.
include_fbsboolean | nullнеобязательно; null допустимВключать ли FBS показатели; отсутствующее поле не заменяется false. по умолчанию: null.
filtersarray<OzonAnalyticsNumericFilter> | nullнеобязательно; null допустимДо 20 условий, объединённых AND; каждое условие передаётся без дополнительного запроса. по умолчанию: null; макс. элементов: 20.
category_pathstringобязательноПолный русский путь категории, уровни разделены /; не category ID другой базы. мин. длина: 1; макс. длина: 1000.
JSON · запрос Товары по пути категории
{
  "category_path": "Дом / Кухня",
  "page": 1,
  "page_size": 1
}
cURL · Товары по пути категории
curl -X POST "https://bhapi.ru/analytics/ozon/api/v1/categories/products" \
  -H "X-API-Token: YOUR_OZON_ANALYTICS_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"category_path":"Дом / Кухня","page":1,"page_size":1}'

Ответ

Envelope: OzonAnalyticsCategoryProductsResponse. Поля data и все вложенные типы: OzonAnalyticsProductListResult. Период, свежесть и предупреждения: meta. Необязательные значения не восстанавливаются из нулей или соседних методов.

JSON · ответ Товары по пути категории
{
  "status": "success",
  "data": {
    "items": [
      {
        "product_id": "123456789",
        "title": "Пример товара",
        "price": "1299.00",
        "currency": "RUB",
        "sales_units": 12,
        "sales_revenue": "15588.00"
      }
    ],
    "pagination": {
      "page": 1,
      "page_size": 1,
      "returned_count": 1,
      "total_count": null,
      "source_total": null,
      "source_total_semantics": "unknown",
      "has_next": null
    }
  },
  "meta": {
    "request_id": "00000000-0000-4000-8000-000000000001",
    "retrieved_at": "2026-10-10T12:00:01Z",
    "observed_at": "2026-10-10T12:00:00Z",
    "requested_period": null,
    "resolved_period": null,
    "snapshot_month": null,
    "freshness": "historical_or_periodic",
    "warnings": [
      "periodic_data_not_realtime",
      "coverage_and_estimation_method_unverified",
      "total_semantics_unknown"
    ]
  }
}

Товары продавца

POST/analytics/ozon/api/v1/sellers/products

Возвращает ассортимент конкретного продавца с доступными показателями товаров.

Когда применять: Используйте для исследования магазина или продавца-конкурента: найдите его SKU и отберите позиции по аналитическим фильтрам.

  • Продавец: seller_id — отдельная строгая строка; отрицательные значения допустимы. Этот параметр отличается от seller_names в отчёте по товарам.
  • Настройки выборки: Действуют общие правила drill-down. Рейтинг и позиция зависят от измерения и периода.

Формат и ключ: JSON; Content-Type: application/json и X-API-Token.

Учёт запросов: один проверенный успешный ответ — одна единица квоты. Ошибки успешную квоту не расходуют; подробнее в разделе ошибок.

Параметры запроса

OzonAnalyticsSellerRequest · поля
ПолеТипНаличиеОписание и ограничения
start_datedate | nullнеобязательно; null допустимЗапрошенное начало статистики YYYY-MM-DD; фактический период возвращается отдельно. по умолчанию: null.
end_datedate | nullнеобязательно; null допустимЗапрошенное окончание статистики YYYY-MM-DD; источник ограничивает свежесть до T-1. по умолчанию: null.
pageintegerнеобязательноСтраница с 1; локальная верхняя граница 100000. по умолчанию: 1; минимум: 1; максимум: 100000.
page_sizeintegerнеобязательноОт 1 до 100 строк на странице, по умолчанию 100. по умолчанию: 100; минимум: 1; максимум: 100.
sort_fieldstring | nullнеобязательно; null допустимПоказатель сортировки из разрешённого списка разрешённых значений. по умолчанию: null; значения: ["sales_units", "sales_revenue", "price", "stock_units", "rating", "review_count", "days_in_stock", "turnover_days", "lost_revenue", "category_position"].
sort_directionstring | nullнеобязательно; null допустимНаправление сортировки; задаётся вместе с sort_field. по умолчанию: null; значения: ["asc", "desc"].
currencystringнеобязательноЗапрошенная валюта цен/денежных показателей; корректность преобразования определяется источником. по умолчанию: "RUB"; значения: ["RUB", "USD", "EUR", "CNY"].
currency_rateinteger | nullнеобязательно; null допустимПользовательский курс для не-RUB валюты; источник документирует целое число. по умолчанию: null; максимум: 1000000.
include_fbsboolean | nullнеобязательно; null допустимВключать ли FBS показатели; отсутствующее поле не заменяется false. по умолчанию: null.
filtersarray<OzonAnalyticsNumericFilter> | nullнеобязательно; null допустимДо 20 условий, объединённых AND; каждое условие передаётся без дополнительного запроса. по умолчанию: null; макс. элементов: 20.
seller_idstringобязательноID продавца строкой; отрицательные значения возможны у собственных магазинов Ozon. формат: ^-?[0-9]{1,19}$.
JSON · запрос Товары продавца
{
  "seller_id": "-12345",
  "page": 1,
  "page_size": 1
}
cURL · Товары продавца
curl -X POST "https://bhapi.ru/analytics/ozon/api/v1/sellers/products" \
  -H "X-API-Token: YOUR_OZON_ANALYTICS_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"seller_id":"-12345","page":1,"page_size":1}'

Ответ

Envelope: OzonAnalyticsSellerProductsResponse. Поля data и все вложенные типы: OzonAnalyticsProductListResult. Период, свежесть и предупреждения: meta. Необязательные значения не восстанавливаются из нулей или соседних методов.

JSON · ответ Товары продавца
{
  "status": "success",
  "data": {
    "items": [
      {
        "product_id": "123456789",
        "title": "Пример товара",
        "price": "1299.00",
        "currency": "RUB",
        "sales_units": 12,
        "sales_revenue": "15588.00"
      }
    ],
    "pagination": {
      "page": 1,
      "page_size": 1,
      "returned_count": 1,
      "total_count": null,
      "source_total": null,
      "source_total_semantics": "unknown",
      "has_next": null
    }
  },
  "meta": {
    "request_id": "00000000-0000-4000-8000-000000000001",
    "retrieved_at": "2026-10-10T12:00:01Z",
    "observed_at": "2026-10-10T12:00:00Z",
    "requested_period": null,
    "resolved_period": null,
    "snapshot_month": null,
    "freshness": "historical_or_periodic",
    "warnings": [
      "periodic_data_not_realtime",
      "coverage_and_estimation_method_unverified",
      "total_semantics_unknown"
    ]
  }
}

Подбор поисковых фраз

POST/analytics/ozon/api/v1/keywords/mining

Расширяет исходную поисковую фразу и возвращает связанные фразы с доступными показателями.

Когда применять: Используйте для расширения семантики: соберите кандидатов для исследования спроса или подготовки описания товара и отберите их по доступным метрикам.

  • Исходная фраза: keyword — обязательная непустая фраза.
  • Отбор и сортировка: Действуют общие правила keyword-фильтров и сортировки. Дополнительно доступны price и relevancy.
  • Релевантность: Шкала relevancy не установлена и не пересчитывается.

Формат и ключ: JSON; Content-Type: application/json и X-API-Token.

Учёт запросов: один проверенный успешный ответ — одна единица квоты. Ошибки успешную квоту не расходуют; подробнее в разделе ошибок.

Параметры запроса

OzonAnalyticsMiningRequest · поля
ПолеТипНаличиеОписание и ограничения
pageintegerнеобязательноСтраница, начиная с 1; локальная верхняя граница 100000. по умолчанию: 1; минимум: 1; максимум: 100000.
page_sizeintegerнеобязательноСтрок на странице, от 1 до 20; локальный лимит. по умолчанию: 20; минимум: 1; максимум: 20.
ordersarray<OzonAnalyticsOrder> | nullнеобязательно; null допустимДо пяти правил сортировки; неизвестные поля отвергаются до запроса к источнику. по умолчанию: null; макс. элементов: 5.
match_typestring | nullнеобязательно; null допустимСовпадение ключевой фразы: exact или fuzzy;. по умолчанию: null; значения: ["exact", "fuzzy"].
include_keywordsarray<string> | nullнеобязательно; null допустимДо 1000 включаемых слов/фраз для сужения выборки. по умолчанию: null; макс. элементов: 1000; элемент — мин. длина: 1; элемент — макс. длина: 1000.
exclude_keywordsarray<string> | nullнеобязательно; null допустимДо 1000 исключаемых слов/фраз. по умолчанию: null; макс. элементов: 1000; элемент — мин. длина: 1; элемент — макс. длина: 1000.
search_volumeOzonAnalyticsNumericRange | nullнеобязательно; null допустимМесячное число запросов по методике источника. по умолчанию: null.
search_change30OzonAnalyticsNumericRange | nullнеобязательно; null допустимРост поискового спроса за 30 дней; проценты, включая отрицательные. по умолчанию: null.
word_countOzonAnalyticsNumericRange | nullнеобязательно; null допустимКоличество слов во фразе. по умолчанию: null.
product_viewsOzonAnalyticsNumericRange | nullнеобязательно; null допустимВидимость/просмотры товаров по методике источника; не уникальные посетители. по умолчанию: null.
productsOzonAnalyticsNumericRange | nullнеобязательно; null допустимКоличество товаров в поисковой выборке. по умолчанию: null.
sellersOzonAnalyticsNumericRange | nullнеобязательно; null допустимКоличество продавцов. по умолчанию: null.
market_spaceOzonAnalyticsNumericRange | nullнеобязательно; null допустимРыночное пространство; формула и единица не установлены. по умолчанию: null.
conversion_sharingOzonAnalyticsNumericRange | nullнеобязательно; null допустимКонцентрация конверсии, проценты по документации. по умолчанию: null.
uniq_queries_w_caOzonAnalyticsNumericRange | nullнеобязательно; null допустимЧисло добавлений в корзину по источника определению. по умолчанию: null.
caOzonAnalyticsNumericRange | nullнеобязательно; null допустимКонверсия добавления в корзину, проценты. по умолчанию: null.
title_densityOzonAnalyticsNumericRange | nullнеобязательно; null допустимПлотность фразы в названиях; шкала неизвестна. по умолчанию: null.
ad_rival_countOzonAnalyticsNumericRange | nullнеобязательно; null допустимКоличество рекламных конкурентов. по умолчанию: null.
keywordstringобязательноИсходная фраза для расширения семантики, до 1000 символов. мин. длина: 1; макс. длина: 1000.
priceOzonAnalyticsNumericRange | nullнеобязательно; null допустимЦеновой фильтр Mining; валюта/кодирование источника требуют проверки. по умолчанию: null.
relevancyOzonAnalyticsNumericRange | nullнеобязательно; null допустимРелевантность исходной фразе; шкала источника не установлена. по умолчанию: null.
JSON · запрос Подбор поисковых фраз
{
  "keyword": "термокружка",
  "page": 1,
  "page_size": 1
}
cURL · Подбор поисковых фраз
curl -X POST "https://bhapi.ru/analytics/ozon/api/v1/keywords/mining" \
  -H "X-API-Token: YOUR_OZON_ANALYTICS_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"keyword":"термокружка","page":1,"page_size":1}'

Ответ

Envelope: OzonAnalyticsKeywordMiningResponse. Поля data и все вложенные типы: OzonAnalyticsKeywordListResult. Период, свежесть и предупреждения: meta. Необязательные значения не восстанавливаются из нулей или соседних методов.

JSON · ответ Подбор поисковых фраз
{
  "status": "success",
  "data": {
    "items": [
      {
        "platform": 0,
        "keyword": "термокружка",
        "average_price": null,
        "dimension": null
      }
    ],
    "pagination": {
      "page": 1,
      "page_size": 1,
      "returned_count": 1,
      "total_count": null,
      "source_total": null,
      "source_total_semantics": "matched_count",
      "has_next": null
    },
    "excluded_platform_count": 0
  },
  "meta": {
    "request_id": "00000000-0000-4000-8000-000000000001",
    "retrieved_at": "2026-10-10T12:00:01Z",
    "observed_at": "2026-10-10T12:00:00Z",
    "requested_period": null,
    "resolved_period": null,
    "snapshot_month": null,
    "freshness": "historical_or_periodic",
    "warnings": [
      "periodic_data_not_realtime",
      "coverage_and_estimation_method_unverified"
    ]
  }
}

Общие правила запросов

Формат и типы

  • Неизвестные поля запрещены на всех уровнях.
  • Integer и boolean строгие: строки и bool вместо числа не принимаются.
  • Текст — непустая строка 1–1000 символов, состоящая не только из пробелов.
  • JSON ограничен 1 MiB; дублирующиеся ключи, NaN/Infinity и некорректные типы отвергаются.

Идентификаторы товаров

  • SKU — строка из 1–19 ASCII цифр, значение от 1 до 9223372036854775807.
  • Ведущие нули учитываются при поиске дублей: "01" и "1" — один товар.
  • Seller ID может быть отрицательным.
  • Category ID — цифры и иерархические разделители _, до 1000 символов.

Ссылка на товар

  • Identity selector: ровно один непустой product_id или product_url.
  • URL до 4096 символов: HTTPS, ozon.ru или www.ozon.ru, без порта, userinfo, пробелов, управляющих символов и обратной косой черты.
  • Путь /product/<sku>/ либо /product/<slug>-<sku>/; конечный slash необязателен.
  • Query/fragment не участвуют в извлечении SKU.
  • BHAPI не загружает URL товара.

Даты и период

  • Даты — действительные YYYY-MM-DD, месяцы — YYYY-MM.
  • Если обе границы заданы, start_date ≤ end_date; одна граница допустима.
  • Параметры не меняются из-за T-1 ограничения свежести источника.

Числовые диапазоны и фильтры

  • NumericRange: хотя бы одна непустая min/max, min ≤ max.
  • NumericFilter.value/value2 и границы принимают только конечные JSON numbers, без строк и bool; не более 64 символов десятичного представления, абсолютный adjusted exponent ≤63.
  • BETWEEN требует value2 ≥ value; прочие операторы запрещают value2.
  • Все условия filters объединены AND, до 20 элементов.

Сортировка и валюта выборки

  • Drill-down (бренд/путь категории/продавец): sort_field и sort_direction задаются вместе.
  • Поля сортировки совпадают с NumericFilter.field.
  • Валюта RUB/USD/EUR/CNY; currency_rate — целое 1–1000000 только для не-RUB валюты.
  • BHAPI не вычисляет курс.

Пагинация и порядок выдачи

  • Аналитическая пагинация report/category-search/keywords: page 1–100000 (default 1), page_size 1–20 (default 20).
  • Drill-down page_size 1–100 (default 100).
  • До 5 orders, direction asc/desc (default desc).
  • Keyword orders.field: search_volume, search_growth_percent, word_count, average_price, product_count, sellers_count, market_space, relevance, title_density, add_to_cart_count.
  • Разрешённые поля Report и Category Search указаны у методов.

Поисковые фразы

  • Keyword match_type: exact/fuzzy/null.
  • include_keywords/exclude_keywords — до 1000 непустых строк.
  • Фильтры не назначают неизвестным шкалам искусственных границ или единиц; значения конкретного метода описаны в таблице.

OzonAnalyticsNumericRange

OzonAnalyticsNumericRange · поля
ПолеТипНаличиеОписание и ограничения
minnumber | nullнеобязательно; null допустимНижняя конечная граница включительно; единица определяется фильтром. по умолчанию: null.
maxnumber | nullнеобязательно; null допустимВерхняя конечная граница включительно; единица определяется фильтром. по умолчанию: null.

OzonAnalyticsNumericFilter

OzonAnalyticsNumericFilter · поля
ПолеТипНаличиеОписание и ограничения
fieldstringобязательноРазрешённый числовой показатель фильтрации; price — конечная цена, sales_units — единицы за период. значения: ["sales_units", "sales_revenue", "price", "stock_units", "rating", "review_count", "days_in_stock", "turnover_days", "lost_revenue", "category_position"].
opstringобязательноОператор сравнения; BETWEEN включает обе границы. значения: ["GTE", "LTE", "GT", "LT", "EQ", "NOT_EQ", "BETWEEN"].
valuenumberобязательноКонечное числовое значение или нижняя граница BETWEEN; единица зависит от field.
value2number | nullнеобязательно; null допустимВерхняя граница BETWEEN, обязательна только для этого оператора. по умолчанию: null.

OzonAnalyticsBrandFilter

OzonAnalyticsBrandFilter · поля
ПолеТипНаличиеОписание и ограничения
namesarray<string>необязательноНазвания включаемых/исключаемых брендов; для unbranded массив пуст. макс. элементов: 1000; элемент — мин. длина: 1; элемент — макс. длина: 1000.
modestringобязательноРежим бренда: включить, исключить или только без бренда. значения: ["include", "exclude", "unbranded"].

OzonAnalyticsOrder

OzonAnalyticsOrder · поля
ПолеТипНаличиеОписание и ограничения
fieldstringобязательноРазрешённый публичный показатель сортировки; списка разрешённых значений зависит от метода. мин. длина: 1; макс. длина: 1000.
directionstringнеобязательноНаправление сортировки: asc или desc. по умолчанию: "desc"; значения: ["asc", "desc"].

Полная структура ответов

status="success", data и meta присутствуют явно. Поля ниже образуют полный справочник вложенных типов. В таблицах «необязательно; null допустим» означает неизвестное или отсутствующее значение; это не ноль. Все денежные Decimal поля передаются строками с сохранением точности.

OzonAnalyticsCategoryInfo

OzonAnalyticsCategoryInfo · поля
ПолеТипНаличиеОписание и ограничения
categoryOzonAnalyticsCategoryNode | nullнеобязательно; null допустимКонечный узел категории; отсутствующий объект null. по умолчанию: null.
full_category_idsarray<string> | nullнеобязательно; null допустимИерархия ID от корня до листа. по умолчанию: null.
title_pathstring | nullнеобязательно; null допустимРусский путь категории. по умолчанию: null.
cn_title_pathstring | nullнеобязательно; null допустимКитайский путь категории. по умолчанию: null.
en_title_pathstring | nullнеобязательно; null допустимАнглийский путь категории. по умолчанию: null.

OzonAnalyticsCategoryNode

OzonAnalyticsCategoryNode · поля
ПолеТипНаличиеОписание и ограничения
idstring | nullнеобязательно; null допустимID категории, сохраняет иерархические разделители. по умолчанию: null.
pidstring | nullнеобязательно; null допустимID родительской категории. по умолчанию: null.
titlestring | nullнеобязательно; null допустимНазвание категории на русском/исходном языке. по умолчанию: null.
cn_titlestring | nullнеобязательно; null допустимКитайское название категории, если присутствует. по умолчанию: null.
en_titlestring | nullнеобязательно; null допустимАнглийское название категории, если присутствует. по умолчанию: null.
levelinteger | nullнеобязательно; null допустимУровень категории в иерархии. по умолчанию: null.
cross_border_sellableboolean | nullнеобязательно; null допустимПоддержка трансграничной продажи по данным источника. по умолчанию: null.
disabledboolean | nullнеобязательно; null допустимПризнак отключённой категории; неизвестно=null. по умолчанию: null.

OzonAnalyticsCategoryRank

OzonAnalyticsCategoryRank · поля
ПолеТипНаличиеОписание и ограничения
period_labelstring | nullнеобязательно; null допустимИсходная метка YYYY-MM или YYYY-MM-DD, без выдуманного дня. по умолчанию: null.
rankinteger | nullнеобязательно; null допустимПозиция в категории по источнику. по умолчанию: null.
source_countinteger | nullнеобязательно; null допустимСчётчик источника с нераскрытой семантикой; не единицы продаж. по умолчанию: null.

OzonAnalyticsCategorySearchResult

OzonAnalyticsCategorySearchResult · поля
ПолеТипНаличиеОписание и ограничения
itemsarray<OzonAnalyticsProductCard>обязательноТовары текущей страницы с доступными показателями, отсутствующие значения — null.
paginationOzonAnalyticsPaginationобязательноСтраница, исходный total и доказанное наличие продолжения.
category_infoOzonAnalyticsCategoryInfo | nullнеобязательно; null допустимOzonAnalyticsКонтекст выбранной категории, отдельно от категории каждой строки. по умолчанию: null.
category_summaryOzonAnalyticsCategorySummaryобязательноАгрегаты категории, не текущей страницы.

OzonAnalyticsCategorySummary

OzonAnalyticsCategorySummary · поля
ПолеТипНаличиеОписание и ограничения
sales_unitsinteger | nullнеобязательно; null допустимПродажи всей категории за фактический период, не сумма страницы. по умолчанию: null.
sales_revenuestring | nullнеобязательно; null допустимВыручка категории за период, десятичная строка в RUB по docs. по умолчанию: null.
average_pricestring | nullнеобязательно; null допустимСредняя цена категории, десятичная строка. по умолчанию: null.
ratingnumber | nullнеобязательно; null допустимСредний рейтинг категории. по умолчанию: null.
seasonality_strengthstring | nullнеобязательно; null допустимСтроковая интенсивность сезонности; не числовая доля. по умолчанию: null.
seasonality_phasestring | nullнеобязательно; null допустимСтроковая фаза сезонности. по умолчанию: null.
fulfillment_distributionobject | nullнеобязательно; null допустимЧисла товаров по fulfillment; не страна происхождения продавца. по умолчанию: null.

OzonAnalyticsExpandedProductResult

OzonAnalyticsExpandedProductResult · поля
ПолеТипНаличиеОписание и ограничения
productOzonAnalyticsProductCardобязательноОдна карточка; ошибка источника не превращается в пустую карточку.
summaryOzonAnalyticsSummaryобязательноАгрегаты выбранного окна источника.
sales_trendarray<OzonAnalyticsTrendPoint> | nullнеобязательно; null допустимДневные точки выбранного окна, без интерполяции; null при отсутствии контейнера. по умолчанию: null.
category_ranksarray<OzonAnalyticsCategoryRank> | nullнеобязательно; null допустимИстория категорийных позиций, месячные labels сохраняются. по умолчанию: null.

OzonAnalyticsKeywordCategoryInfo

OzonAnalyticsKeywordCategoryInfo · поля
ПолеТипНаличиеОписание и ограничения
idstring | nullнеобязательно; null допустимID категории ключевой фразы. по умолчанию: null.
title_cnstring | nullнеобязательно; null допустимНазвание категории на китайском. по умолчанию: null.
title_enstring | nullнеобязательно; null допустимНазвание категории на английском. по умолчанию: null.
title_rustring | nullнеобязательно; null допустимНазвание категории на русском. по умолчанию: null.
cn_title_pathstring | nullнеобязательно; null допустимКитайский путь категории. по умолчанию: null.
en_title_pathstring | nullнеобязательно; null допустимАнглийский путь категории. по умолчанию: null.
title_pathstring | nullнеобязательно; null допустимРусский путь категории. по умолчанию: null.
cross_border_sellableboolean | nullнеобязательно; null допустимПризнак трансграничной продажи категории. по умолчанию: null.

OzonAnalyticsKeywordDimension

OzonAnalyticsKeywordDimension · поля
ПолеТипНаличиеОписание и ограничения
channelstring | nullнеобязательно; null допустимКанал фразы: organic/ad. по умолчанию: null; значения: ["organic", "ad"].
organic_rankinteger | nullнеобязательно; null допустимОрганическая позиция SKU по фразе. по умолчанию: null.
exposure_rationumber | nullнеобязательно; null допустимВидимость SKU, отношение 0..1, не проценты. по умолчанию: null; минимум: 0; максимум: 1.
conversion_rationumber | nullнеобязательно; null допустимКонверсия SKU, отношение 0..1, не ca процентов. по умолчанию: null; минимум: 0; максимум: 1.
position_indicatorsarray<integer | string> | nullнеобязательно; null допустимМассив показателей позиции с неизвестной семантикой; не трактуется как число показов. по умолчанию: null.

OzonAnalyticsKeywordListResult

OzonAnalyticsKeywordListResult · поля
ПолеТипНаличиеОписание и ограничения
itemsarray<OzonAnalyticsKeywordRow>обязательноТолько строки Ozon; WB строки не публикуются.
paginationOzonAnalyticsPaginationобязательноTotal источника; при исключении WB полный Ozon total неизвестен.
excluded_platform_countintegerнеобязательноЧисло исключённых WB строк текущей источника страницы. по умолчанию: 0; минимум: 0.

OzonAnalyticsKeywordProduct

OzonAnalyticsKeywordProduct · поля
ПолеТипНаличиеОписание и ограничения
skustring | nullнеобязательно; null допустимSKU связанного связанный товар; не обязательно входной SKU back-search. по умолчанию: null.
ozon_idstring | nullнеобязательно; null допустимОтдельный Ozon ID связанного товара. по умолчанию: null.
titlestring | nullнеобязательно; null допустимНазвание связанного товара. по умолчанию: null.
image_urlstring | nullнеобязательно; null допустимHTTP(S) ссылка на основную картинку связанного товара. по умолчанию: null.
is_advertisedboolean | nullнеобязательно; null допустимПризнак рекламы; null при отсутствии. по умолчанию: null.

OzonAnalyticsKeywordRow

OzonAnalyticsKeywordRow · поля
ПолеТипНаличиеОписание и ограничения
keywordstring | nullнеобязательно; null допустимИсходная поисковая фраза. по умолчанию: null.
keyword_cnstring | nullнеобязательно; null допустимКитайский перевод поисковой фразы. по умолчанию: null.
record_idstring | nullнеобязательно; null допустимID записи фразы, не SKU. по умолчанию: null.
platformintegerобязательноПлатформа Ozon=0; строки WB исключаются, неизвестно запрещён. значение: 0.
search_volumeinteger | nullнеобязательно; null допустимМесячное число поисковых запросов по методике источника. по умолчанию: null.
search_growth_percentnumber | nullнеобязательно; null допустимРост спроса за 30 дней, проценты; отрицательный или больше100 допустим. по умолчанию: null.
product_countinteger | nullнеобязательно; null допустимКоличество товаров, если присутствует. по умолчанию: null.
competing_productsinteger | nullнеобязательно; null допустимКоличество конкурирующих товаров, отдельное от product_count. по умолчанию: null.
sellers_countinteger | nullнеобязательно; null допустимКоличество продавцов. по умолчанию: null.
average_pricestring | nullнеобязательно; null допустимСредняя цена, десятичная строка; валюта без evidence неизвестна. по умолчанию: null.
currencystring | nullнеобязательно; null допустимВалюта средней цены, null если источник её не указал. по умолчанию: null.
product_visibilitynumber | nullнеобязательно; null допустимВидимость товаров; методика/уникальность просмотров не установлены. по умолчанию: null.
view_concentration_percentnumber | nullнеобязательно; null допустимКонцентрация просмотра, проценты. по умолчанию: null.
conversion_concentration_percentnumber | nullнеобязательно; null допустимКонцентрация конверсии, проценты. по умолчанию: null.
market_spacenumber | nullнеобязательно; null допустимРыночное пространство, формула и единица неизвестны. по умолчанию: null.
return_cancellation_percentnumber | nullнеобязательно; null допустимОбъединённая доля возвратов/отмен, проценты. по умолчанию: null.
add_to_cart_countinteger | nullнеобязательно; null допустимЧисло добавлений в корзину по источника определению. по умолчанию: null.
add_to_cart_conversion_percentnumber | nullнеобязательно; null допустимКонверсия корзины ca, проценты; не dimension отношение. по умолчанию: null.
word_countinteger | nullнеобязательно; null допустимКоличество слов поисковой фразы. по умолчанию: null.
title_densitynumber | nullнеобязательно; null допустимПлотность в названиях; шкала/формула неизвестны. по умолчанию: null.
relevancenumber | nullнеобязательно; null допустимРелевантность seed фразе Mining; шкала неизвестна. по умолчанию: null.
category_idsarray<string> | nullнеобязательно; null допустимID категорий фразы. по умолчанию: null.
category_infosarray<OzonAnalyticsKeywordCategoryInfo> | nullнеобязательно; null допустимПереводы и контексте категорий, если доступны. по умолчанию: null.
productsarray<OzonAnalyticsKeywordProduct> | nullнеобязательно; null допустимСвязанные связанные товары, не полный результат product search. по умолчанию: null.
dimensionOzonAnalyticsKeywordDimension | nullнеобязательно; null допустимотносящиеся к SKU показатели back-search; связь конкретного входной SKU не установлена. по умолчанию: null.

OzonAnalyticsPublicMetadata

OzonAnalyticsPublicMetadata · поля
ПолеТипНаличиеОписание и ограничения
request_idstringобязательноID запроса BHAPI; используйте при обращении в поддержку.
requested_periodOzonAnalyticsPeriod | nullнеобязательно; null допустимПериод/окно из входа, отдельно от фактического источника периода. по умолчанию: null.
resolved_periodOzonAnalyticsPeriod | nullнеобязательно; null допустимФактические start/end только из ответа источника; missing=null. по умолчанию: null.
observed_atdate-timeобязательноВремя обработки ответа в UTC, не дата snapshot данных.
snapshot_monthstring | nullнеобязательно; null допустимМесяц snapshot, если явно возвращён; не точная дата обновления. по умолчанию: null; макс. длина: 20.
freshnessstringобязательноИсторические/периодические данные, без realtime SLA. значение: "historical_or_periodic".
warningsarray<string>необязательноНейтральные ограничения покрытия, валюты и периода; коды из закрытого списка. элемент — значения: ["periodic_data_not_realtime", "coverage_and_estimation_method_unverified", "current_price_accuracy_unverified", "non_ozon_rows_excluded_total_unknown", "total_semantics_unknown"].
retrieved_atdate-timeобязательноВремя получения ответа BHAPI в UTC; не дата обновления аналитической базы.

OzonAnalyticsPagination

OzonAnalyticsPagination · поля
ПолеТипНаличиеОписание и ограничения
pageinteger | nullнеобязательно; null допустимЗапрошенная страница; null для метода без пагинации. по умолчанию: null; минимум: 1.
page_sizeinteger | nullнеобязательно; null допустимЗапрошенный размер страницы; null для метода без этого входа. по умолчанию: null; минимум: 1.
returned_countintegerобязательноЧисло опубликованных строк текущего ответа. минимум: 0.
total_countinteger | nullнеобязательно; null допустимПодтверждённое число совпадений; null при page-count, фильтрации WB или неопределённости. по умолчанию: null; минимум: 0.
source_totalinteger | nullнеобязательно; null допустимИсходный total без предположения о полноте каталога. по умолчанию: null; минимум: 0.
source_total_semanticsstringнеобязательноСемантика исходного total; для drill-down неизвестна. по умолчанию: "unknown"; значения: ["matched_count", "page_count", "unknown"].
has_nextboolean | nullнеобязательно; null допустимПодтверждённое наличие следующей страницы; не вычисляется из заполненности страницы. по умолчанию: null.

OzonAnalyticsPeriod

OzonAnalyticsPeriod · поля
ПолеТипНаличиеОписание и ограничения
startdate | nullнеобязательно; null допустимНачало фактического/запрошенного периода; null при неизвестной границе. по умолчанию: null.
enddate | nullнеобязательно; null допустимОкончание фактического/запрошенного периода; не заменяется датой запроса. по умолчанию: null.
labelstring | nullнеобязательно; null допустимЗапрошенное окно/месяц, если запрос не задаёт точные даты. по умолчанию: null.

OzonAnalyticsProductCard

OzonAnalyticsProductCard · поля
ПолеТипНаличиеОписание и ограничения
product_idstringобязательноТочный SKU Ozon строкой, без StrictFloat преобразования. мин. длина: 1; макс. длина: 19; формат: ^[0-9]+$.
titlestring | nullнеобязательно; null допустимНазвание товара; null при отсутствии. по умолчанию: null.
brandstring | nullнеобязательно; null допустимНазвание бренда, если доступно. по умолчанию: null.
brand_idstring | nullнеобязательно; null допустимID бренда строкой, если источник его возвращает. по умолчанию: null.
seller_idstring | nullнеобязательно; null допустимID продавца строкой; отрицательные значения допустимы для собственных магазинов Ozon. по умолчанию: null.
seller_namestring | nullнеобязательно; null допустимНазвание продавца. по умолчанию: null.
image_urlstring | nullнеобязательно; null допустимОсновная картинка, HTTP(S) URL; сервис её не скачивает. по умолчанию: null.
product_urlstring | nullнеобязательно; null допустимURL карточки из источника, без userinfo/tracking query. по умолчанию: null.
brand_urlstring | nullнеобязательно; null допустимHTTP(S) ссылка на бренд, если доступна. по умолчанию: null.
niche_idstring | nullнеобязательно; null допустимID ниши отдельной базы; не category ID другого метода. по умолчанию: null.
niche_namestring | nullнеобязательно; null допустимНазвание/путь ниши источника. по умолчанию: null.
category_pathstring | nullнеобязательно; null допустимРусский путь категории, если пришёл явно. по умолчанию: null.
category_infoOzonAnalyticsCategoryInfo | nullнеобязательно; null допустимВложенная категория и иерархия для расширенной карточки/отчёта методов. по умолчанию: null.
seller_is_best_sellerboolean | nullнеобязательно; null допустимПризнак bestseller продавца; не выводится из sales. по умолчанию: null.
listing_datedate | nullнеобязательно; null допустимДата размещения YYYY-MM-DD. по умолчанию: null.
listing_timestamp_msinteger | nullнеобязательно; null допустимИсточника timestamp размещения, миллисекунды, не секунды. по умолчанию: null.
listing_age_daysinteger | nullнеобязательно; null допустимВозраст размещения в днях. по умолчанию: null.
listing_age_monthsinteger | nullнеобязательно; null допустимВозраст размещения в месяцах. по умолчанию: null.
source_updated_atstring | nullнеобязательно; null допустимИсходная дата обновления без подтверждённого часового пояса; не интерпретируется как UTC. по умолчанию: null.
additional_image_urlsarray<string> | nullнеобязательно; null допустимДополнительные изображения базовой карточки, без основного image_url. по умолчанию: null.
image_urlsarray<string> | nullнеобязательно; null допустимПолный массив изображений расширенной карточки; не замена массива дополнительных изображений. по умолчанию: null.
image_countinteger | nullнеобязательно; null допустимЧисло изображений по источнику; не восстанавливается по длине неполного массива. по умолчанию: null.
pricestring | nullнеобязательно; null допустимЦена текущая/дневная по методу, десятичная строка в currency; соответствие текущему Ozon требует сверки. по умолчанию: null.
old_pricestring | nullнеобязательно; null допустимЦена до скидки, десятичная строка в currency. по умолчанию: null.
ozon_card_pricestring | nullнеобязательно; null допустимЦена карты Ozon, десятичная строка; не подменяет обычную цену. по умолчанию: null.
min_pricestring | nullнеобязательно; null допустимМинимальная цена периода, десятичная строка. по умолчанию: null.
max_pricestring | nullнеобязательно; null допустимМаксимальная цена периода, десятичная строка. по умолчанию: null.
average_pricestring | nullнеобязательно; null допустимСредняя цена периода, десятичная строка. по умолчанию: null.
currencystring | nullнеобязательно; null допустимISO currency code; ₽→RUB, неизвестно=null. Код не доказывает корректность суммы. по умолчанию: null.
discount_percentinteger | nullнеобязательно; null допустимСкидка, целые проценты 0..100. по умолчанию: null; минимум: 0; максимум: 100.
ratingnumber | nullнеобязательно; null допустимРейтинг, шкала 0..5, неизвестно=null. по умолчанию: null; минимум: 0; максимум: 5.
review_countinteger | nullнеобязательно; null допустимКоличество отзывов, единицы. по умолчанию: null; минимум: 0.
questions_and_answersinteger | nullнеобязательно; null допустимЧисло вопросов/ответов по определению источника, без текстов. по умолчанию: null; минимум: 0.
stock_unitsinteger | nullнеобязательно; null допустимОстаток в единицах; состав зависит от метода, у Trend только FBO. по умолчанию: null; минимум: 0.
stock_fbs_unitsinteger | nullнеобязательно; null допустимFBS остаток; не складывается с stock_units без подтверждения состава. по умолчанию: null; минимум: 0.
warehouses_countinteger | nullнеобязательно; null допустимКоличество FBO складов. по умолчанию: null; минимум: 0.
is_fbsboolean | nullнеобязательно; null допустимПризнак FBS по источнику. по умолчанию: null.
delivery_schemestring | nullнеобязательно; null допустимСтроковый способ доставки базовой карточки. по умолчанию: null.
fulfillmentarray<string> | nullнеобязательно; null допустимСпособы доставки OZON/FBO/FBS/RFBS/FBP; может быть несколько. по умолчанию: null; элемент — значения: ["OZON", "FBO", "FBS", "RFBS", "FBP"].
sales_unitsinteger | nullнеобязательно; null допустимЕдиницы продаж выбранного периода, не обязательно календарного месяца и не подтверждённые выкупы. по умолчанию: null; минимум: 0.
sales_revenuestring | nullнеобязательно; null допустимВыручка выбранного периода по источнику, десятичная строка; не подтверждённая сумма оплаченных заказов. по умолчанию: null.
sales_per_daynumber | nullнеобязательно; null допустимСредние единицы в день выбранного периода, не отдельная дневная точка. по умолчанию: null.
sales_per_stock_daynumber | nullнеобязательно; null допустимСредние единицы по дням наличия. по умолчанию: null.
sales_revenue_per_daystring | nullнеобязательно; null допустимСредняя выручка в день, десятичная строка. по умолчанию: null.
sales_revenue_per_stock_daystring | nullнеобязательно; null допустимСредняя выручка по дням наличия, десятичная строка. по умолчанию: null.
previous_sales_unitsinteger | nullнеобязательно; null допустимЕдиницы продаж предыдущего окна равной длины по источника методике. по умолчанию: null.
previous_sales_revenuestring | nullнеобязательно; null допустимВыручка предыдущего окна, десятичная строка; точные границы неизвестны. по умолчанию: null.
potential_revenuestring | nullнеобязательно; null допустимОценка потенциальной выручки при наличии весь период, десятичная строка. по умолчанию: null.
lost_revenuestring | nullнеобязательно; null допустимОценка упущенной выручки, не чистой прибыли, десятичная строка. по умолчанию: null.
lost_revenue_percentnumber | nullнеобязательно; null допустимДоля упущенной выручки, проценты. по умолчанию: null.
days_in_stockinteger | nullнеобязательно; null допустимДни наличия в статистическом периоде. по умолчанию: null.
days_in_periodinteger | nullнеобязательно; null допустимДни продажи в статистическом периоде, включая отсутствие на складе. по умолчанию: null.
turnover_daysnumber | nullнеобязательно; null допустимОценка оборачиваемости в днях; меньше означает быстрее. по умолчанию: null.
frozen_stock_unitsinteger | nullнеобязательно; null допустимМедленный/неликвидный остаток по определению источника. по умолчанию: null.
dimension_positioninteger | nullнеобязательно; null допустимПозиция SKU в измерении запроса — бренд/продавец/категория. по умолчанию: null.
category_positioninteger | nullнеобязательно; null допустимПозиция внутри категории, не alias dimension_position. по умолчанию: null.
revenue_share_percentnumber | nullнеобязательно; null допустимДоля выручки SKU в измерении, проценты; полнота знаменателя требует подтверждения. по умолчанию: null.
viewsinteger | nullнеобязательно; null допустимПериодические просмотры карточки в report, не realtime/уникальные посетители. по умолчанию: null.
cart_conversion_percentnumber | nullнеобязательно; null допустимКонверсия корзины, проценты по документации report. по умолчанию: null.
order_conversion_percentnumber | nullнеобязательно; null допустимКонверсия заказа, проценты, не выкупа. по умолчанию: null.
sales_growth_percentnumber | nullнеобязательно; null допустимРост продаж, проценты, может быть отрицательным. по умолчанию: null.
revenue_growth_percentnumber | nullнеобязательно; null допустимРост выручки, проценты, может быть отрицательным. по умолчанию: null.
advertising_cost_rationumber | nullнеобязательно; null допустимДоля рекламных затрат report по docs как отношение; шкала требует отдельной сверки. по умолчанию: null.
gross_margin_percentnumber | nullнеобязательно; null допустимВаловая маржа источника, проценты; собственный расчёт не выполняется. по умолчанию: null.
return_cancellation_percentnumber | nullнеобязательно; null допустимОбъединённая доля возвратов/отмен, проценты. по умолчанию: null.
variants_countinteger | nullнеобязательно; null допустимКоличество вариантов, не их полный перечень. по умолчанию: null.
weight_gramsstring | nullнеобязательно; null допустимМасса в граммах, десятичная строка; включение упаковки не подтверждено. по умолчанию: null.
volume_litersstring | nullнеобязательно; null допустимОбъём в литрах, десятичная строка; предмет/упаковка не установлены. по умолчанию: null.
countrystring | nullнеобязательно; null допустимСтрана продажи из явного ответа; не заполняется автоматически RU. по умолчанию: null.
notestring | nullнеобязательно; null допустимБизнес-примечание; raw источника error сюда не переносится. по умолчанию: null.

OzonAnalyticsProductDetailResult

OzonAnalyticsProductDetailResult · поля
ПолеТипНаличиеОписание и ограничения
productOzonAnalyticsProductCardобязательноОдна карточка; ошибка источника не превращается в пустую карточку.

OzonAnalyticsProductListResult

OzonAnalyticsProductListResult · поля
ПолеТипНаличиеОписание и ограничения
itemsarray<OzonAnalyticsProductCard>обязательноТовары текущей страницы с доступными показателями, отсутствующие значения — null.
paginationOzonAnalyticsPaginationобязательноСтраница, исходный total и доказанное наличие продолжения.

OzonAnalyticsProductTrendResult

OzonAnalyticsProductTrendResult · поля
ПолеТипНаличиеОписание и ограничения
product_idstring | nullнеобязательно; null допустимSKU из проверенного запроса; дневные строки может не возвращать ID. по умолчанию: null.
pointsarray<OzonAnalyticsTrendPoint>обязательноДневные точки; has_data=false отличается от нуля продаж.

OzonAnalyticsSearchProduct

OzonAnalyticsSearchProduct · поля
ПолеТипНаличиеОписание и ограничения
product_idstringобязательноТочный SKU Ozon строкой, без StrictFloat преобразования. мин. длина: 1; макс. длина: 19; формат: ^[0-9]+$.
titlestring | nullнеобязательно; null допустимНазвание товара; null при отсутствии. по умолчанию: null.
brandstring | nullнеобязательно; null допустимНазвание бренда, если доступно. по умолчанию: null.
brand_idstring | nullнеобязательно; null допустимID бренда строкой, если источник его возвращает. по умолчанию: null.
seller_idstring | nullнеобязательно; null допустимID продавца строкой; отрицательные значения допустимы для собственных магазинов Ozon. по умолчанию: null.
seller_namestring | nullнеобязательно; null допустимНазвание продавца. по умолчанию: null.
image_urlstring | nullнеобязательно; null допустимОсновная картинка, HTTP(S) URL; сервис её не скачивает. по умолчанию: null.
product_urlstring | nullнеобязательно; null допустимURL карточки из источника, без userinfo/tracking query. по умолчанию: null.

OzonAnalyticsSearchResult

OzonAnalyticsSearchResult · поля
ПолеТипНаличиеОписание и ограничения
itemsarray<OzonAnalyticsSearchProduct>обязательноНайденные товары с базовой идентичностью; пустой поиск возвращает [].
paginationOzonAnalyticsPaginationобязательноПагинация и семантика total; поиск не принимает page.

OzonAnalyticsSummary

OzonAnalyticsSummary · поля
ПолеТипНаличиеОписание и ограничения
sales_unitsinteger | nullнеобязательно; null допустимАгрегат единиц продаж выбранного периода. по умолчанию: null.
sales_revenuestring | nullнеобязательно; null допустимАгрегат выручки выбранного периода, десятичная строка. по умолчанию: null.
sales_per_daynumber | nullнеобязательно; null допустимСредние продажи в день периода. по умолчанию: null.
stock_unitsinteger | nullнеобязательно; null допустимОстаток summary по источнику. по умолчанию: null.

OzonAnalyticsTrendPoint

OzonAnalyticsTrendPoint · поля
ПолеТипНаличиеОписание и ограничения
datedateобязательноДень YYYY-MM-DD; точки сортируются без интерполяции пропусков.
has_databoolean | nullнеобязательно; null допустимНаличие данных дня; false отличается от sales_units=0. по умолчанию: null.
sales_unitsinteger | nullнеобязательно; null допустимДневные единицы продаж источника, не подтверждённые выкупы. по умолчанию: null.
sales_revenuestring | nullнеобязательно; null допустимДневная выручка expanded trend, десятичная строка; не вычисляется из цены. по умолчанию: null.
pricestring | nullнеобязательно; null допустимДневная цена, десятичная строка в currency. по умолчанию: null.
old_pricestring | nullнеобязательно; null допустимДневная цена до скидки, десятичная строка. по умолчанию: null.
ozon_card_pricestring | nullнеобязательно; null допустимДневная цена карты Ozon, десятичная строка. по умолчанию: null.
currencystring | nullнеобязательно; null допустимВалюта при явном значении; missing=null. по умолчанию: null.
discount_percentinteger | nullнеобязательно; null допустимДневная скидка, проценты 0..100. по умолчанию: null; минимум: 0; максимум: 100.
stock_unitsinteger | nullнеобязательно; null допустимДневной остаток; у основного Trend остаток FBO. по умолчанию: null.
ratingnumber | nullнеобязательно; null допустимРейтинг на этот день, шкала 0..5. по умолчанию: null; минимум: 0; максимум: 5.
review_countinteger | nullнеобязательно; null допустимНакопленное число отзывов к дате. по умолчанию: null.
is_newboolean | nullнеобязательно; null допустимПризнак нового товара на день. по умолчанию: null.
is_bestsellerboolean | nullнеобязательно; null допустимПризнак bestseller на день. по умолчанию: null.

OzonAnalyticsSearchResponse

OzonAnalyticsSearchResponse · поля
ПолеТипНаличиеОписание и ограничения
statusstringобязательноУспешно проверенный бизнес-ответ, не только HTTP200. значение: "success".
dataOzonAnalyticsSearchResultобязательноТипизированный результат выбранного метода.
metaOzonAnalyticsPublicMetadataобязательноКонтекст периода, получения и ограничений результата.

OzonAnalyticsDetailResponse

OzonAnalyticsDetailResponse · поля
ПолеТипНаличиеОписание и ограничения
statusstringобязательноУспешно проверенный бизнес-ответ, не только HTTP200. значение: "success".
dataOzonAnalyticsProductDetailResultобязательноТипизированный результат выбранного метода.
metaOzonAnalyticsPublicMetadataобязательноКонтекст периода, получения и ограничений результата.

OzonAnalyticsExpandedDetailResponse

OzonAnalyticsExpandedDetailResponse · поля
ПолеТипНаличиеОписание и ограничения
statusstringобязательноУспешно проверенный бизнес-ответ, не только HTTP200. значение: "success".
dataOzonAnalyticsExpandedProductResultобязательноТипизированный результат выбранного метода.
metaOzonAnalyticsPublicMetadataобязательноКонтекст периода, получения и ограничений результата.

OzonAnalyticsReportResponse

OzonAnalyticsReportResponse · поля
ПолеТипНаличиеОписание и ограничения
statusstringобязательноУспешно проверенный бизнес-ответ, не только HTTP200. значение: "success".
dataOzonAnalyticsProductListResultобязательноТипизированный результат выбранного метода.
metaOzonAnalyticsPublicMetadataобязательноКонтекст периода, получения и ограничений результата.

OzonAnalyticsTrendResponse

OzonAnalyticsTrendResponse · поля
ПолеТипНаличиеОписание и ограничения
statusstringобязательноУспешно проверенный бизнес-ответ, не только HTTP200. значение: "success".
dataOzonAnalyticsProductTrendResultобязательноТипизированный результат выбранного метода.
metaOzonAnalyticsPublicMetadataобязательноКонтекст периода, получения и ограничений результата.

OzonAnalyticsBrandProductsResponse

OzonAnalyticsBrandProductsResponse · поля
ПолеТипНаличиеОписание и ограничения
statusstringобязательноУспешно проверенный бизнес-ответ, не только HTTP200. значение: "success".
dataOzonAnalyticsProductListResultобязательноТипизированный результат выбранного метода.
metaOzonAnalyticsPublicMetadataобязательноКонтекст периода, получения и ограничений результата.

OzonAnalyticsCategoryProductsResponse

OzonAnalyticsCategoryProductsResponse · поля
ПолеТипНаличиеОписание и ограничения
statusstringобязательноУспешно проверенный бизнес-ответ, не только HTTP200. значение: "success".
dataOzonAnalyticsProductListResultобязательноТипизированный результат выбранного метода.
metaOzonAnalyticsPublicMetadataобязательноКонтекст периода, получения и ограничений результата.

OzonAnalyticsCategorySearchResponse

OzonAnalyticsCategorySearchResponse · поля
ПолеТипНаличиеОписание и ограничения
statusstringобязательноУспешно проверенный бизнес-ответ, не только HTTP200. значение: "success".
dataOzonAnalyticsCategorySearchResultобязательноТипизированный результат выбранного метода.
metaOzonAnalyticsPublicMetadataобязательноКонтекст периода, получения и ограничений результата.

OzonAnalyticsSellerProductsResponse

OzonAnalyticsSellerProductsResponse · поля
ПолеТипНаличиеОписание и ограничения
statusstringобязательноУспешно проверенный бизнес-ответ, не только HTTP200. значение: "success".
dataOzonAnalyticsProductListResultобязательноТипизированный результат выбранного метода.
metaOzonAnalyticsPublicMetadataобязательноКонтекст периода, получения и ограничений результата.

OzonAnalyticsKeywordBackSearchResponse

OzonAnalyticsKeywordBackSearchResponse · поля
ПолеТипНаличиеОписание и ограничения
statusstringобязательноУспешно проверенный бизнес-ответ, не только HTTP200. значение: "success".
dataOzonAnalyticsKeywordListResultобязательноТипизированный результат выбранного метода.
metaOzonAnalyticsPublicMetadataобязательноКонтекст периода, получения и ограничений результата.

OzonAnalyticsKeywordMiningResponse

OzonAnalyticsKeywordMiningResponse · поля
ПолеТипНаличиеОписание и ограничения
statusstringобязательноУспешно проверенный бизнес-ответ, не только HTTP200. значение: "success".
dataOzonAnalyticsKeywordListResultобязательноТипизированный результат выбранного метода.
metaOzonAnalyticsPublicMetadataобязательноКонтекст периода, получения и ограничений результата.

OzonAnalyticsKeywordMarketSearchResponse

OzonAnalyticsKeywordMarketSearchResponse · поля
ПолеТипНаличиеОписание и ограничения
statusstringобязательноУспешно проверенный бизнес-ответ, не только HTTP200. значение: "success".
dataOzonAnalyticsKeywordListResultобязательноТипизированный результат выбранного метода.
metaOzonAnalyticsPublicMetadataобязательноКонтекст периода, получения и ограничений результата.

Периоды, свежесть и смысл показателей

Продажи и денежные показатели

  • sales_units — продажи по методике источника, без подтверждения выкупов.
  • sales_revenue — выручка; lost_revenue — оценка упущенной выручки, не прибыли.
  • null и отсутствие значения не равны нулю. Цена базовой карточки не гарантирует текущую цену сайта даже при currency=RUB.

Окна анализа и свежесть

  • Расширенная карточка использует past_N_days. Отчёт и исследование поискового рынка без search_date используют rolling30.
  • Указанная дата выбирает предыдущий полный календарный месяц: 2026-04-01 → март. Месячные метки category_ranks сохраняются месяцами.
  • T-1 ограничивает свежесть источника; BHAPI самостоятельно не обрезает запрос. Сравнивайте показатели в одинаковых окнах.
  • meta.retrieved_at — время получения BHAPI, observed_at — время обработки источником. Это не время обновления базы.
  • snapshot_month не является точной датой свежести. resolved_period содержит только подтверждённые границы и не достраивается из запроса.

Пагинация и количество результатов

  • pagination.returned_count — длина текущего items; total_count — подтверждённые совпадения либо null.
  • source_total_semantics: matched_count — число совпадений, page_count — число страниц, unknown — неизвестная семантика.
  • Общее количество нельзя вычислять из размера страницы; has_next не вычисляется из её заполненности. Поиск товаров не принимает page.
  • При исключении строк другой площадки excluded_platform_count > 0, total_count=null и предупреждение обязательно.

Единицы и ограничения интерпретации

  • category_summary — агрегаты категории. stock_units дневного ряда — остаток FBO; has_data=false означает отсутствие данных дня.
  • DRR, gross_margin, conversion, ca, concentration, relevancy и рейтинги имеют разные определения.
  • dimension.exposure_ratio и dimension.conversion_ratio — отношения 0–1; ca и concentration — проценты.
  • weight/volume отчёта — граммы/литры. У одноимённых фильтров исследования поискового рынка единицы неизвестны.
  • При нескольких SKU связь dimension с конкретным SKU не доказана. Полнота рынка и обновление в реальном времени не гарантируются.
Предупреждения meta.warnings
КодЗначение
periodic_data_not_realtimeИсторические или периодические данные, без обновления в реальном времени.
coverage_and_estimation_method_unverifiedПолнота покрытия и методика оценок не подтверждены.
current_price_accuracy_unverifiedАктуальность и масштаб текущей цены требуют сверки.
non_ozon_rows_excluded_total_unknownСтроки другой платформы исключены; полный Ozon total неизвестен.
total_semantics_unknownСмысл исходного total не установлен.

Ошибки, частота и квоты

Таблицы и примеры этого раздела описывают ошибки legacy (формат по умолчанию). Чтобы получать единый контракт ошибок, передайте заголовок X-BHAPI-Error-Format: problem-v1. Статусы некоторых ошибок в этом режиме отличаются; успешные ответы не меняются. Общий справочник кодов, форматов и действий клиента →

Ошибка BHAPI имеет форму {"detail":{"code":HTTP_NUMBER,"reason":"...","message":"..."}}. detail.code — целый HTTP-код, detail.reason — машинная причина, detail.message — безопасное русское сообщение. Ошибка доступа/тарифа использует общий контракт BHAPI; сервисная авторизация не превращается в отказ пользовательского ключа.

HTTP-коды аналитики Ozon
HTTPПричинаДействие
400query_token_deprecatedПеренесите ключ из URL в X-API-Token.
401/403Авторизация или доступПроверьте ключ нужного направления, подписку и тариф в кабинете.
413request_too_largeСократите JSON до 1 MiB.
422invalid_requestПроверьте типы, XOR, даты, фильтры и неизвестные поля.
404not_foundТовар не найден; неполный/пустой списковый результат может быть успешным.
429parser_overloaded либо общая квота BHAPIПри parser_overloaded дождитесь Retry-After: целое 1–3600 секунд. Это не исчерпание квоты BHAPI; Cache-Control: no-store.
429request_in_progressС этим ключом уже выполняется запрос. Для ключей с дневным или общим лимитом отправляйте запросы последовательно; Retry-After: 1, Cache-Control: no-store. Локальный отказ не вызывает парсер и не расходует успешную квоту.
502upstream_invalid_responseНекорректный результат не выдаётся как пустой успех; сохраните request_id для поддержки.
503upstream_unreachable / upstream_unavailable / parser_internal_errorСервис временно недоступен; проверьте состояние направления.
504upstream_timeoutИсход внешней обработки неизвестен; проверьте результат до нового запроса.
500internal_errorВнутренний сбой; обратитесь в поддержку с request_id.

Для всех методов действует общий ограничитель: не чаще одного запроса в секунду; не более двух активных/ожидающих вызовов, ожидание допуска — до 5 секунд. Отправляйте запросы последовательно. BHAPI не повторяет вызовы автоматически и не выполняет скрытую пагинацию. Каждый повтор — новый вызов.

Локальный отказ и ошибка результата не расходуют успешную квоту BHAPI. Проверенный пустой успех расходует одну единицу. Отмена до решения об успехе не расходует успешную квоту; после проверки результата и фиксации успешного исхода потеря соединения не отменяет списание. При сбое БД восстановление слота требует подтверждённого завершения обработки; не считайте доставку ответа единственной границей учёта.

Клиентский timeout рекомендуем 120 секунд. После timeout внешний исход может быть неизвестен; не запускайте автоматический повтор без проверки. Тарифы направления задаются отдельно; бесплатный доступ и лимиты доступны только при соответствующем активном тарифе.

Python и сценарии исследования

Python · расширенная карточка
import requests

response = requests.post(
    "https://bhapi.ru/analytics/ozon/api/v1/products/expanded-detail",
    headers={"X-API-Token": "YOUR_OZON_ANALYTICS_API_TOKEN"},
    json={"product_id": "123456789", "period_days": 30},
    timeout=120,
)
response.raise_for_status()
result = response.json()
print(result["data"]["summary"])
print(result["meta"]["resolved_period"])
# Денежные строки преобразуйте в Decimal, если нужен точный расчёт.
# Новые запросы выполняйте последовательно, с интервалом не менее секунды.
  • Search → Detail → Trend: найдите SKU, получите карточку и сравните дневные точки одного периода; Search не содержит продаж.
  • Brand / Category Products / Seller: выберите измерение, пару полей сортировки и AND-фильтры. Получайте страницы отдельными запросами, сохраняя семантику total.
  • Back Search → Mining → Market Search: исследуйте фразы товара, расширьте список и сравните спрос. Не переносите неизвестные шкалы и связь dimension между методами.

Возможности аналитики Ozon · Общая справка BHAPI