Расширенная аналитика 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.
Поиск товаров
/analytics/ozon/api/v1/products/searchНаходит товары по фразе или списку SKU и возвращает их базовые сведения.
Когда применять: Используйте для первичного отбора товаров и получения SKU, которые затем можно изучить через карточку или дневную динамику.
- Выбор товаров: Укажите ровно одно поле:
keywordилиproduct_ids. Список содержит 1–100 уникальных SKU. - Результат: Возвращаются базовые сведения о товаре, без цен и продаж.
- Пагинация: Параметры
pageиpage_sizeне принимаются; переход к следующей странице не предусмотрен контрактом.
Формат и ключ: JSON; Content-Type: application/json и X-API-Token.
Учёт запросов: один проверенный успешный ответ — одна единица квоты. Ошибки успешную квоту не расходуют; подробнее в разделе ошибок.
Параметры запроса
| Поле | Тип | Наличие | Описание и ограничения |
|---|---|---|---|
start_date | date | null | необязательно; null допустим | Запрошенное начало статистики YYYY-MM-DD; фактический период возвращается отдельно. по умолчанию: null. |
end_date | date | null | необязательно; null допустим | Запрошенное окончание статистики YYYY-MM-DD; источник ограничивает свежесть до T-1. по умолчанию: null. |
keyword | string | null | необязательно; null допустим | Поисковая фраза, вместо product_ids; максимум 1000 символов. по умолчанию: null; мин. длина: 1; макс. длина: 1000. |
product_ids | array<string> | null | необязательно; null допустим | От 1 до 100 SKU строками, вместо keyword; 100 — локальный, не доказанный upstream лимит. по умолчанию: null; мин. элементов: 1; макс. элементов: 100; элемент — мин. длина: 1; элемент — макс. длина: 19; элемент — формат: ^[0-9]+$. |
JSON · запрос Поиск товаров{
"keyword": "термокружка"
}curl -X POST "https://bhapi.ru/analytics/ozon/api/v1/products/search" \
-H "X-API-Token: YOUR_OZON_ANALYTICS_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{"keyword":"термокружка"}'Ответ
Envelope: OzonAnalyticsSearchResponse. Поля data и все вложенные типы: OzonAnalyticsSearchResult. Период, свежесть и предупреждения: meta. Необязательные значения не восстанавливаются из нулей или соседних методов.
JSON · ответ Поиск товаров{
"status": "success",
"data": {
"items": [
{
"product_id": "123456789",
"title": "Пример товара"
}
],
"pagination": {
"page": null,
"page_size": null,
"returned_count": 1,
"total_count": 1,
"source_total": 1,
"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"
]
}
}Базовая карточка товара
/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.
Учёт запросов: один проверенный успешный ответ — одна единица квоты. Ошибки успешную квоту не расходуют; подробнее в разделе ошибок.
Параметры запроса
| Поле | Тип | Наличие | Описание и ограничения |
|---|---|---|---|
product_id | string | null | необязательно; null допустим | Один SKU Ozon как строка, вместо product_url; точное целое до 2^63-1. по умолчанию: null; мин. длина: 1; макс. длина: 19; формат: ^[0-9]+$. |
product_url | string | null | необязательно; null допустим | HTTPS URL карточки ozon.ru вместо product_id; query/fragment удаляются без загрузки страницы. по умолчанию: null; макс. длина: 4096. |
start_date | date | null | необязательно; null допустим | Запрошенное начало статистики YYYY-MM-DD; фактический период возвращается отдельно. по умолчанию: null. |
end_date | date | null | необязательно; null допустим | Запрошенное окончание статистики YYYY-MM-DD; источник ограничивает свежесть до T-1. по умолчанию: null. |
include_fbs | boolean | null | необязательно; null допустим | Включать ли данные FBS; при отсутствии действует настройка источника. по умолчанию: null. |
JSON · запрос Базовая карточка товара{
"product_id": "123456789"
}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"
]
}
}Расширенная карточка товара
/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.
Учёт запросов: один проверенный успешный ответ — одна единица квоты. Ошибки успешную квоту не расходуют; подробнее в разделе ошибок.
Параметры запроса
| Поле | Тип | Наличие | Описание и ограничения |
|---|---|---|---|
product_id | string | null | необязательно; null допустим | Один SKU Ozon как строка, вместо product_url; точное целое до 2^63-1. по умолчанию: null; мин. длина: 1; макс. длина: 19; формат: ^[0-9]+$. |
product_url | string | null | необязательно; null допустим | HTTPS URL карточки ozon.ru вместо product_id; query/fragment удаляются без загрузки страницы. по умолчанию: null; макс. длина: 4096. |
period_days | integer | необязательно | Окно статистики в днях: 7/30/60/90/180/365; фактические даты возвращаются в контексте. по умолчанию: 30; значения: [7, 30, 60, 90, 180, 365]. |
JSON · запрос Расширенная карточка товара{
"product_id": "123456789",
"period_days": 30
}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"
]
}
}Отчёт по товарам
/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.
Учёт запросов: один проверенный успешный ответ — одна единица квоты. Ошибки успешную квоту не расходуют; подробнее в разделе ошибок.
Параметры запроса
| Поле | Тип | Наличие | Описание и ограничения |
|---|---|---|---|
page | integer | необязательно | Страница, начиная с 1; локальная верхняя граница 100000. по умолчанию: 1; минимум: 1; максимум: 100000. |
page_size | integer | необязательно | Строк на странице, от 1 до 20; локальный лимит. по умолчанию: 20; минимум: 1; максимум: 20. |
orders | array<OzonAnalyticsOrder> | null | необязательно; null допустим | До пяти правил сортировки; неизвестные поля отвергаются до запроса к источнику. по умолчанию: null; макс. элементов: 5. |
product_ids | array<string> | null | необязательно; null допустим | До 10 точных SKU; разные базы могут иметь неодинаковое покрытие. по умолчанию: null; мин. элементов: 1; макс. элементов: 10; элемент — мин. длина: 1; элемент — макс. длина: 19; элемент — формат: ^[0-9]+$. |
keywords | array<string> | null | необязательно; null допустим | Фразы для фильтрации названия, локальный максимум 1000. по умолчанию: null; макс. элементов: 1000; элемент — мин. длина: 1; элемент — макс. длина: 1000. |
category_ids | array<string> | null | необязательно; null допустим | ID категорий базы отчёта; не названия/пути категории. по умолчанию: null; макс. элементов: 1000; элемент — мин. длина: 1; элемент — макс. длина: 1000. |
seller_names | array<string> | null | необязательно; null допустим | Названия продавцов; не seller ID. по умолчанию: null; макс. элементов: 1000; элемент — мин. длина: 1; элемент — макс. длина: 1000. |
brand | OzonAnalyticsBrandFilter | null | необязательно; null допустим | Включение/исключение названий брендов или отбор без бренда. по умолчанию: null. |
fulfillment | array<string> | null | необязательно; null допустим | Массив способов доставки OZON/FBO/FBS/RFBS/FBP. по умолчанию: null; макс. элементов: 5; элемент — значения: ["OZON", "FBO", "FBS", "RFBS", "FBP"]. |
labels | array<integer> | null | необязательно; null допустим | Метки: 0 новый товар, 1 оригинальный, 2 bestseller; не подтверждение прав на товар. по умолчанию: null; макс. элементов: 3; элемент — значения: [0, 1, 2]. |
listing_months | integer | null | необязательно; null допустим | Возраст размещения: последние 1/3/6/12/24 месяца. по умолчанию: null; значения: [1, 3, 6, 12, 24]. |
merge_variants | boolean | null | необязательно; null допустим | Объединять ли варианты в статистике;. по умолчанию: null. |
search_date | date | null | необязательно; null допустим | Дата выбора предыдущего полного месяца; 2026-04-01 означает март, не апрель MTD. по умолчанию: null. |
tag | string | null | необязательно; null допустим | Дополнительный тег источника; методика интерпретации не установлена. по умолчанию: null; мин. длина: 1; макс. длина: 1000. |
monthly_sales | OzonAnalyticsNumericRange | null | необязательно; null допустим | Единицы продаж в выбранном периоде, несмотря на название поля monthly_sales. по умолчанию: null. |
monthly_sales_rate | OzonAnalyticsNumericRange | null | необязательно; null допустим | Рост продаж, проценты; отрицательная граница допустима. по умолчанию: null. |
monthly_revenue | OzonAnalyticsNumericRange | null | необязательно; null допустим | Выручка источника за период, RUB; не подтверждённые оплаченные продажи. по умолчанию: null. |
price | OzonAnalyticsNumericRange | null | необязательно; null допустим | Цена в RUB; актуальность цены требует независимой сверки. по умолчанию: null. |
conv_to_cart_pdp | OzonAnalyticsNumericRange | null | необязательно; null допустим | Конверсия корзины, проценты по документации. по умолчанию: null. |
review_rating | OzonAnalyticsNumericRange | null | необязательно; null допустим | Рейтинг, шкала 0..5. по умолчанию: null. |
review_count | OzonAnalyticsNumericRange | null | необязательно; null допустим | Число отзывов, единицы. по умолчанию: null. |
questions_and_answers | OzonAnalyticsNumericRange | null | необязательно; null допустим | Число вопросов/ответов по определению источника. по умолчанию: null. |
variants | OzonAnalyticsNumericRange | null | необязательно; null допустим | Число вариантов товара. по умолчанию: null. |
drr | OzonAnalyticsNumericRange | null | необязательно; null допустим | Расход на рекламу; шкала входного фильтра не подтверждена, сохраняется без пересчёта. по умолчанию: null. |
gross_margin | OzonAnalyticsNumericRange | null | необязательно; null допустим | Валовая маржа по методике источника, проценты. по умолчанию: null. |
return_cancellation_rate | OzonAnalyticsNumericRange | null | необязательно; null допустим | Объединённая доля возвратов/отмен, проценты. по умолчанию: null. |
weight | OzonAnalyticsNumericRange | null | необязательно; null допустим | Масса в граммах; включение упаковки неизвестно. по умолчанию: null. |
volume | OzonAnalyticsNumericRange | null | необязательно; null допустим | Объём в литрах; предмет или упаковка не установлены. по умолчанию: null. |
JSON · запрос Отчёт по товарам{
"product_ids": [
"123456789"
],
"page": 1,
"page_size": 1
}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"
]
}
}Дневная динамика товара
/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.
Учёт запросов: один проверенный успешный ответ — одна единица квоты. Ошибки успешную квоту не расходуют; подробнее в разделе ошибок.
Параметры запроса
| Поле | Тип | Наличие | Описание и ограничения |
|---|---|---|---|
product_id | string | null | необязательно; null допустим | Один SKU Ozon как строка, вместо product_url; точное целое до 2^63-1. по умолчанию: null; мин. длина: 1; макс. длина: 19; формат: ^[0-9]+$. |
product_url | string | null | необязательно; null допустим | HTTPS URL карточки ozon.ru вместо product_id; query/fragment удаляются без загрузки страницы. по умолчанию: null; макс. длина: 4096. |
start_date | date | null | необязательно; null допустим | Запрошенное начало статистики YYYY-MM-DD; фактический период возвращается отдельно. по умолчанию: null. |
end_date | date | null | необязательно; null допустим | Запрошенное окончание статистики YYYY-MM-DD; источник ограничивает свежесть до T-1. по умолчанию: null. |
include_fbs | boolean | null | необязательно; null допустим | Включать ли данные FBS; при отсутствии действует настройка источника. по умолчанию: null. |
include_search_stats | boolean | null | необязательно; null допустим | Запросить search stats; доступны не всем нишам, coverage и поля требуют подтверждения. по умолчанию: null. |
JSON · запрос Дневная динамика товара{
"product_id": "123456789",
"start_date": "2026-09-01",
"end_date": "2026-09-03"
}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"
]
}
}Товары бренда
/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.
Учёт запросов: один проверенный успешный ответ — одна единица квоты. Ошибки успешную квоту не расходуют; подробнее в разделе ошибок.
Параметры запроса
| Поле | Тип | Наличие | Описание и ограничения |
|---|---|---|---|
start_date | date | null | необязательно; null допустим | Запрошенное начало статистики YYYY-MM-DD; фактический период возвращается отдельно. по умолчанию: null. |
end_date | date | null | необязательно; null допустим | Запрошенное окончание статистики YYYY-MM-DD; источник ограничивает свежесть до T-1. по умолчанию: null. |
page | integer | необязательно | Страница с 1; локальная верхняя граница 100000. по умолчанию: 1; минимум: 1; максимум: 100000. |
page_size | integer | необязательно | От 1 до 100 строк на странице, по умолчанию 100. по умолчанию: 100; минимум: 1; максимум: 100. |
sort_field | string | null | необязательно; null допустим | Показатель сортировки из разрешённого списка разрешённых значений. по умолчанию: null; значения: ["sales_units", "sales_revenue", "price", "stock_units", "rating", "review_count", "days_in_stock", "turnover_days", "lost_revenue", "category_position"]. |
sort_direction | string | null | необязательно; null допустим | Направление сортировки; задаётся вместе с sort_field. по умолчанию: null; значения: ["asc", "desc"]. |
currency | string | необязательно | Запрошенная валюта цен/денежных показателей; корректность преобразования определяется источником. по умолчанию: "RUB"; значения: ["RUB", "USD", "EUR", "CNY"]. |
currency_rate | integer | null | необязательно; null допустим | Пользовательский курс для не-RUB валюты; источник документирует целое число. по умолчанию: null; максимум: 1000000. |
include_fbs | boolean | null | необязательно; null допустим | Включать ли FBS показатели; отсутствующее поле не заменяется false. по умолчанию: null. |
filters | array<OzonAnalyticsNumericFilter> | null | необязательно; null допустим | До 20 условий, объединённых AND; каждое условие передаётся без дополнительного запроса. по умолчанию: null; макс. элементов: 20. |
brand_name | string | обязательно | Отображаемое название бренда на русском или латинице, не brand ID. мин. длина: 1; макс. длина: 1000. |
JSON · запрос Товары бренда{
"brand_name": "Пример",
"page": 1,
"page_size": 1
}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"
]
}
}Товары по пути категории
/analytics/ozon/api/v1/categories/productsВозвращает подборку товаров из выбранной ветки каталога, заданной полным путём категории.
Когда применять: Используйте для исследования конкурентов внутри конкретной категории, когда вам известен её русский путь в каталоге.
- Категория:
category_path— полный русский путь с разделителями /. Это отдельный селектор;category_idиniche_idздесь не используются. - Настройки выборки: Действуют общие правила drill-down: пагинация, парная сортировка, валюта и
AND-фильтры. - Количество результатов: total источника может иметь неизвестную семантику; не трактуйте его как полный размер категории.
Формат и ключ: JSON; Content-Type: application/json и X-API-Token.
Учёт запросов: один проверенный успешный ответ — одна единица квоты. Ошибки успешную квоту не расходуют; подробнее в разделе ошибок.
Параметры запроса
| Поле | Тип | Наличие | Описание и ограничения |
|---|---|---|---|
start_date | date | null | необязательно; null допустим | Запрошенное начало статистики YYYY-MM-DD; фактический период возвращается отдельно. по умолчанию: null. |
end_date | date | null | необязательно; null допустим | Запрошенное окончание статистики YYYY-MM-DD; источник ограничивает свежесть до T-1. по умолчанию: null. |
page | integer | необязательно | Страница с 1; локальная верхняя граница 100000. по умолчанию: 1; минимум: 1; максимум: 100000. |
page_size | integer | необязательно | От 1 до 100 строк на странице, по умолчанию 100. по умолчанию: 100; минимум: 1; максимум: 100. |
sort_field | string | null | необязательно; null допустим | Показатель сортировки из разрешённого списка разрешённых значений. по умолчанию: null; значения: ["sales_units", "sales_revenue", "price", "stock_units", "rating", "review_count", "days_in_stock", "turnover_days", "lost_revenue", "category_position"]. |
sort_direction | string | null | необязательно; null допустим | Направление сортировки; задаётся вместе с sort_field. по умолчанию: null; значения: ["asc", "desc"]. |
currency | string | необязательно | Запрошенная валюта цен/денежных показателей; корректность преобразования определяется источником. по умолчанию: "RUB"; значения: ["RUB", "USD", "EUR", "CNY"]. |
currency_rate | integer | null | необязательно; null допустим | Пользовательский курс для не-RUB валюты; источник документирует целое число. по умолчанию: null; максимум: 1000000. |
include_fbs | boolean | null | необязательно; null допустим | Включать ли FBS показатели; отсутствующее поле не заменяется false. по умолчанию: null. |
filters | array<OzonAnalyticsNumericFilter> | null | необязательно; null допустим | До 20 условий, объединённых AND; каждое условие передаётся без дополнительного запроса. по умолчанию: null; макс. элементов: 20. |
category_path | string | обязательно | Полный русский путь категории, уровни разделены /; не category ID другой базы. мин. длина: 1; макс. длина: 1000. |
JSON · запрос Товары по пути категории{
"category_path": "Дом / Кухня",
"page": 1,
"page_size": 1
}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"
]
}
}Аналитический поиск категории
/analytics/ozon/api/v1/categories/searchВозвращает товары и сводные показатели категории, выбранной по её ID.
Когда применять: Подходит для изучения категории за выбранный месяц: анализируйте её агрегаты отдельно от товаров текущей страницы.
- Категория и период:
category_id— иерархический ID с подчёркиваниями.month— действительный месяц YYYY-MM. - Схема доставки:
fulfillment— одна строкаOZON/FBO/FBS/RFBS/FBP, не массив. - Сортировка: orders.field:
sales_units,price,sales_revenue,rating. - Агрегаты и страницы:
category_summaryописывает всю категорию, а не текущую страницу.source_total_semantics=page_countозначает число страниц, не товаров.
Формат и ключ: JSON; Content-Type: application/json и X-API-Token.
Учёт запросов: один проверенный успешный ответ — одна единица квоты. Ошибки успешную квоту не расходуют; подробнее в разделе ошибок.
Параметры запроса
| Поле | Тип | Наличие | Описание и ограничения |
|---|---|---|---|
page | integer | необязательно | Страница, начиная с 1; локальная верхняя граница 100000. по умолчанию: 1; минимум: 1; максимум: 100000. |
page_size | integer | необязательно | Строк на странице, от 1 до 20; локальный лимит. по умолчанию: 20; минимум: 1; максимум: 20. |
orders | array<OzonAnalyticsOrder> | null | необязательно; null допустим | До пяти правил сортировки; неизвестные поля отвергаются до запроса к источнику. по умолчанию: null; макс. элементов: 5. |
category_id | string | обязательно | Иерархический ID категории с _, отличается от niche_id другой базы. макс. длина: 1000; формат: ^[0-9]+(?:_[0-9]+)*$. |
month | string | null | необязательно; null допустим | Исторический месяц YYYY-MM; без него источник выбирает rolling период. по умолчанию: null; формат: ^[0-9]{4}-(0[1-9]|1[0-2])$. |
fulfillment | string | null | необязательно; null допустим | Один способ доставки: OZON/FBO/FBS/RFBS/FBP, не массив. по умолчанию: null; значения: ["OZON", "FBO", "FBS", "RFBS", "FBP"]. |
JSON · запрос Аналитический поиск категории{
"category_id": "100_200",
"month": "2026-09",
"page": 1,
"page_size": 1
}curl -X POST "https://bhapi.ru/analytics/ozon/api/v1/categories/search" \
-H "X-API-Token: YOUR_OZON_ANALYTICS_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{"category_id":"100_200","month":"2026-09","page":1,"page_size":1}'Ответ
Envelope: OzonAnalyticsCategorySearchResponse. Поля data и все вложенные типы: OzonAnalyticsCategorySearchResult. Период, свежесть и предупреждения: 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": "page_count",
"has_next": null
},
"category_info": null,
"category_summary": {}
},
"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": "2026-09"
},
"resolved_period": null,
"snapshot_month": null,
"freshness": "historical_or_periodic",
"warnings": [
"periodic_data_not_realtime",
"coverage_and_estimation_method_unverified"
]
}
}Товары продавца
/analytics/ozon/api/v1/sellers/productsВозвращает ассортимент конкретного продавца с доступными показателями товаров.
Когда применять: Используйте для исследования магазина или продавца-конкурента: найдите его SKU и отберите позиции по аналитическим фильтрам.
- Продавец:
seller_id— отдельная строгая строка; отрицательные значения допустимы. Этот параметр отличается отseller_namesв отчёте по товарам. - Настройки выборки: Действуют общие правила drill-down. Рейтинг и позиция зависят от измерения и периода.
Формат и ключ: JSON; Content-Type: application/json и X-API-Token.
Учёт запросов: один проверенный успешный ответ — одна единица квоты. Ошибки успешную квоту не расходуют; подробнее в разделе ошибок.
Параметры запроса
| Поле | Тип | Наличие | Описание и ограничения |
|---|---|---|---|
start_date | date | null | необязательно; null допустим | Запрошенное начало статистики YYYY-MM-DD; фактический период возвращается отдельно. по умолчанию: null. |
end_date | date | null | необязательно; null допустим | Запрошенное окончание статистики YYYY-MM-DD; источник ограничивает свежесть до T-1. по умолчанию: null. |
page | integer | необязательно | Страница с 1; локальная верхняя граница 100000. по умолчанию: 1; минимум: 1; максимум: 100000. |
page_size | integer | необязательно | От 1 до 100 строк на странице, по умолчанию 100. по умолчанию: 100; минимум: 1; максимум: 100. |
sort_field | string | null | необязательно; null допустим | Показатель сортировки из разрешённого списка разрешённых значений. по умолчанию: null; значения: ["sales_units", "sales_revenue", "price", "stock_units", "rating", "review_count", "days_in_stock", "turnover_days", "lost_revenue", "category_position"]. |
sort_direction | string | null | необязательно; null допустим | Направление сортировки; задаётся вместе с sort_field. по умолчанию: null; значения: ["asc", "desc"]. |
currency | string | необязательно | Запрошенная валюта цен/денежных показателей; корректность преобразования определяется источником. по умолчанию: "RUB"; значения: ["RUB", "USD", "EUR", "CNY"]. |
currency_rate | integer | null | необязательно; null допустим | Пользовательский курс для не-RUB валюты; источник документирует целое число. по умолчанию: null; максимум: 1000000. |
include_fbs | boolean | null | необязательно; null допустим | Включать ли FBS показатели; отсутствующее поле не заменяется false. по умолчанию: null. |
filters | array<OzonAnalyticsNumericFilter> | null | необязательно; null допустим | До 20 условий, объединённых AND; каждое условие передаётся без дополнительного запроса. по умолчанию: null; макс. элементов: 20. |
seller_id | string | обязательно | ID продавца строкой; отрицательные значения возможны у собственных магазинов Ozon. формат: ^-?[0-9]{1,19}$. |
JSON · запрос Товары продавца{
"seller_id": "-12345",
"page": 1,
"page_size": 1
}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"
]
}
}Обратный поиск фраз по SKU
/analytics/ozon/api/v1/keywords/back-searchНаходит поисковые фразы, связанные с указанными SKU, и доступные показатели этих фраз.
Когда применять: Подходит для исследования того, как товар представлен в поиске, и для подготовки исходного списка фраз к дальнейшему анализу спроса.
- Товары:
product_idsсодержит 1–20 уникальных SKU. Связанныеproductsв ответе не обязаны входить в исходный список. - Варианты и каналы:
exclude_variants— обязательный boolean без значения по умолчанию.channelsпринимаетorganic/ad, один или два элемента. - Период:
month— действительный месяц YYYY-MM. - Показатели:
exposure/conversionвdimension— отношения 0–1. При нескольких SKU связьdimensionс конкретным входным товаром может быть неизвестна.
Формат и ключ: JSON; Content-Type: application/json и X-API-Token.
Учёт запросов: один проверенный успешный ответ — одна единица квоты. Ошибки успешную квоту не расходуют; подробнее в разделе ошибок.
Параметры запроса
| Поле | Тип | Наличие | Описание и ограничения |
|---|---|---|---|
page | integer | необязательно | Страница, начиная с 1; локальная верхняя граница 100000. по умолчанию: 1; минимум: 1; максимум: 100000. |
page_size | integer | необязательно | Строк на странице, от 1 до 20; локальный лимит. по умолчанию: 20; минимум: 1; максимум: 20. |
orders | array<OzonAnalyticsOrder> | null | необязательно; null допустим | До пяти правил сортировки; неизвестные поля отвергаются до запроса к источнику. по умолчанию: null; макс. элементов: 5. |
match_type | string | null | необязательно; null допустим | Совпадение ключевой фразы: exact или fuzzy;. по умолчанию: null; значения: ["exact", "fuzzy"]. |
include_keywords | array<string> | null | необязательно; null допустим | До 1000 включаемых слов/фраз для сужения выборки. по умолчанию: null; макс. элементов: 1000; элемент — мин. длина: 1; элемент — макс. длина: 1000. |
exclude_keywords | array<string> | null | необязательно; null допустим | До 1000 исключаемых слов/фраз. по умолчанию: null; макс. элементов: 1000; элемент — мин. длина: 1; элемент — макс. длина: 1000. |
search_volume | OzonAnalyticsNumericRange | null | необязательно; null допустим | Месячное число запросов по методике источника. по умолчанию: null. |
search_change30 | OzonAnalyticsNumericRange | null | необязательно; null допустим | Рост поискового спроса за 30 дней; проценты, включая отрицательные. по умолчанию: null. |
word_count | OzonAnalyticsNumericRange | null | необязательно; null допустим | Количество слов во фразе. по умолчанию: null. |
product_views | OzonAnalyticsNumericRange | null | необязательно; null допустим | Видимость/просмотры товаров по методике источника; не уникальные посетители. по умолчанию: null. |
products | OzonAnalyticsNumericRange | null | необязательно; null допустим | Количество товаров в поисковой выборке. по умолчанию: null. |
sellers | OzonAnalyticsNumericRange | null | необязательно; null допустим | Количество продавцов. по умолчанию: null. |
market_space | OzonAnalyticsNumericRange | null | необязательно; null допустим | Рыночное пространство; формула и единица не установлены. по умолчанию: null. |
conversion_sharing | OzonAnalyticsNumericRange | null | необязательно; null допустим | Концентрация конверсии, проценты по документации. по умолчанию: null. |
uniq_queries_w_ca | OzonAnalyticsNumericRange | null | необязательно; null допустим | Число добавлений в корзину по источника определению. по умолчанию: null. |
ca | OzonAnalyticsNumericRange | null | необязательно; null допустим | Конверсия добавления в корзину, проценты. по умолчанию: null. |
title_density | OzonAnalyticsNumericRange | null | необязательно; null допустим | Плотность фразы в названиях; шкала неизвестна. по умолчанию: null. |
ad_rival_count | OzonAnalyticsNumericRange | null | необязательно; null допустим | Количество рекламных конкурентов. по умолчанию: null. |
product_ids | array<string> | обязательно | От 1 до 20 SKU Ozon для обратного поиска фраз. мин. элементов: 1; макс. элементов: 20; элемент — мин. длина: 1; элемент — макс. длина: 19; элемент — формат: ^[0-9]+$. |
exclude_variants | boolean | обязательно | Исключать варианты товара: true или false. |
channels | array<string> | null | необязательно; null допустим | Каналы organic/ad; без поля источник не фильтрует каналы. по умолчанию: null; мин. элементов: 1; макс. элементов: 2; элемент — значения: ["organic", "ad"]. |
month | string | null | необязательно; null допустим | Исторический месяц YYYY-MM. по умолчанию: null; формат: ^[0-9]{4}-(0[1-9]|1[0-2])$. |
conversion | OzonAnalyticsNumericRange | null | необязательно; null допустим | Конверсия исследуемого SKU по фразе; dimension отношение 0..1. по умолчанию: null. |
ad_rank | OzonAnalyticsNumericRange | null | необязательно; null допустим | Позиция в рекламной выдаче. по умолчанию: null. |
natural_rank | OzonAnalyticsNumericRange | null | необязательно; null допустим | Позиция в органической выдаче. по умолчанию: null. |
exposure | OzonAnalyticsNumericRange | null | необязательно; null допустим | Доля видимости SKU по фразе, отношение 0..1. по умолчанию: null. |
JSON · запрос Обратный поиск фраз по SKU{
"product_ids": [
"123456789"
],
"exclude_variants": true,
"page": 1,
"page_size": 1
}curl -X POST "https://bhapi.ru/analytics/ozon/api/v1/keywords/back-search" \
-H "X-API-Token: YOUR_OZON_ANALYTICS_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{"product_ids":["123456789"],"exclude_variants":true,"page":1,"page_size":1}'Ответ
Envelope: OzonAnalyticsKeywordBackSearchResponse. Поля data и все вложенные типы: OzonAnalyticsKeywordListResult. Период, свежесть и предупреждения: meta. Необязательные значения не восстанавливаются из нулей или соседних методов.
JSON · ответ Обратный поиск фраз по SKU{
"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"
]
}
}Подбор поисковых фраз
/analytics/ozon/api/v1/keywords/miningРасширяет исходную поисковую фразу и возвращает связанные фразы с доступными показателями.
Когда применять: Используйте для расширения семантики: соберите кандидатов для исследования спроса или подготовки описания товара и отберите их по доступным метрикам.
- Исходная фраза:
keyword— обязательная непустая фраза. - Отбор и сортировка: Действуют общие правила
keyword-фильтров и сортировки. Дополнительно доступныpriceиrelevancy. - Релевантность: Шкала
relevancyне установлена и не пересчитывается.
Формат и ключ: JSON; Content-Type: application/json и X-API-Token.
Учёт запросов: один проверенный успешный ответ — одна единица квоты. Ошибки успешную квоту не расходуют; подробнее в разделе ошибок.
Параметры запроса
| Поле | Тип | Наличие | Описание и ограничения |
|---|---|---|---|
page | integer | необязательно | Страница, начиная с 1; локальная верхняя граница 100000. по умолчанию: 1; минимум: 1; максимум: 100000. |
page_size | integer | необязательно | Строк на странице, от 1 до 20; локальный лимит. по умолчанию: 20; минимум: 1; максимум: 20. |
orders | array<OzonAnalyticsOrder> | null | необязательно; null допустим | До пяти правил сортировки; неизвестные поля отвергаются до запроса к источнику. по умолчанию: null; макс. элементов: 5. |
match_type | string | null | необязательно; null допустим | Совпадение ключевой фразы: exact или fuzzy;. по умолчанию: null; значения: ["exact", "fuzzy"]. |
include_keywords | array<string> | null | необязательно; null допустим | До 1000 включаемых слов/фраз для сужения выборки. по умолчанию: null; макс. элементов: 1000; элемент — мин. длина: 1; элемент — макс. длина: 1000. |
exclude_keywords | array<string> | null | необязательно; null допустим | До 1000 исключаемых слов/фраз. по умолчанию: null; макс. элементов: 1000; элемент — мин. длина: 1; элемент — макс. длина: 1000. |
search_volume | OzonAnalyticsNumericRange | null | необязательно; null допустим | Месячное число запросов по методике источника. по умолчанию: null. |
search_change30 | OzonAnalyticsNumericRange | null | необязательно; null допустим | Рост поискового спроса за 30 дней; проценты, включая отрицательные. по умолчанию: null. |
word_count | OzonAnalyticsNumericRange | null | необязательно; null допустим | Количество слов во фразе. по умолчанию: null. |
product_views | OzonAnalyticsNumericRange | null | необязательно; null допустим | Видимость/просмотры товаров по методике источника; не уникальные посетители. по умолчанию: null. |
products | OzonAnalyticsNumericRange | null | необязательно; null допустим | Количество товаров в поисковой выборке. по умолчанию: null. |
sellers | OzonAnalyticsNumericRange | null | необязательно; null допустим | Количество продавцов. по умолчанию: null. |
market_space | OzonAnalyticsNumericRange | null | необязательно; null допустим | Рыночное пространство; формула и единица не установлены. по умолчанию: null. |
conversion_sharing | OzonAnalyticsNumericRange | null | необязательно; null допустим | Концентрация конверсии, проценты по документации. по умолчанию: null. |
uniq_queries_w_ca | OzonAnalyticsNumericRange | null | необязательно; null допустим | Число добавлений в корзину по источника определению. по умолчанию: null. |
ca | OzonAnalyticsNumericRange | null | необязательно; null допустим | Конверсия добавления в корзину, проценты. по умолчанию: null. |
title_density | OzonAnalyticsNumericRange | null | необязательно; null допустим | Плотность фразы в названиях; шкала неизвестна. по умолчанию: null. |
ad_rival_count | OzonAnalyticsNumericRange | null | необязательно; null допустим | Количество рекламных конкурентов. по умолчанию: null. |
keyword | string | обязательно | Исходная фраза для расширения семантики, до 1000 символов. мин. длина: 1; макс. длина: 1000. |
price | OzonAnalyticsNumericRange | null | необязательно; null допустим | Ценовой фильтр Mining; валюта/кодирование источника требуют проверки. по умолчанию: null. |
relevancy | OzonAnalyticsNumericRange | null | необязательно; null допустим | Релевантность исходной фразе; шкала источника не установлена. по умолчанию: null. |
JSON · запрос Подбор поисковых фраз{
"keyword": "термокружка",
"page": 1,
"page_size": 1
}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"
]
}
}Исследование поискового рынка
/analytics/ozon/api/v1/keywords/market-searchВозвращает рыночные показатели поисковых фраз с возможностью фильтрации по фразам и категориям.
Когда применять: Подходит для сравнения поискового спроса и конкуренции по выбранным фразам, чтобы определить приоритеты дальнейшего исследования.
- Отбор:
keywords,category_idsиsearch_dateнеобязательны. Действуют общие правила сортировки поисковых фраз. - Период:
search_dateвыбирает предыдущий полный месяц; без даты используетсяrolling30. - Единицы: У
weightиvolumeнеизвестные единицы. Они не наследуют граммы и литры одноимённых фильтров отчёта по товарам.
Формат и ключ: JSON; Content-Type: application/json и X-API-Token.
Учёт запросов: один проверенный успешный ответ — одна единица квоты. Ошибки успешную квоту не расходуют; подробнее в разделе ошибок.
Параметры запроса
| Поле | Тип | Наличие | Описание и ограничения |
|---|---|---|---|
page | integer | необязательно | Страница, начиная с 1; локальная верхняя граница 100000. по умолчанию: 1; минимум: 1; максимум: 100000. |
page_size | integer | необязательно | Строк на странице, от 1 до 20; локальный лимит. по умолчанию: 20; минимум: 1; максимум: 20. |
orders | array<OzonAnalyticsOrder> | null | необязательно; null допустим | До пяти правил сортировки; неизвестные поля отвергаются до запроса к источнику. по умолчанию: null; макс. элементов: 5. |
match_type | string | null | необязательно; null допустим | Совпадение ключевой фразы: exact или fuzzy;. по умолчанию: null; значения: ["exact", "fuzzy"]. |
keywords | array<string> | null | необязательно; null допустим | До 1000 рыночных ключевых фраз. по умолчанию: null; макс. элементов: 1000; элемент — мин. длина: 1; элемент — макс. длина: 1000. |
category_ids | array<string> | null | необязательно; null допустим | До 1000 ID категорий, не русские пути. по умолчанию: null; макс. элементов: 1000; элемент — мин. длина: 1; элемент — макс. длина: 1000. |
search_date | string | null | необязательно; null допустим | Дата выбора предыдущего полного исторического месяца; без неё rolling30. по умолчанию: null; формат: ^[0-9]{4}-[0-9]{2}-[0-9]{2}$. |
search_volume | OzonAnalyticsNumericRange | null | необязательно; null допустим | Месячный поисковый спрос. по умолчанию: null. |
search_change30 | OzonAnalyticsNumericRange | null | необязательно; null допустим | Рост за 30 дней, проценты. по умолчанию: null. |
monthly_sales | OzonAnalyticsNumericRange | null | необязательно; null допустим | Единицы продаж выбранного периода. по умолчанию: null. |
monthly_revenue | OzonAnalyticsNumericRange | null | необязательно; null допустим | Выручка источника за период; не подтверждённая сумма оплаченных заказов. по умолчанию: null. |
price | OzonAnalyticsNumericRange | null | необязательно; null допустим | Средняя цена; валюта не устанавливается предположением. по умолчанию: null. |
product_views | OzonAnalyticsNumericRange | null | необязательно; null допустим | Видимость/просмотры товаров. по умолчанию: null. |
products | OzonAnalyticsNumericRange | null | необязательно; null допустим | Количество товаров. по умолчанию: null. |
volume | OzonAnalyticsNumericRange | null | необязательно; null допустим | Объём; для этого keyword метода единица не документирована. по умолчанию: null. |
market_space | OzonAnalyticsNumericRange | null | необязательно; null допустим | Рыночное пространство, формула неизвестна. по умолчанию: null. |
conversion_sharing | OzonAnalyticsNumericRange | null | необязательно; null допустим | Концентрация конверсии, проценты. по умолчанию: null. |
reviews | OzonAnalyticsNumericRange | null | необязательно; null допустим | Количество отзывов. по умолчанию: null. |
ratings | OzonAnalyticsNumericRange | null | необязательно; null допустим | Рейтинг товаров, шкала 0..5. по умолчанию: null. |
sellers | OzonAnalyticsNumericRange | null | необязательно; null допустим | Количество продавцов. по умолчанию: null. |
weight | OzonAnalyticsNumericRange | null | необязательно; null допустим | Вес; для этого keyword метода единица не установлена. по умолчанию: null. |
JSON · запрос Исследование поискового рынка{
"keywords": [
"термокружка"
],
"page": 1,
"page_size": 1
}curl -X POST "https://bhapi.ru/analytics/ozon/api/v1/keywords/market-search" \
-H "X-API-Token: YOUR_OZON_ANALYTICS_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{"keywords":["термокружка"],"page":1,"page_size":1}'Ответ
Envelope: OzonAnalyticsKeywordMarketSearchResponse. Поля 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и границы принимают только конечныеJSONnumbers, без строк и 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:page1–100000 (default 1),page_size1–20 (default 20). - Drill-down
page_size1–100 (default 100). - До 5
orders,directionasc/desc(defaultdesc). - 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
| Поле | Тип | Наличие | Описание и ограничения |
|---|---|---|---|
min | number | null | необязательно; null допустим | Нижняя конечная граница включительно; единица определяется фильтром. по умолчанию: null. |
max | number | null | необязательно; null допустим | Верхняя конечная граница включительно; единица определяется фильтром. по умолчанию: null. |
OzonAnalyticsNumericFilter
| Поле | Тип | Наличие | Описание и ограничения |
|---|---|---|---|
field | string | обязательно | Разрешённый числовой показатель фильтрации; price — конечная цена, sales_units — единицы за период. значения: ["sales_units", "sales_revenue", "price", "stock_units", "rating", "review_count", "days_in_stock", "turnover_days", "lost_revenue", "category_position"]. |
op | string | обязательно | Оператор сравнения; BETWEEN включает обе границы. значения: ["GTE", "LTE", "GT", "LT", "EQ", "NOT_EQ", "BETWEEN"]. |
value | number | обязательно | Конечное числовое значение или нижняя граница BETWEEN; единица зависит от field. |
value2 | number | null | необязательно; null допустим | Верхняя граница BETWEEN, обязательна только для этого оператора. по умолчанию: null. |
OzonAnalyticsBrandFilter
| Поле | Тип | Наличие | Описание и ограничения |
|---|---|---|---|
names | array<string> | необязательно | Названия включаемых/исключаемых брендов; для unbranded массив пуст. макс. элементов: 1000; элемент — мин. длина: 1; элемент — макс. длина: 1000. |
mode | string | обязательно | Режим бренда: включить, исключить или только без бренда. значения: ["include", "exclude", "unbranded"]. |
OzonAnalyticsOrder
| Поле | Тип | Наличие | Описание и ограничения |
|---|---|---|---|
field | string | обязательно | Разрешённый публичный показатель сортировки; списка разрешённых значений зависит от метода. мин. длина: 1; макс. длина: 1000. |
direction | string | необязательно | Направление сортировки: asc или desc. по умолчанию: "desc"; значения: ["asc", "desc"]. |
Полная структура ответов
status="success", data и meta присутствуют явно. Поля ниже образуют полный справочник вложенных типов. В таблицах «необязательно; null допустим» означает неизвестное или отсутствующее значение; это не ноль. Все денежные Decimal поля передаются строками с сохранением точности.
OzonAnalyticsCategoryInfo
| Поле | Тип | Наличие | Описание и ограничения |
|---|---|---|---|
category | OzonAnalyticsCategoryNode | null | необязательно; null допустим | Конечный узел категории; отсутствующий объект null. по умолчанию: null. |
full_category_ids | array<string> | null | необязательно; null допустим | Иерархия ID от корня до листа. по умолчанию: null. |
title_path | string | null | необязательно; null допустим | Русский путь категории. по умолчанию: null. |
cn_title_path | string | null | необязательно; null допустим | Китайский путь категории. по умолчанию: null. |
en_title_path | string | null | необязательно; null допустим | Английский путь категории. по умолчанию: null. |
OzonAnalyticsCategoryNode
| Поле | Тип | Наличие | Описание и ограничения |
|---|---|---|---|
id | string | null | необязательно; null допустим | ID категории, сохраняет иерархические разделители. по умолчанию: null. |
pid | string | null | необязательно; null допустим | ID родительской категории. по умолчанию: null. |
title | string | null | необязательно; null допустим | Название категории на русском/исходном языке. по умолчанию: null. |
cn_title | string | null | необязательно; null допустим | Китайское название категории, если присутствует. по умолчанию: null. |
en_title | string | null | необязательно; null допустим | Английское название категории, если присутствует. по умолчанию: null. |
level | integer | null | необязательно; null допустим | Уровень категории в иерархии. по умолчанию: null. |
cross_border_sellable | boolean | null | необязательно; null допустим | Поддержка трансграничной продажи по данным источника. по умолчанию: null. |
disabled | boolean | null | необязательно; null допустим | Признак отключённой категории; неизвестно=null. по умолчанию: null. |
OzonAnalyticsCategoryRank
| Поле | Тип | Наличие | Описание и ограничения |
|---|---|---|---|
period_label | string | null | необязательно; null допустим | Исходная метка YYYY-MM или YYYY-MM-DD, без выдуманного дня. по умолчанию: null. |
rank | integer | null | необязательно; null допустим | Позиция в категории по источнику. по умолчанию: null. |
source_count | integer | null | необязательно; null допустим | Счётчик источника с нераскрытой семантикой; не единицы продаж. по умолчанию: null. |
OzonAnalyticsCategorySearchResult
| Поле | Тип | Наличие | Описание и ограничения |
|---|---|---|---|
items | array<OzonAnalyticsProductCard> | обязательно | Товары текущей страницы с доступными показателями, отсутствующие значения — null. |
pagination | OzonAnalyticsPagination | обязательно | Страница, исходный total и доказанное наличие продолжения. |
category_info | OzonAnalyticsCategoryInfo | null | необязательно; null допустим | OzonAnalyticsКонтекст выбранной категории, отдельно от категории каждой строки. по умолчанию: null. |
category_summary | OzonAnalyticsCategorySummary | обязательно | Агрегаты категории, не текущей страницы. |
OzonAnalyticsCategorySummary
| Поле | Тип | Наличие | Описание и ограничения |
|---|---|---|---|
sales_units | integer | null | необязательно; null допустим | Продажи всей категории за фактический период, не сумма страницы. по умолчанию: null. |
sales_revenue | string | null | необязательно; null допустим | Выручка категории за период, десятичная строка в RUB по docs. по умолчанию: null. |
average_price | string | null | необязательно; null допустим | Средняя цена категории, десятичная строка. по умолчанию: null. |
rating | number | null | необязательно; null допустим | Средний рейтинг категории. по умолчанию: null. |
seasonality_strength | string | null | необязательно; null допустим | Строковая интенсивность сезонности; не числовая доля. по умолчанию: null. |
seasonality_phase | string | null | необязательно; null допустим | Строковая фаза сезонности. по умолчанию: null. |
fulfillment_distribution | object | null | необязательно; null допустим | Числа товаров по fulfillment; не страна происхождения продавца. по умолчанию: null. |
OzonAnalyticsExpandedProductResult
| Поле | Тип | Наличие | Описание и ограничения |
|---|---|---|---|
product | OzonAnalyticsProductCard | обязательно | Одна карточка; ошибка источника не превращается в пустую карточку. |
summary | OzonAnalyticsSummary | обязательно | Агрегаты выбранного окна источника. |
sales_trend | array<OzonAnalyticsTrendPoint> | null | необязательно; null допустим | Дневные точки выбранного окна, без интерполяции; null при отсутствии контейнера. по умолчанию: null. |
category_ranks | array<OzonAnalyticsCategoryRank> | null | необязательно; null допустим | История категорийных позиций, месячные labels сохраняются. по умолчанию: null. |
OzonAnalyticsKeywordCategoryInfo
| Поле | Тип | Наличие | Описание и ограничения |
|---|---|---|---|
id | string | null | необязательно; null допустим | ID категории ключевой фразы. по умолчанию: null. |
title_cn | string | null | необязательно; null допустим | Название категории на китайском. по умолчанию: null. |
title_en | string | null | необязательно; null допустим | Название категории на английском. по умолчанию: null. |
title_ru | string | null | необязательно; null допустим | Название категории на русском. по умолчанию: null. |
cn_title_path | string | null | необязательно; null допустим | Китайский путь категории. по умолчанию: null. |
en_title_path | string | null | необязательно; null допустим | Английский путь категории. по умолчанию: null. |
title_path | string | null | необязательно; null допустим | Русский путь категории. по умолчанию: null. |
cross_border_sellable | boolean | null | необязательно; null допустим | Признак трансграничной продажи категории. по умолчанию: null. |
OzonAnalyticsKeywordDimension
| Поле | Тип | Наличие | Описание и ограничения |
|---|---|---|---|
channel | string | null | необязательно; null допустим | Канал фразы: organic/ad. по умолчанию: null; значения: ["organic", "ad"]. |
organic_rank | integer | null | необязательно; null допустим | Органическая позиция SKU по фразе. по умолчанию: null. |
exposure_ratio | number | null | необязательно; null допустим | Видимость SKU, отношение 0..1, не проценты. по умолчанию: null; минимум: 0; максимум: 1. |
conversion_ratio | number | null | необязательно; null допустим | Конверсия SKU, отношение 0..1, не ca процентов. по умолчанию: null; минимум: 0; максимум: 1. |
position_indicators | array<integer | string> | null | необязательно; null допустим | Массив показателей позиции с неизвестной семантикой; не трактуется как число показов. по умолчанию: null. |
OzonAnalyticsKeywordListResult
| Поле | Тип | Наличие | Описание и ограничения |
|---|---|---|---|
items | array<OzonAnalyticsKeywordRow> | обязательно | Только строки Ozon; WB строки не публикуются. |
pagination | OzonAnalyticsPagination | обязательно | Total источника; при исключении WB полный Ozon total неизвестен. |
excluded_platform_count | integer | необязательно | Число исключённых WB строк текущей источника страницы. по умолчанию: 0; минимум: 0. |
OzonAnalyticsKeywordProduct
| Поле | Тип | Наличие | Описание и ограничения |
|---|---|---|---|
sku | string | null | необязательно; null допустим | SKU связанного связанный товар; не обязательно входной SKU back-search. по умолчанию: null. |
ozon_id | string | null | необязательно; null допустим | Отдельный Ozon ID связанного товара. по умолчанию: null. |
title | string | null | необязательно; null допустим | Название связанного товара. по умолчанию: null. |
image_url | string | null | необязательно; null допустим | HTTP(S) ссылка на основную картинку связанного товара. по умолчанию: null. |
is_advertised | boolean | null | необязательно; null допустим | Признак рекламы; null при отсутствии. по умолчанию: null. |
OzonAnalyticsKeywordRow
| Поле | Тип | Наличие | Описание и ограничения |
|---|---|---|---|
keyword | string | null | необязательно; null допустим | Исходная поисковая фраза. по умолчанию: null. |
keyword_cn | string | null | необязательно; null допустим | Китайский перевод поисковой фразы. по умолчанию: null. |
record_id | string | null | необязательно; null допустим | ID записи фразы, не SKU. по умолчанию: null. |
platform | integer | обязательно | Платформа Ozon=0; строки WB исключаются, неизвестно запрещён. значение: 0. |
search_volume | integer | null | необязательно; null допустим | Месячное число поисковых запросов по методике источника. по умолчанию: null. |
search_growth_percent | number | null | необязательно; null допустим | Рост спроса за 30 дней, проценты; отрицательный или больше100 допустим. по умолчанию: null. |
product_count | integer | null | необязательно; null допустим | Количество товаров, если присутствует. по умолчанию: null. |
competing_products | integer | null | необязательно; null допустим | Количество конкурирующих товаров, отдельное от product_count. по умолчанию: null. |
sellers_count | integer | null | необязательно; null допустим | Количество продавцов. по умолчанию: null. |
average_price | string | null | необязательно; null допустим | Средняя цена, десятичная строка; валюта без evidence неизвестна. по умолчанию: null. |
currency | string | null | необязательно; null допустим | Валюта средней цены, null если источник её не указал. по умолчанию: null. |
product_visibility | number | null | необязательно; null допустим | Видимость товаров; методика/уникальность просмотров не установлены. по умолчанию: null. |
view_concentration_percent | number | null | необязательно; null допустим | Концентрация просмотра, проценты. по умолчанию: null. |
conversion_concentration_percent | number | null | необязательно; null допустим | Концентрация конверсии, проценты. по умолчанию: null. |
market_space | number | null | необязательно; null допустим | Рыночное пространство, формула и единица неизвестны. по умолчанию: null. |
return_cancellation_percent | number | null | необязательно; null допустим | Объединённая доля возвратов/отмен, проценты. по умолчанию: null. |
add_to_cart_count | integer | null | необязательно; null допустим | Число добавлений в корзину по источника определению. по умолчанию: null. |
add_to_cart_conversion_percent | number | null | необязательно; null допустим | Конверсия корзины ca, проценты; не dimension отношение. по умолчанию: null. |
word_count | integer | null | необязательно; null допустим | Количество слов поисковой фразы. по умолчанию: null. |
title_density | number | null | необязательно; null допустим | Плотность в названиях; шкала/формула неизвестны. по умолчанию: null. |
relevance | number | null | необязательно; null допустим | Релевантность seed фразе Mining; шкала неизвестна. по умолчанию: null. |
category_ids | array<string> | null | необязательно; null допустим | ID категорий фразы. по умолчанию: null. |
category_infos | array<OzonAnalyticsKeywordCategoryInfo> | null | необязательно; null допустим | Переводы и контексте категорий, если доступны. по умолчанию: null. |
products | array<OzonAnalyticsKeywordProduct> | null | необязательно; null допустим | Связанные связанные товары, не полный результат product search. по умолчанию: null. |
dimension | OzonAnalyticsKeywordDimension | null | необязательно; null допустим | относящиеся к SKU показатели back-search; связь конкретного входной SKU не установлена. по умолчанию: null. |
OzonAnalyticsPublicMetadata
| Поле | Тип | Наличие | Описание и ограничения |
|---|---|---|---|
request_id | string | обязательно | ID запроса BHAPI; используйте при обращении в поддержку. |
requested_period | OzonAnalyticsPeriod | null | необязательно; null допустим | Период/окно из входа, отдельно от фактического источника периода. по умолчанию: null. |
resolved_period | OzonAnalyticsPeriod | null | необязательно; null допустим | Фактические start/end только из ответа источника; missing=null. по умолчанию: null. |
observed_at | date-time | обязательно | Время обработки ответа в UTC, не дата snapshot данных. |
snapshot_month | string | null | необязательно; null допустим | Месяц snapshot, если явно возвращён; не точная дата обновления. по умолчанию: null; макс. длина: 20. |
freshness | string | обязательно | Исторические/периодические данные, без realtime SLA. значение: "historical_or_periodic". |
warnings | array<string> | необязательно | Нейтральные ограничения покрытия, валюты и периода; коды из закрытого списка. элемент — значения: ["periodic_data_not_realtime", "coverage_and_estimation_method_unverified", "current_price_accuracy_unverified", "non_ozon_rows_excluded_total_unknown", "total_semantics_unknown"]. |
retrieved_at | date-time | обязательно | Время получения ответа BHAPI в UTC; не дата обновления аналитической базы. |
OzonAnalyticsPagination
| Поле | Тип | Наличие | Описание и ограничения |
|---|---|---|---|
page | integer | null | необязательно; null допустим | Запрошенная страница; null для метода без пагинации. по умолчанию: null; минимум: 1. |
page_size | integer | null | необязательно; null допустим | Запрошенный размер страницы; null для метода без этого входа. по умолчанию: null; минимум: 1. |
returned_count | integer | обязательно | Число опубликованных строк текущего ответа. минимум: 0. |
total_count | integer | null | необязательно; null допустим | Подтверждённое число совпадений; null при page-count, фильтрации WB или неопределённости. по умолчанию: null; минимум: 0. |
source_total | integer | null | необязательно; null допустим | Исходный total без предположения о полноте каталога. по умолчанию: null; минимум: 0. |
source_total_semantics | string | необязательно | Семантика исходного total; для drill-down неизвестна. по умолчанию: "unknown"; значения: ["matched_count", "page_count", "unknown"]. |
has_next | boolean | null | необязательно; null допустим | Подтверждённое наличие следующей страницы; не вычисляется из заполненности страницы. по умолчанию: null. |
OzonAnalyticsPeriod
| Поле | Тип | Наличие | Описание и ограничения |
|---|---|---|---|
start | date | null | необязательно; null допустим | Начало фактического/запрошенного периода; null при неизвестной границе. по умолчанию: null. |
end | date | null | необязательно; null допустим | Окончание фактического/запрошенного периода; не заменяется датой запроса. по умолчанию: null. |
label | string | null | необязательно; null допустим | Запрошенное окно/месяц, если запрос не задаёт точные даты. по умолчанию: null. |
OzonAnalyticsProductCard
| Поле | Тип | Наличие | Описание и ограничения |
|---|---|---|---|
product_id | string | обязательно | Точный SKU Ozon строкой, без StrictFloat преобразования. мин. длина: 1; макс. длина: 19; формат: ^[0-9]+$. |
title | string | null | необязательно; null допустим | Название товара; null при отсутствии. по умолчанию: null. |
brand | string | null | необязательно; null допустим | Название бренда, если доступно. по умолчанию: null. |
brand_id | string | null | необязательно; null допустим | ID бренда строкой, если источник его возвращает. по умолчанию: null. |
seller_id | string | null | необязательно; null допустим | ID продавца строкой; отрицательные значения допустимы для собственных магазинов Ozon. по умолчанию: null. |
seller_name | string | null | необязательно; null допустим | Название продавца. по умолчанию: null. |
image_url | string | null | необязательно; null допустим | Основная картинка, HTTP(S) URL; сервис её не скачивает. по умолчанию: null. |
product_url | string | null | необязательно; null допустим | URL карточки из источника, без userinfo/tracking query. по умолчанию: null. |
brand_url | string | null | необязательно; null допустим | HTTP(S) ссылка на бренд, если доступна. по умолчанию: null. |
niche_id | string | null | необязательно; null допустим | ID ниши отдельной базы; не category ID другого метода. по умолчанию: null. |
niche_name | string | null | необязательно; null допустим | Название/путь ниши источника. по умолчанию: null. |
category_path | string | null | необязательно; null допустим | Русский путь категории, если пришёл явно. по умолчанию: null. |
category_info | OzonAnalyticsCategoryInfo | null | необязательно; null допустим | Вложенная категория и иерархия для расширенной карточки/отчёта методов. по умолчанию: null. |
seller_is_best_seller | boolean | null | необязательно; null допустим | Признак bestseller продавца; не выводится из sales. по умолчанию: null. |
listing_date | date | null | необязательно; null допустим | Дата размещения YYYY-MM-DD. по умолчанию: null. |
listing_timestamp_ms | integer | null | необязательно; null допустим | Источника timestamp размещения, миллисекунды, не секунды. по умолчанию: null. |
listing_age_days | integer | null | необязательно; null допустим | Возраст размещения в днях. по умолчанию: null. |
listing_age_months | integer | null | необязательно; null допустим | Возраст размещения в месяцах. по умолчанию: null. |
source_updated_at | string | null | необязательно; null допустим | Исходная дата обновления без подтверждённого часового пояса; не интерпретируется как UTC. по умолчанию: null. |
additional_image_urls | array<string> | null | необязательно; null допустим | Дополнительные изображения базовой карточки, без основного image_url. по умолчанию: null. |
image_urls | array<string> | null | необязательно; null допустим | Полный массив изображений расширенной карточки; не замена массива дополнительных изображений. по умолчанию: null. |
image_count | integer | null | необязательно; null допустим | Число изображений по источнику; не восстанавливается по длине неполного массива. по умолчанию: null. |
price | string | null | необязательно; null допустим | Цена текущая/дневная по методу, десятичная строка в currency; соответствие текущему Ozon требует сверки. по умолчанию: null. |
old_price | string | null | необязательно; null допустим | Цена до скидки, десятичная строка в currency. по умолчанию: null. |
ozon_card_price | string | null | необязательно; null допустим | Цена карты Ozon, десятичная строка; не подменяет обычную цену. по умолчанию: null. |
min_price | string | null | необязательно; null допустим | Минимальная цена периода, десятичная строка. по умолчанию: null. |
max_price | string | null | необязательно; null допустим | Максимальная цена периода, десятичная строка. по умолчанию: null. |
average_price | string | null | необязательно; null допустим | Средняя цена периода, десятичная строка. по умолчанию: null. |
currency | string | null | необязательно; null допустим | ISO currency code; ₽→RUB, неизвестно=null. Код не доказывает корректность суммы. по умолчанию: null. |
discount_percent | integer | null | необязательно; null допустим | Скидка, целые проценты 0..100. по умолчанию: null; минимум: 0; максимум: 100. |
rating | number | null | необязательно; null допустим | Рейтинг, шкала 0..5, неизвестно=null. по умолчанию: null; минимум: 0; максимум: 5. |
review_count | integer | null | необязательно; null допустим | Количество отзывов, единицы. по умолчанию: null; минимум: 0. |
questions_and_answers | integer | null | необязательно; null допустим | Число вопросов/ответов по определению источника, без текстов. по умолчанию: null; минимум: 0. |
stock_units | integer | null | необязательно; null допустим | Остаток в единицах; состав зависит от метода, у Trend только FBO. по умолчанию: null; минимум: 0. |
stock_fbs_units | integer | null | необязательно; null допустим | FBS остаток; не складывается с stock_units без подтверждения состава. по умолчанию: null; минимум: 0. |
warehouses_count | integer | null | необязательно; null допустим | Количество FBO складов. по умолчанию: null; минимум: 0. |
is_fbs | boolean | null | необязательно; null допустим | Признак FBS по источнику. по умолчанию: null. |
delivery_scheme | string | null | необязательно; null допустим | Строковый способ доставки базовой карточки. по умолчанию: null. |
fulfillment | array<string> | null | необязательно; null допустим | Способы доставки OZON/FBO/FBS/RFBS/FBP; может быть несколько. по умолчанию: null; элемент — значения: ["OZON", "FBO", "FBS", "RFBS", "FBP"]. |
sales_units | integer | null | необязательно; null допустим | Единицы продаж выбранного периода, не обязательно календарного месяца и не подтверждённые выкупы. по умолчанию: null; минимум: 0. |
sales_revenue | string | null | необязательно; null допустим | Выручка выбранного периода по источнику, десятичная строка; не подтверждённая сумма оплаченных заказов. по умолчанию: null. |
sales_per_day | number | null | необязательно; null допустим | Средние единицы в день выбранного периода, не отдельная дневная точка. по умолчанию: null. |
sales_per_stock_day | number | null | необязательно; null допустим | Средние единицы по дням наличия. по умолчанию: null. |
sales_revenue_per_day | string | null | необязательно; null допустим | Средняя выручка в день, десятичная строка. по умолчанию: null. |
sales_revenue_per_stock_day | string | null | необязательно; null допустим | Средняя выручка по дням наличия, десятичная строка. по умолчанию: null. |
previous_sales_units | integer | null | необязательно; null допустим | Единицы продаж предыдущего окна равной длины по источника методике. по умолчанию: null. |
previous_sales_revenue | string | null | необязательно; null допустим | Выручка предыдущего окна, десятичная строка; точные границы неизвестны. по умолчанию: null. |
potential_revenue | string | null | необязательно; null допустим | Оценка потенциальной выручки при наличии весь период, десятичная строка. по умолчанию: null. |
lost_revenue | string | null | необязательно; null допустим | Оценка упущенной выручки, не чистой прибыли, десятичная строка. по умолчанию: null. |
lost_revenue_percent | number | null | необязательно; null допустим | Доля упущенной выручки, проценты. по умолчанию: null. |
days_in_stock | integer | null | необязательно; null допустим | Дни наличия в статистическом периоде. по умолчанию: null. |
days_in_period | integer | null | необязательно; null допустим | Дни продажи в статистическом периоде, включая отсутствие на складе. по умолчанию: null. |
turnover_days | number | null | необязательно; null допустим | Оценка оборачиваемости в днях; меньше означает быстрее. по умолчанию: null. |
frozen_stock_units | integer | null | необязательно; null допустим | Медленный/неликвидный остаток по определению источника. по умолчанию: null. |
dimension_position | integer | null | необязательно; null допустим | Позиция SKU в измерении запроса — бренд/продавец/категория. по умолчанию: null. |
category_position | integer | null | необязательно; null допустим | Позиция внутри категории, не alias dimension_position. по умолчанию: null. |
revenue_share_percent | number | null | необязательно; null допустим | Доля выручки SKU в измерении, проценты; полнота знаменателя требует подтверждения. по умолчанию: null. |
views | integer | null | необязательно; null допустим | Периодические просмотры карточки в report, не realtime/уникальные посетители. по умолчанию: null. |
cart_conversion_percent | number | null | необязательно; null допустим | Конверсия корзины, проценты по документации report. по умолчанию: null. |
order_conversion_percent | number | null | необязательно; null допустим | Конверсия заказа, проценты, не выкупа. по умолчанию: null. |
sales_growth_percent | number | null | необязательно; null допустим | Рост продаж, проценты, может быть отрицательным. по умолчанию: null. |
revenue_growth_percent | number | null | необязательно; null допустим | Рост выручки, проценты, может быть отрицательным. по умолчанию: null. |
advertising_cost_ratio | number | null | необязательно; null допустим | Доля рекламных затрат report по docs как отношение; шкала требует отдельной сверки. по умолчанию: null. |
gross_margin_percent | number | null | необязательно; null допустим | Валовая маржа источника, проценты; собственный расчёт не выполняется. по умолчанию: null. |
return_cancellation_percent | number | null | необязательно; null допустим | Объединённая доля возвратов/отмен, проценты. по умолчанию: null. |
variants_count | integer | null | необязательно; null допустим | Количество вариантов, не их полный перечень. по умолчанию: null. |
weight_grams | string | null | необязательно; null допустим | Масса в граммах, десятичная строка; включение упаковки не подтверждено. по умолчанию: null. |
volume_liters | string | null | необязательно; null допустим | Объём в литрах, десятичная строка; предмет/упаковка не установлены. по умолчанию: null. |
country | string | null | необязательно; null допустим | Страна продажи из явного ответа; не заполняется автоматически RU. по умолчанию: null. |
note | string | null | необязательно; null допустим | Бизнес-примечание; raw источника error сюда не переносится. по умолчанию: null. |
OzonAnalyticsProductDetailResult
| Поле | Тип | Наличие | Описание и ограничения |
|---|---|---|---|
product | OzonAnalyticsProductCard | обязательно | Одна карточка; ошибка источника не превращается в пустую карточку. |
OzonAnalyticsProductListResult
| Поле | Тип | Наличие | Описание и ограничения |
|---|---|---|---|
items | array<OzonAnalyticsProductCard> | обязательно | Товары текущей страницы с доступными показателями, отсутствующие значения — null. |
pagination | OzonAnalyticsPagination | обязательно | Страница, исходный total и доказанное наличие продолжения. |
OzonAnalyticsProductTrendResult
| Поле | Тип | Наличие | Описание и ограничения |
|---|---|---|---|
product_id | string | null | необязательно; null допустим | SKU из проверенного запроса; дневные строки может не возвращать ID. по умолчанию: null. |
points | array<OzonAnalyticsTrendPoint> | обязательно | Дневные точки; has_data=false отличается от нуля продаж. |
OzonAnalyticsSearchProduct
| Поле | Тип | Наличие | Описание и ограничения |
|---|---|---|---|
product_id | string | обязательно | Точный SKU Ozon строкой, без StrictFloat преобразования. мин. длина: 1; макс. длина: 19; формат: ^[0-9]+$. |
title | string | null | необязательно; null допустим | Название товара; null при отсутствии. по умолчанию: null. |
brand | string | null | необязательно; null допустим | Название бренда, если доступно. по умолчанию: null. |
brand_id | string | null | необязательно; null допустим | ID бренда строкой, если источник его возвращает. по умолчанию: null. |
seller_id | string | null | необязательно; null допустим | ID продавца строкой; отрицательные значения допустимы для собственных магазинов Ozon. по умолчанию: null. |
seller_name | string | null | необязательно; null допустим | Название продавца. по умолчанию: null. |
image_url | string | null | необязательно; null допустим | Основная картинка, HTTP(S) URL; сервис её не скачивает. по умолчанию: null. |
product_url | string | null | необязательно; null допустим | URL карточки из источника, без userinfo/tracking query. по умолчанию: null. |
OzonAnalyticsSearchResult
| Поле | Тип | Наличие | Описание и ограничения |
|---|---|---|---|
items | array<OzonAnalyticsSearchProduct> | обязательно | Найденные товары с базовой идентичностью; пустой поиск возвращает []. |
pagination | OzonAnalyticsPagination | обязательно | Пагинация и семантика total; поиск не принимает page. |
OzonAnalyticsSummary
| Поле | Тип | Наличие | Описание и ограничения |
|---|---|---|---|
sales_units | integer | null | необязательно; null допустим | Агрегат единиц продаж выбранного периода. по умолчанию: null. |
sales_revenue | string | null | необязательно; null допустим | Агрегат выручки выбранного периода, десятичная строка. по умолчанию: null. |
sales_per_day | number | null | необязательно; null допустим | Средние продажи в день периода. по умолчанию: null. |
stock_units | integer | null | необязательно; null допустим | Остаток summary по источнику. по умолчанию: null. |
OzonAnalyticsTrendPoint
| Поле | Тип | Наличие | Описание и ограничения |
|---|---|---|---|
date | date | обязательно | День YYYY-MM-DD; точки сортируются без интерполяции пропусков. |
has_data | boolean | null | необязательно; null допустим | Наличие данных дня; false отличается от sales_units=0. по умолчанию: null. |
sales_units | integer | null | необязательно; null допустим | Дневные единицы продаж источника, не подтверждённые выкупы. по умолчанию: null. |
sales_revenue | string | null | необязательно; null допустим | Дневная выручка expanded trend, десятичная строка; не вычисляется из цены. по умолчанию: null. |
price | string | null | необязательно; null допустим | Дневная цена, десятичная строка в currency. по умолчанию: null. |
old_price | string | null | необязательно; null допустим | Дневная цена до скидки, десятичная строка. по умолчанию: null. |
ozon_card_price | string | null | необязательно; null допустим | Дневная цена карты Ozon, десятичная строка. по умолчанию: null. |
currency | string | null | необязательно; null допустим | Валюта при явном значении; missing=null. по умолчанию: null. |
discount_percent | integer | null | необязательно; null допустим | Дневная скидка, проценты 0..100. по умолчанию: null; минимум: 0; максимум: 100. |
stock_units | integer | null | необязательно; null допустим | Дневной остаток; у основного Trend остаток FBO. по умолчанию: null. |
rating | number | null | необязательно; null допустим | Рейтинг на этот день, шкала 0..5. по умолчанию: null; минимум: 0; максимум: 5. |
review_count | integer | null | необязательно; null допустим | Накопленное число отзывов к дате. по умолчанию: null. |
is_new | boolean | null | необязательно; null допустим | Признак нового товара на день. по умолчанию: null. |
is_bestseller | boolean | null | необязательно; null допустим | Признак bestseller на день. по умолчанию: null. |
OzonAnalyticsSearchResponse
| Поле | Тип | Наличие | Описание и ограничения |
|---|---|---|---|
status | string | обязательно | Успешно проверенный бизнес-ответ, не только HTTP200. значение: "success". |
data | OzonAnalyticsSearchResult | обязательно | Типизированный результат выбранного метода. |
meta | OzonAnalyticsPublicMetadata | обязательно | Контекст периода, получения и ограничений результата. |
OzonAnalyticsDetailResponse
| Поле | Тип | Наличие | Описание и ограничения |
|---|---|---|---|
status | string | обязательно | Успешно проверенный бизнес-ответ, не только HTTP200. значение: "success". |
data | OzonAnalyticsProductDetailResult | обязательно | Типизированный результат выбранного метода. |
meta | OzonAnalyticsPublicMetadata | обязательно | Контекст периода, получения и ограничений результата. |
OzonAnalyticsExpandedDetailResponse
| Поле | Тип | Наличие | Описание и ограничения |
|---|---|---|---|
status | string | обязательно | Успешно проверенный бизнес-ответ, не только HTTP200. значение: "success". |
data | OzonAnalyticsExpandedProductResult | обязательно | Типизированный результат выбранного метода. |
meta | OzonAnalyticsPublicMetadata | обязательно | Контекст периода, получения и ограничений результата. |
OzonAnalyticsReportResponse
| Поле | Тип | Наличие | Описание и ограничения |
|---|---|---|---|
status | string | обязательно | Успешно проверенный бизнес-ответ, не только HTTP200. значение: "success". |
data | OzonAnalyticsProductListResult | обязательно | Типизированный результат выбранного метода. |
meta | OzonAnalyticsPublicMetadata | обязательно | Контекст периода, получения и ограничений результата. |
OzonAnalyticsTrendResponse
| Поле | Тип | Наличие | Описание и ограничения |
|---|---|---|---|
status | string | обязательно | Успешно проверенный бизнес-ответ, не только HTTP200. значение: "success". |
data | OzonAnalyticsProductTrendResult | обязательно | Типизированный результат выбранного метода. |
meta | OzonAnalyticsPublicMetadata | обязательно | Контекст периода, получения и ограничений результата. |
OzonAnalyticsBrandProductsResponse
| Поле | Тип | Наличие | Описание и ограничения |
|---|---|---|---|
status | string | обязательно | Успешно проверенный бизнес-ответ, не только HTTP200. значение: "success". |
data | OzonAnalyticsProductListResult | обязательно | Типизированный результат выбранного метода. |
meta | OzonAnalyticsPublicMetadata | обязательно | Контекст периода, получения и ограничений результата. |
OzonAnalyticsCategoryProductsResponse
| Поле | Тип | Наличие | Описание и ограничения |
|---|---|---|---|
status | string | обязательно | Успешно проверенный бизнес-ответ, не только HTTP200. значение: "success". |
data | OzonAnalyticsProductListResult | обязательно | Типизированный результат выбранного метода. |
meta | OzonAnalyticsPublicMetadata | обязательно | Контекст периода, получения и ограничений результата. |
OzonAnalyticsCategorySearchResponse
| Поле | Тип | Наличие | Описание и ограничения |
|---|---|---|---|
status | string | обязательно | Успешно проверенный бизнес-ответ, не только HTTP200. значение: "success". |
data | OzonAnalyticsCategorySearchResult | обязательно | Типизированный результат выбранного метода. |
meta | OzonAnalyticsPublicMetadata | обязательно | Контекст периода, получения и ограничений результата. |
OzonAnalyticsSellerProductsResponse
| Поле | Тип | Наличие | Описание и ограничения |
|---|---|---|---|
status | string | обязательно | Успешно проверенный бизнес-ответ, не только HTTP200. значение: "success". |
data | OzonAnalyticsProductListResult | обязательно | Типизированный результат выбранного метода. |
meta | OzonAnalyticsPublicMetadata | обязательно | Контекст периода, получения и ограничений результата. |
OzonAnalyticsKeywordBackSearchResponse
| Поле | Тип | Наличие | Описание и ограничения |
|---|---|---|---|
status | string | обязательно | Успешно проверенный бизнес-ответ, не только HTTP200. значение: "success". |
data | OzonAnalyticsKeywordListResult | обязательно | Типизированный результат выбранного метода. |
meta | OzonAnalyticsPublicMetadata | обязательно | Контекст периода, получения и ограничений результата. |
OzonAnalyticsKeywordMiningResponse
| Поле | Тип | Наличие | Описание и ограничения |
|---|---|---|---|
status | string | обязательно | Успешно проверенный бизнес-ответ, не только HTTP200. значение: "success". |
data | OzonAnalyticsKeywordListResult | обязательно | Типизированный результат выбранного метода. |
meta | OzonAnalyticsPublicMetadata | обязательно | Контекст периода, получения и ограничений результата. |
OzonAnalyticsKeywordMarketSearchResponse
| Поле | Тип | Наличие | Описание и ограничения |
|---|---|---|---|
status | string | обязательно | Успешно проверенный бизнес-ответ, не только HTTP200. значение: "success". |
data | OzonAnalyticsKeywordListResult | обязательно | Типизированный результат выбранного метода. |
meta | OzonAnalyticsPublicMetadata | обязательно | Контекст периода, получения и ограничений результата. |
Периоды, свежесть и смысл показателей
Продажи и денежные показатели
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 не доказана. Полнота рынка и обновление в реальном времени не гарантируются.
| Код | Значение |
|---|---|
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 | Причина | Действие |
|---|---|---|
| 400 | query_token_deprecated | Перенесите ключ из URL в X-API-Token. |
| 401/403 | Авторизация или доступ | Проверьте ключ нужного направления, подписку и тариф в кабинете. |
| 413 | request_too_large | Сократите JSON до 1 MiB. |
| 422 | invalid_request | Проверьте типы, XOR, даты, фильтры и неизвестные поля. |
| 404 | not_found | Товар не найден; неполный/пустой списковый результат может быть успешным. |
| 429 | parser_overloaded либо общая квота BHAPI | При parser_overloaded дождитесь Retry-After: целое 1–3600 секунд. Это не исчерпание квоты BHAPI; Cache-Control: no-store. |
| 429 | request_in_progress | С этим ключом уже выполняется запрос. Для ключей с дневным или общим лимитом отправляйте запросы последовательно; Retry-After: 1, Cache-Control: no-store. Локальный отказ не вызывает парсер и не расходует успешную квоту. |
| 502 | upstream_invalid_response | Некорректный результат не выдаётся как пустой успех; сохраните request_id для поддержки. |
| 503 | upstream_unreachable / upstream_unavailable / parser_internal_error | Сервис временно недоступен; проверьте состояние направления. |
| 504 | upstream_timeout | Исход внешней обработки неизвестен; проверьте результат до нового запроса. |
| 500 | internal_error | Внутренний сбой; обратитесь в поддержку с request_id. |
Для всех методов действует общий ограничитель: не чаще одного запроса в секунду; не более двух активных/ожидающих вызовов, ожидание допуска — до 5 секунд. Отправляйте запросы последовательно. BHAPI не повторяет вызовы автоматически и не выполняет скрытую пагинацию. Каждый повтор — новый вызов.
Локальный отказ и ошибка результата не расходуют успешную квоту BHAPI. Проверенный пустой успех расходует одну единицу. Отмена до решения об успехе не расходует успешную квоту; после проверки результата и фиксации успешного исхода потеря соединения не отменяет списание. При сбое БД восстановление слота требует подтверждённого завершения обработки; не считайте доставку ответа единственной границей учёта.
Клиентский timeout рекомендуем 120 секунд. После timeout внешний исход может быть неизвестен; не запускайте автоматический повтор без проверки. Тарифы направления задаются отдельно; бесплатный доступ и лимиты доступны только при соответствующем активном тарифе.
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между методами.