Public API

Программный доступ к рассчитанным данным MetricLab — статистике ваших кабинетов Wildberries, Ozon и Яндекс Маркет (заказы, выкупы, реклама, прибыль и др.) — и к ручным формам кабинета (планы, себестоимость, расходы, налоги и т.д.) на чтение и запись. Подходит для интеграции с BI, скриптов, собственных дашбордов и ИИ-ассистентов.

Base URLhttps://web.metriclab.ru
ФорматJSON request, JSON response (UTF-8)
Версияv1 — обратная совместимость до объявления sunset
Маркетплейсыwb (Wildberries), ozon (Ozon), yandex (Яндекс Маркет)
АвторизацияBearer API-key в заголовке Authorization
bash
# Пример минимального запроса
curl https://web.metriclab.ru/v1/wb/metrics \
  -H "Authorization: Bearer ml_live_xxxxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{
    "cabinets": [],
    "date_from": "2026-05-01",
    "date_to":   "2026-05-31",
    "metrics":   ["orders_amount"]
  }'
🤖 для нейросети Пишете интеграцию с помощью ИИ? Просто дайте ChatGPT, Claude или Cursor ссылку на эту страницу — нейросеть сама учтёт правила ниже и сгенерирует корректный запрос. Человеку разворачивать и читать это не нужно.
Показать правила, которые прочитает нейросеть
  • База. Методы — POST https://web.metriclab.ru/v1/{wb|ozon|yandex}/{metrics|advertising|unit-fact|stocks|supplies|costs|costs-update} и ручные формы /v1/{marketplace}/forms/{form} (+ /update); GET — /v1/cabinets, /v1/{marketplace}/forms и каталоги /v1/{marketplace}/{metrics|advertising|unit-fact}-catalog. У Яндекс Маркета нет stocks и supplies. JSON in/out, UTF-8. Заголовок Authorization: Bearer ml_live_... в каждом запросе.
  • Порядок. Сначала GET /v1/cabinets → возьмите cabinet_id и подставьте в поле cabinets остальных методов.
  • Какой метод выбрать. Динамика по дням, воронка, заказы, продажи, остатки, цены, план-факт, прогноз, сравнение периодов → /metrics. Рекламные кампании → /advertising. Полная экономика каждого товара за период одной таблицей (реализация, все услуги площадки, себестоимость, налог, НДС, к перечислению, прибыль, маржинальность, ABC — как лист «Unit-факт» на сайте) → /unit-fact, разреза по дням в нём нет. Где лежит товар по складам и стоимость остатка → /stocks. Сколько везти и куда (расчёт, не сырьё) → /supplies. Себестоимость прочитать или записать → /costs, /costs-update. Ручные формы (группы товаров, планы, заметки, самовыкупы, раздачи, операционные расходы, налоги) → сначала GET /v1/{marketplace}/forms — там точный контракт каждой формы, потом /forms/{form} и /forms/{form}/update.
  • Товар у площадок называется по-разному: WB — article = nmID (число); Ozon — sku и/или article (артикул продавца, offer_id); Яндекс Маркет — article (артикул продавца, строка). В формах сервер сам переводит sku↔article в то, чем форма хранит товар.
  • Ручные формы — один кабинет на запрос. Запись проверяется целиком: при любой ошибке ничего не записывается, в ответе — все ошибки сразу. Незнакомое поле — ошибка, а не тихий пропуск. append у форм-списков не идемпотентен — не повторяйте его вслепую после таймаута.
  • В каждом успешном ответе есть docs — ссылка на раздел этой страницы по вызванному методу — и hint с той же подсказкой коротко. Если непонятно, что означает поле или какой метод нужен, — откройте docs.
  • Тело (metrics / advertising). Обязательны cabinets (string[]), date_from, date_to (YYYY-MM-DD, включительно), metrics (string[]). Опц. group_by: date, article (для рекламы ещё campaign).
  • Имена метрик берите ТОЛЬКО из каталога на этой странице — не придумывайте их.
  • Метрики с пометкой computed запрашивать нельзя — API их не возвращает и ответит 400. Это производные (ДРР, CPM, CTR, маржа…); считайте их сами из сырых метрик по формуле рядом с ними в каталоге.
  • Ответ. data.current.totals есть всегда; by_date / by_article / by_article_date — только под соответствующий group_by. data.previous — только если include_previous: true И заданы date_from_previous + date_to_previous (авто-сдвига периода нет).
  • Ключи в by_article / by_campaign — вида "<юрлицо>:<значение>"; режьте по первому :, чтобы получить голый артикул / sku / id кампании.
  • Реклама по кампаниям: group_by: ["campaign"] меняет форму ответа — добавляются data.campaigns (имя/тип/статус) и data.current.by_campaign.
  • Поставки (/supplies) — это РАСЧЁТ потребности, не сырьё. До 5000 строк за запрос (limit по умолчанию и максимум), сортировка по убыванию потребности; постранично через offset, всего — в data.total.
  • Лимиты на ключ: metrics, advertising и unit-fact по 3/мин на метод, supplies, stocks, costs по 5/мин, ручные формы и каталоги по 10/мин, cabinets 10/мин, плюс 60/мин суммарно. При 429 — подождите Retry-After секунд, не опрашивайте в плотном цикле.
  • Ошибки — две формы: валидация/сервер (400/500) → {"status":"error","error":…}; авторизация/доступ/лимиты (401/403/429) → {"success":false,"error":…}. Поле error есть всегда — проверяйте HTTP-код ≠ 200 и читайте error. В форме {"status":"error"} есть ещё docs — ссылка на раздел документации по этому эндпоинту (та же ссылка дописана в конец error).
  • Деньги — в рублях, количества — в штуках. Даты включительно; date_to в будущем обрезается до сегодня.

Получение API-ключа

  1. Войдите в личный кабинет на web.metriclab.ru.
  2. Откройте Меню → Настройки → Для разработчиков → API-ключи.
  3. Введите имя ключа (например, «Production») и нажмите Создать.
  4. Скопируйте plaintext-ключ кнопкой Скопировать.
Plaintext-ключ показывается один раз. Дальше виден только префикс и последние 4 символа (например, ml_live_abcdefgh…WXYZ). Если ключ утерян — отозвите его и создайте новый.

Заголовок авторизации

Каждый запрос (кроме этой страницы) должен содержать:

Authorization: Bearer ml_live_xxxxxxxxxxx

Ограничения по кабинетам

Ключ привязан к пользователю и имеет доступ только к его кабинетам. Запрос с чужим cabinet_id вернёт 403 Forbidden.

http
Authorization: Bearer ml_live_xxxxxxxxxxx

MCP-сервер: подключение к ChatGPT и Claude

Если писать код не нужно — подключите кабинеты Wildberries, Ozon и Яндекс Маркета к чату и спрашивайте словами: «почему в июле вырос ДРР», «что заканчивается на складах», «топ-10 артикулов за прошлый месяц». Ассистент сам возьмёт нужные данные, посчитает ДРР и конверсии и подставит даты.

Подключение

Ключ вручную вводить не нужно: при добавлении подключения откроется страница входа в MetricLab, вы нажмёте «Разрешить», и ассистент получит доступ к вашим кабинетам.

ChatGPT Настройки → Коннекторы → Добавить. Адрес https://web.metriclab.ru/mcp/, аутентификация OAuth. Нажмите «Создать», войдите в MetricLab и разрешите доступ.
Claude Settings → Connectors → Add custom connector. Адрес https://web.metriclab.ru/mcp/, дальше кнопка «Connect»: вход в MetricLab и «Разрешить».
Cursor, Claude Code и другие Если клиент умеет OAuth — тот же адрес, вход откроется в браузере. Если нет — ключ из Настройки → Для разработчиков в заголовке Authorization: Bearer … (пример справа) или прямо в адресе: https://web.metriclab.ru/mcp/k/ваш-ключ/.

Готово. Проверьте вопросом «Какие кабинеты тебе доступны?» — в ответ придёт список ваших магазинов.

Как отключить. После входа через OAuth в «Настройки → Для разработчиков» появляется ключ «MCP: ChatGPT» (или «MCP: Claude»). Отзовите его — и подключение перестанет работать. Ссылка с ключом внутри — это и есть ключ: не пересылайте её и не публикуйте.

Доступны те же данные и те же параметры, что и в REST: статистика, реклама, остатки, поставки, себестоимость, ручные формы, фильтры, разрезы, сравнение периодов. Попросите «выгрузку в CSV» — ассистент вернёт сырые числа для Excel. Ограничения на ключ общие с API.

json
// mcp.json — Cursor / Claude Code
{
  "mcpServers": {
    "metriclab": {
      "url": "https://web.metriclab.ru/mcp/",
      "headers": {
        "Authorization": "Bearer ml_live_xxxxxxxxxxx"
      }
    }
  }
}
bash
# Проверить подключение
curl https://web.metriclab.ru/mcp/ \
  -H "Authorization: Bearer ml_live_xxxxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'

Лимиты запросов и заголовки ответа

Лимит считается сразу по двум правилам: отдельно на каждый метод и суммарно по ключу. Окно — одна минута. Платных тарифов нет — лимиты одинаковые для всех.

ЛимитEndpointЗначение
на метод GET /v1/cabinets 10 req/min
на метод POST /v1/{marketplace}/metrics, /advertising 3 req/min
на метод POST /v1/{wb,ozon}/supplies 5 req/min
на метод POST /v1/{wb,ozon}/stocks 5 req/min
на метод POST /v1/{marketplace}/costs 5 req/min
на метод POST /v1/{marketplace}/costs-update 5 req/min
на метод POST /v1/{marketplace}/unit-fact 3 req/min
на метод POST /v1/{marketplace}/forms/{form} и …/update — на каждую форму и действие отдельно 10 req/min
на метод GET /v1/{marketplace}/forms, GET …-catalog 10 req/min
всего по ключу все методы вместе 60 req/min

Превышение любого из этих лимитов возвращает 429 Too Many Requests. Лимиты на методы считаются отдельно: в одну и ту же минуту можно сделать 3 запроса к /v1/wb/metrics и ещё 3 к /v1/ozon/metrics.

Заголовки в каждом ответе

Есть в каждом ответе (включая 429) — по ним можно следить за темпом и не ловить ошибки. Показывают самый строгий из двух лимитов (на метод или всего по ключу) — тот, где осталось меньше запросов.

ЗаголовокЗначение
X-RateLimit-Limit Максимум запросов в окне для активного (узкого) лимита.
X-RateLimit-Remaining Сколько ещё можно сделать до конца окна. 0 — следующий запрос отдаст 429.
X-RateLimit-Reset Секунд до сброса окна.
Retry-After Только в ответе 429: рекомендуемое время ожидания (секунды) перед повтором.

Реакция на 429

Корректная стратегия — подождать Retry-After секунд и повторить. Не используйте exponential backoff с короткой начальной задержкой: окно фиксированное в одну минуту.

http
# Успешный ответ — оставалось 2 из 3 на этом endpoint
HTTP/1.1 200 OK
X-RateLimit-Limit: 3
X-RateLimit-Remaining: 2
X-RateLimit-Reset: 47

# Превышение лимита на метод
HTTP/1.1 429 Too Many Requests
X-RateLimit-Limit: 3
X-RateLimit-Remaining: 0
X-RateLimit-Reset: 12
Retry-After: 12

{
  "success": false,
  "error": "rate limit exceeded: 3 req/min для этого endpoint, 60 req/min суммарно по ключу"
}

Коды ответов

КодКогдаТело
200Успех {"status":"success", "data":{…}, "meta":{…}}
400Невалидный payload (нет обязательного поля, неверный тип, неизвестная метрика, неверный group_by, незнакомое поле или значение в ручной форме) {"status":"error", "error":"…", "docs":"…"}
401Отсутствует или невалидный API-ключ {"success":false, "error":"invalid or missing API key"}
403Запрошены недоступные кабинеты; для ручных форм — ещё и если вкладка «Ручные формы» закрыта для аккаунта {"success":false, "error":"cabinets not accessible: […]"}
429Превышен rate limit. См. Retry-After. {"success":false, "error":"rate limit exceeded: 3 req/min"}
500Ошибка сервера. Технических деталей в ответе нет — повторите запрос через минуту, если повторяется — напишите в поддержку {"status":"error", "error":"…", "docs":"…"}
502Бэкенд статистики недоступен {"success":false, "error":"upstream unavailable"}
У ошибок две формы обёртки. Ошибки валидации и сервера (400, 500) приходят как {"status":"error", …}; ошибки авторизации, доступа и лимитов (401, 403, 429, 502) — как {"success":false, …}. Текстовое поле error есть в обеих. Надёжный способ обработки: считать ошибкой любой HTTP-код ≠ 200 и читать error, не полагаясь на наличие success или status. В форме {"status":"error", …} есть ещё поле docs — ссылка на раздел документации по вызванному эндпоинту; та же ссылка с рекомендацией свериться с документацией дописана в конец текста error.
json
{
  "success": false,
  "error": "cabinets not accessible: ['00000000']"
}

{
  "status": "error",
  "error": "unknown metrics: ['ordrs']. Please check the request against the API documentation: https://web.metriclab.ru/api-doc/#ep-wb",
  "docs": "https://web.metriclab.ru/api-doc/#ep-wb"
}

GET /v1/cabinets

Возвращает список всех кабинетов (Wildberries, Ozon, Яндекс Маркет), доступных владельцу API-ключа. Удобно для первичной настройки: получить cabinet_id'ы, которые потом передавать в поле cabinets остальных методов.

GET https://web.metriclab.ru/v1/cabinets
Рекомендации и частые ошибки
  • Начните отсюда. Сначала получите список кабинетов, затем подставляйте cabinet_id в поле cabinets остальных методов.
  • cabinet_id — это supplier_id (Wildberries), client_id (Ozon), business_id (Яндекс Маркет). Передавайте строкой, как есть. Вместо id можно прислать имя кабинета (name или yl).
  • Поле yl (юрлицо) ещё пригодится: оно стоит префиксом в ключах by_article и by_campaign в других методах.
  • Список меняется редко — закэшируйте его, не запрашивайте перед каждым вызовом (лимит 10 запросов/мин).
  • В других методах cabinets: [] = все доступные кабинеты. Удобно, но при многих кабинетах ответ большой и медленный — лучше перечислять нужные явно.

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

Параметров нет. Список возвращается для пользователя, к которому привязан API-ключ.

Структура ответа

status
string Всегда "success" при HTTP 200.
cabinets
object[] Массив доступных кабинетов, по одному элементу на каждый.
marketplace
string "wb", "ozon", "yandex".
cabinet_id
string Идентификатор кабинета: Wildberries — supplier_id, Ozon — client_id, Яндекс Маркет — business_id. Передавайте именно его в cabinets остальных методов.
yl
string Юрлицо (внутреннее имя в MetricLab). Используется как префикс article_key в ответах /v1/{marketplace}/{metrics,advertising} при group_by: ["article"]. Пустая строка если бэкенд статистики временно недоступен.
inn
string ИНН организации. Пустая строка если не задан.
name
string Человеко-читаемое имя кабинета.
total
number Количество элементов в cabinets.

Пример запроса

curl https://web.metriclab.ru/v1/cabinets \
  -H "Authorization: Bearer ml_live_xxxxxxxxxxx"
import requests

KEY  = "ml_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
HOST = "https://web.metriclab.ru"

resp = requests.get(
    f"{HOST}/v1/cabinets",
    headers={"Authorization": f"Bearer {KEY}"},
    timeout=30,
)
resp.raise_for_status()
for c in resp.json()["cabinets"]:
    print(c["marketplace"], c["cabinet_id"], c["yl"], c["inn"])
const KEY  = "ml_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
const HOST = "https://web.metriclab.ru";

const r = await fetch(`${HOST}/v1/cabinets`, {
  headers: { "Authorization": `Bearer ${KEY}` },
});
if (!r.ok) throw new Error(`HTTP ${r.status}`);
const { cabinets } = await r.json();
console.log(cabinets);

Пример ответа · 200 OK

json
{
  "status": "success",
  "cabinets": [
    {
      "marketplace": "wb",
      "cabinet_id":  "12345",
      "yl":          "LEGO-w484",
      "inn":         "1234567890",
      "name":        "LEGO"
    },
    {
      "marketplace": "ozon",
      "cabinet_id":  "67890",
      "yl":          "Sokolov-3870",
      "inn":         "0987654321",
      "name":        "SOKOLOV"
    },
    {
      "marketplace": "yandex",
      "cabinet_id":  "11223344",
      "yl":          "Sokolov-y512",
      "inn":         "0987654321",
      "name":        "SOKOLOV Маркет"
    }
  ],
  "total": 3
}

POST /v1/wb/metrics

Возвращает статистику Wildberries за период с опциональной группировкой по датам и/или артикулам.

POST https://web.metriclab.ru/v1/wb/metrics
Рекомендации и частые ошибки
  • Метрики с пометкой computed в ответе НЕ приходят. Это производные (ДРР, маржа и т.п.). Запросите сырые метрики из их формулы и посчитайте сами; если передать computed-метрику в metrics — будет ошибка 400.
  • Запрашивайте только нужные метрики и разрезы — меньше данных, быстрее ответ. group_by: [] (только итоги) — самый быстрый вариант.
  • Разрезы перемножаются: ["article","date"] на большом ассортименте за длинный период даёт очень большой ответ. Выбирайте разрез осознанно.
  • Ключ в by_article — "юрлицо:артикул". Чтобы получить голый артикул, отрежьте часть до первого :.
  • Даты — YYYY-MM-DD, включительно. date_to в будущем обрезается до сегодня.
  • Все data-метрики аддитивны (складываются по любому разрезу). Деньги — в рублях, количества — в штуках.
  • Сравнение с прошлым периодом: include_previous: true плюс явные date_from_previous/date_to_previous (авто-сдвига периода нет).
  • Лимиты: 3 запроса/мин на метод и 60/мин суммарно по ключу. Не опрашивайте в плотном цикле; при 429 подождите Retry-After секунд и повторите.

Тело запроса

cabinets required
string[] Массив supplier_id кабинетов. Вместо идентификатора можно указать название кабинета — то, что отдаёт GET /v1/cabinets в поле name (регистр не важен). Кабинет должен принадлежать владельцу API-ключа (получите доступные через GET /v1/cabinets). Пустой массив [] — взять все доступные пользователю.
date_from required
string Начало периода, формат YYYY-MM-DD. Включительно.
date_to required
string Конец периода, YYYY-MM-DD. Включительно.
metrics required
string[] Названия метрик из каталога ниже. Берите те, что без пометки computed — метрики с такой пометкой API не считает, их вы получаете сами по формуле (она указана рядом в каталоге).
group_by
string[] Разрезы ответа. Допустимые значения: "date", "article". По умолчанию [] — только итоги (totals). Можно комбинировать.
include_previous
boolean Если true — в ответе появится data.previous для сравнения с прошлым периодом. Сам период задайте полями date_from_previous и date_to_previous. По умолчанию false.
date_from_previous
string Начало периода для сравнения, YYYY-MM-DD. Нужно вместе с include_previous: true.
date_to_previous
string Конец периода для сравнения, YYYY-MM-DD.
filters
object Дополнительные фильтры на товары. Все вложенные поля — массивы строк, пустой массив = без ограничения.
articles
string[] Артикулы WB (nm_id) в виде строк.
brands
string[] Имена брендов.
subjects
string[] Имена предметов/категорий.
article_suppliers
string[] Артикулы поставщика — внутренние коды клиента в карточках товаров.
grouping_level_1
string[] Имена группировки уровня 1 (создаются в MetricLab вручную).
grouping_level_2
string[] Имена группировки уровня 2.
grouping_level_3
string[] Имена группировки уровня 3.
group_name
string[] Имена групп товаров.
responsible
string[] Имена ответственных за товары.

Структура ответа

status
string Всегда "success" при HTTP 200. При ошибке — "error" и поле error.
data
object Контейнер со срезами статистики: current (всегда) и опционально previous.
current
object Данные за основной период (date_from … date_to).
totals
{metric: number} Всегда присутствует. Итоги по всем запрошенным метрикам за период.
by_date
{date: {metric: number}} Появляется, если в group_by есть "date". Ключ — дата YYYY-MM-DD.
by_article
{article_key: {metric: number}} Появляется, если в group_by есть "article". Ключ строки — "кабинет:артикул". Кабинет в начале — чтобы одинаковые артикулы из разных кабинетов не склеились; название кабинета то же, что в GET /v1/cabinets.
by_article_date
{article_key: {date: {metric: number}}} Появляется, если в group_by есть и "date", и "article". Разрез артикул × дата.
previous
object Появляется только при include_previous: true. Структура идентична current — те же totals / by_date / by_article / by_article_date за предыдущий период.
meta
object Служебная информация о запросе: что спросили и сколько кабинетов/юрлиц вошло в ответ.
marketplace
string "wb".
dataset
string "metrics".
cabinets
number Сколько кабинетов вошло в запрос (только доступные вам).
yls
number Сколько юрлиц затронул запрос. Одно юрлицо может объединять несколько кабинетов.
metrics
string[] Метрики, которые вы запросили.
group_by
string[] Разрезы, которые вы указали в запросе.
include_previous
boolean Значение из запроса.

Каталог метрик · Wildberries

В поле metrics передаются key метрик. Группировка и порядок — как в виджете RNP внутри MetricLab. Метрики с тегом computed в ответе API не возвращаются — это производные показатели; запросите сырые компоненты из формулы и посчитайте на стороне клиента. Метрики с тегом план — это ваши же планы из формы «Планы»: план среза равен сумме дневных планов внутри него, а рядом с тегом стоит ключ метрики факта, к которой план относится.

Воронка · 26 метрик

Метрики воронки продаж: показы, клики, корзина, заказы, продажи

wb_rnp_notes Заметки text
card_views Показы карточки number
card_clicks Переходы в карточку number
add_to_basket Добавления в корзину number
add_to_wishlist Добавления в отложенные number
orders_amount Заказы, шт. number
orders_sum Заказы, руб. money
sales_amount Продажи, шт. number
sales_sum Продажи, руб. money
buyout_sales_45d Выкупы за 45д (скольз.) number
buyout_orders_45d Заказы за 45д (скольз.) number
wb_card_views_14d Показы за 14д (скольз.) number
wb_card_clicks_14d Клики за 14д (скольз.) number
wb_add_to_basket_14d Корзина за 14д (скольз.) number
wb_orders_amount_14d Заказы за 14д (скольз.) number
wb_ctr Конверсия в клик, %computed wb_ctr = card_clicks / card_views * 100 percent
wb_ctr_14d Конверсия в клик за 14 дней, %computed wb_ctr_14d = wb_card_clicks_14d / wb_card_views_14d * 100 percent
wb_conversion_to_basket Конверсия в корзину, %computed wb_conversion_to_basket = add_to_basket / card_clicks * 100 percent
wb_conversion_to_basket_14d Конверсия в корзину за 14 дней, %computed wb_conversion_to_basket_14d = wb_add_to_basket_14d / wb_card_clicks_14d * 100 percent
wb_conversion_to_order Конверсия в заказ, %computed wb_conversion_to_order = orders_amount / add_to_basket * 100 percent
wb_conversion_to_order_14d Конверсия в заказ за 14 дней, %computed wb_conversion_to_order_14d = wb_orders_amount_14d / wb_add_to_basket_14d * 100 percent
wb_conversion_click_to_order Конверсия из клика в заказ, %computed wb_conversion_click_to_order = orders_amount / card_clicks * 100 percent
wb_conversion_click_to_order_14d Конверсия из клика в заказ за 14 дней, %computed wb_conversion_click_to_order_14d = wb_orders_amount_14d / wb_card_clicks_14d * 100 percent
wb_avg_price_order Средний чек заказа, рубcomputed wb_avg_price_order = orders_sum / orders_amount money
wb_avg_price_sale Средний чек продажи, рубcomputed wb_avg_price_sale = sales_sum / sales_amount money
wb_buyout_rate_45d Процент выкупа, %computed wb_buyout_rate_45d = buyout_sales_45d / buyout_orders_45d * 100 percent
Воронка - органика · 5 метрик

Органическая воронка: показатели всего за вычетом рекламных (РК)

card_views_org Показы орг., штcomputed card_views_org = card_views - card_views_adv number
card_clicks_org Клики орг., штcomputed card_clicks_org = card_clicks - card_clicks_adv number
add_to_basket_org Корзина орг., штcomputed add_to_basket_org = add_to_basket - add_to_basket_adv number
orders_amount_org Заказы орг., штcomputed orders_amount_org = orders_amount - orders_amount_adv number
orders_sum_org Заказы орг., рубcomputed orders_sum_org = orders_sum - orders_sum_adv money
Реклама · 47 метрик

Метрики рекламы: расходы, ДРР, заказы по РК

adv_sum Расходы РК (все) money
adv_sum_money Расходы РК (деньги) money
adv_sum_bonus Расходы РК (Бонусы и кэшбэк) money
adv_sum_cpm_unified Расходы ОЗП (CPM, Единая) money
adv_sum_cpm_manual Расходы ОЗП (CPM, Ручная) money
adv_sum_cpc Расходы ОЗК (CPC) money
orders_sum_adv Заказы по РК, руб. money
card_views_adv Показы РК, шт number
wb_card_views_adv_cpm_unified Показы ОЗП (CPM, Единая), шт number
wb_card_views_adv_cpm_manual Показы ОЗП (CPM, Ручная), шт number
wb_card_views_adv_cpc Показы ОЗК (CPC), шт number
card_clicks_adv Клики РК, шт number
wb_card_clicks_adv_cpm_unified Клики ОЗП (CPM, Единая), шт number
wb_card_clicks_adv_cpm_manual Клики ОЗП (CPM, Ручная), шт number
wb_card_clicks_adv_cpc Клики ОЗК (CPC), шт number
add_to_basket_adv Корзина РК, шт number
orders_amount_adv Заказы РК, шт number
wb_orders_amount_adv_cpm_unified Заказы ОЗП (CPM, Единая), шт number
wb_orders_amount_adv_cpm_manual Заказы ОЗП (CPM, Ручная), шт number
wb_orders_amount_adv_cpc Заказы ОЗК (CPC), шт number
wb_drr_of_all_orders ДРР от всех заказов (все), %computed wb_drr_of_all_orders = adv_sum / orders_sum * 100 percent
wb_drr_of_all_orders_money ДРР от всех заказов (деньги), %computed wb_drr_of_all_orders_money = adv_sum_money / orders_sum * 100 percent
wb_drr_of_all_orders_bonus ДРР от всех заказов (Бонусы и кэшбэк), %computed wb_drr_of_all_orders_bonus = adv_sum_bonus / orders_sum * 100 percent
wb_drr_of_all_orders_cpm_unified ДРР от всех заказов (Единая), %computed wb_drr_of_all_orders_cpm_unified = adv_sum_cpm_unified / orders_sum * 100 percent
wb_drr_of_all_orders_cpm_manual ДРР от всех заказов (Ручная), %computed wb_drr_of_all_orders_cpm_manual = adv_sum_cpm_manual / orders_sum * 100 percent
wb_drr_of_all_orders_cpc ДРР от всех заказов (CPC), %computed wb_drr_of_all_orders_cpc = adv_sum_cpc / orders_sum * 100 percent
wb_drr_of_adv_orders ДРР от заказов РК (все), %computed wb_drr_of_adv_orders = adv_sum / orders_sum_adv * 100 percent
wb_drr_of_adv_orders_money ДРР от заказов РК (деньги), %computed wb_drr_of_adv_orders_money = adv_sum_money / orders_sum_adv * 100 percent
wb_drr_of_adv_orders_bonus ДРР от заказов РК (Бонусы и кэшбэк), %computed wb_drr_of_adv_orders_bonus = adv_sum_bonus / orders_sum_adv * 100 percent
wb_ctr_adv CTR РК, %computed wb_ctr_adv = card_clicks_adv / card_views_adv * 100 percent
wb_ctr_adv_cpm_unified CTR ОЗП (CPM, Единая), %computed wb_ctr_adv_cpm_unified = wb_card_clicks_adv_cpm_unified / wb_card_views_adv_cpm_unified * 100 percent
wb_ctr_adv_cpm_manual CTR ОЗП (CPM, Ручная), %computed wb_ctr_adv_cpm_manual = wb_card_clicks_adv_cpm_manual / wb_card_views_adv_cpm_manual * 100 percent
wb_ctr_adv_cpc CTR ОЗК (CPC), %computed wb_ctr_adv_cpc = wb_card_clicks_adv_cpc / wb_card_views_adv_cpc * 100 percent
wb_drr_of_all_sales ДРР от всех продаж (все), %computed wb_drr_of_all_sales = adv_sum / sales_sum * 100 percent
wb_drr_of_all_sales_money ДРР от всех продаж (деньги), %computed wb_drr_of_all_sales_money = adv_sum_money / sales_sum * 100 percent
wb_drr_of_all_sales_bonus ДРР от всех продаж (Бонусы и кэшбэк), %computed wb_drr_of_all_sales_bonus = adv_sum_bonus / sales_sum * 100 percent
wb_drr_of_all_sales_cpm_unified ДРР от всех продаж (Единая), %computed wb_drr_of_all_sales_cpm_unified = adv_sum_cpm_unified / sales_sum * 100 percent
wb_drr_of_all_sales_cpm_manual ДРР от всех продаж (Ручная), %computed wb_drr_of_all_sales_cpm_manual = adv_sum_cpm_manual / sales_sum * 100 percent
wb_drr_of_all_sales_cpc ДРР от всех продаж (CPC), %computed wb_drr_of_all_sales_cpc = adv_sum_cpc / sales_sum * 100 percent
wb_cost_per_mille Стоимость 1000 показов, рубcomputed wb_cost_per_mille = adv_sum / card_views * 1000 money
wb_cost_per_click Стоимость клика, рубcomputed wb_cost_per_click = adv_sum / card_clicks money
wb_cost_per_cart Стоимость корзины, рубcomputed wb_cost_per_cart = adv_sum / add_to_basket money
wb_cost_per_order Стоимость заказа, рубcomputed wb_cost_per_order = adv_sum / orders_amount money
wb_cost_per_sale Стоимость продажи, рубcomputed wb_cost_per_sale = adv_sum / sales_amount money
wb_adv_views_per_order Показов РК на 1 заказcomputed wb_adv_views_per_order = card_views_adv / orders_amount number
wb_adv_clicks_per_order Кликов РК на 1 заказcomputed wb_adv_clicks_per_order = card_clicks_adv / orders_amount_adv number
wb_adv_carts_per_order Корзин РК на 1 заказcomputed wb_adv_carts_per_order = add_to_basket_adv / orders_amount_adv number
План-факт · 20 метрик

Метрики план-факт: план, % выполнения, прогноз; целевые ДРР и маржинальность — цель и отклонение от неё

wb_rnp_views_plan ПЛАН: Показы, штплан → card_views number
wb_rnp_ads_cost_plan ПЛАН: Расходы на рекламуплан → adv_sum money
wb_rnp_profit_plan ПЛАН: Прибыль, рубплан → wb_nedeli_profit_sum money
wb_rnp_for_pay_plan ПЛАН: Сумма к перечислению, рубплан → wb_nedeli_for_pay money
wb_rnp_clicks_plan ПЛАН: Клики, штплан → card_clicks number
wb_rnp_add_to_cart_plan ПЛАН: Корзина, штплан → add_to_basket number
wb_rnp_orders_count_plan ПЛАН: Заказы, штплан → orders_amount number
wb_rnp_orders_sum_plan ПЛАН: Заказы, рубплан → orders_sum money
wb_rnp_sales_count_plan ПЛАН: Продажи, штплан → sales_amount number
wb_rnp_sales_sum_plan ПЛАН: Продажи, рубплан → sales_sum money
wb_views_plan_pct % ВЫПОЛНЕНИЯ: Показы, штcomputed wb_views_plan_pct = card_views / wb_rnp_views_plan * 100 percent
wb_ads_cost_plan_pct % ВЫПОЛНЕНИЯ: Расходы на рекламуcomputed wb_ads_cost_plan_pct = adv_sum / wb_rnp_ads_cost_plan * 100 percent
wb_profit_plan_pct % ВЫПОЛНЕНИЯ: Прибыль, рубcomputed wb_profit_plan_pct = wb_nedeli_profit_sum / wb_rnp_profit_plan * 100 percent
wb_for_pay_plan_pct % ВЫПОЛНЕНИЯ: Сумма к перечислению, рубcomputed wb_for_pay_plan_pct = wb_nedeli_for_pay / wb_rnp_for_pay_plan * 100 percent
wb_clicks_plan_pct % ВЫПОЛНЕНИЯ: Клики, штcomputed wb_clicks_plan_pct = card_clicks / wb_rnp_clicks_plan * 100 percent
wb_add_to_cart_plan_pct % ВЫПОЛНЕНИЯ: Корзина, штcomputed wb_add_to_cart_plan_pct = add_to_basket / wb_rnp_add_to_cart_plan * 100 percent
wb_orders_count_plan_pct % ВЫПОЛНЕНИЯ: Заказы, штcomputed wb_orders_count_plan_pct = orders_amount / wb_rnp_orders_count_plan * 100 percent
wb_orders_sum_plan_pct % ВЫПОЛНЕНИЯ: Заказы, рубcomputed wb_orders_sum_plan_pct = orders_sum / wb_rnp_orders_sum_plan * 100 percent
wb_sales_count_plan_pct % ВЫПОЛНЕНИЯ: Продажи, штcomputed wb_sales_count_plan_pct = sales_amount / wb_rnp_sales_count_plan * 100 percent
wb_sales_sum_plan_pct % ВЫПОЛНЕНИЯ: Продажи, рубcomputed wb_sales_sum_plan_pct = sales_sum / wb_rnp_sales_sum_plan * 100 percent
Прибыль · 32 метрик

Метрики прибыли и маржинальности

wb_nedeli_sum_before_spp_realized До СПП: сумма реализации money
wb_nedeli_sum_after_spp_realized После СПП: сумма реализации money
wb_nedeli_direct_cost_sebes_sum Себестоимость реализованного товара money
wb_nedeli_wb_commission_before_spp_sum Комиссия от реализации до СПП money
wb_nedeli_wb_acquiring_sum Эквайринг money
wb_nedeli_wb_logistics_sum Логистика money
wb_nedeli_wb_storage_sum Хранение money
wb_nedeli_wb_adv_balance_sum Начисления за рекламу (баланс продавца) money
wb_nedeli_wb_adv_account_sum Начисления за рекламу (счёт продавца) money
wb_nedeli_wb_reviews_bonuses_sum Баллы за отзывы money
wb_nedeli_wb_loyalty_bonuses_sum Удержания за баллы лояльности money
wb_nedeli_wb_jam_subscription_sum Подписка Джем money
wb_nedeli_wb_transit_cost_sum Транзитные поставки money
wb_nedeli_wb_paid_acceptance_sum Платная приёмка money
wb_nedeli_wb_penalties_sum Штрафы money
wb_nedeli_wb_additional_payments_sum Доплаты money
wb_nedeli_direct_cost_nalog_sum Налог money
wb_nedeli_direct_cost_out_nalog_sum НДС (исходящий) money
wb_nedeli_direct_cost_in_nalog_sum НДС (входящий) money
wb_nedeli_direct_cost_self_sales_sum Затраты на самовыкупы money
wb_nedeli_direct_cost_self_sales_sebes_sum Себестоимость самовыкупленного товара money
wb_nedeli_direct_cost_distribution_sum Затраты на раздачи money
wb_nedeli_direct_cost_external_marketing_sum Внешний маркетинг money
wb_nedeli_wb_imizr_sum Штраф ИМИЗР money
wb_nedeli_wb_other_deductions_sum Прочие удержания money
wb_nedeli_for_pay Сумма к перечислениюcomputed wb_nedeli_for_pay = wb_nedeli_sum_before_spp_realized + (wb_nedeli_wb_commission_before_spp_sum + wb_nedeli_wb_acquiring_sum + wb_nedeli_wb_logistics_sum + wb_nedeli_wb_storage_sum + (wb_nedeli_wb_adv_balance_sum + wb_nedeli_wb_adv_account_sum) + wb_nedeli_wb_reviews_bonuses_sum + wb_nedeli_wb_loyalty_bonuses_sum + wb_nedeli_wb_jam_subscription_sum + wb_nedeli_wb_transit_cost_sum + wb_nedeli_wb_paid_acceptance_sum + wb_nedeli_wb_penalties_sum + wb_nedeli_wb_additional_payments_sum + wb_nedeli_wb_imizr_sum + wb_nedeli_wb_other_deductions_sum) - wb_nedeli_wb_adv_account_sum money
wb_nedeli_for_pay_share Доля суммы к перечислению к сумме реализацииcomputed wb_nedeli_for_pay_share = wb_nedeli_for_pay / wb_nedeli_sum_before_spp_realized * 100 percent
wb_nedeli_percent_sebes % себестоимости от реализации до СППcomputed wb_nedeli_percent_sebes = -wb_nedeli_direct_cost_sebes_sum / wb_nedeli_sum_before_spp_realized * 100 percent
wb_nedeli_profit_sum Маржинальная прибыльcomputed wb_nedeli_profit_sum = wb_nedeli_sum_before_spp_realized + (wb_nedeli_wb_commission_before_spp_sum + wb_nedeli_wb_acquiring_sum + wb_nedeli_wb_logistics_sum + wb_nedeli_wb_storage_sum + (wb_nedeli_wb_adv_balance_sum + wb_nedeli_wb_adv_account_sum) + wb_nedeli_wb_reviews_bonuses_sum + wb_nedeli_wb_loyalty_bonuses_sum + wb_nedeli_wb_jam_subscription_sum + wb_nedeli_wb_transit_cost_sum + wb_nedeli_wb_paid_acceptance_sum + wb_nedeli_wb_penalties_sum + wb_nedeli_wb_additional_payments_sum + wb_nedeli_wb_imizr_sum + wb_nedeli_wb_other_deductions_sum) + wb_nedeli_direct_cost_sebes_sum + wb_nedeli_direct_cost_nalog_sum + (wb_nedeli_direct_cost_out_nalog_sum + wb_nedeli_direct_cost_in_nalog_sum) + wb_nedeli_direct_cost_self_sales_sum - wb_nedeli_direct_cost_self_sales_sebes_sum + wb_nedeli_direct_cost_distribution_sum + wb_nedeli_direct_cost_external_marketing_sum money
wb_nedeli_percent_profit_before_spp % прибыли от реализации до СПП (маржинальность)computed wb_nedeli_percent_profit_before_spp = wb_nedeli_profit_sum / wb_nedeli_sum_before_spp_realized * 100 percent
wb_nedeli_percent_profit_after_spp % прибыли от реализации после СПП (маржинальность)computed wb_nedeli_percent_profit_after_spp = wb_nedeli_profit_sum / wb_nedeli_sum_after_spp_realized * 100 percent
wb_nedeli_percent_profitability % прибыли от себестоимости (рентабельность)computed wb_nedeli_percent_profitability = wb_nedeli_profit_sum / -wb_nedeli_direct_cost_sebes_sum * 100 percent
Остатки · 8 метрик

Метрики остатков и запасов

stocks_amount Остаток FBO, шт number
stocks_amount_fbs Остаток FBS, шт number
stocks_amount_total Остаток (FBO+FBS), шт number
stocks_in_transit Товары в пути, шт. number
wb_orders_amount_7d Заказы за 7д (скольз.) number
wb_stock_days_fbo Запас FBO, днейcomputed wb_stock_days_fbo = stocks_amount / (wb_orders_amount_7d / 7) number
wb_stock_days_fbs Запас FBS, днейcomputed wb_stock_days_fbs = stocks_amount_fbs / (wb_orders_amount_7d / 7) number
wb_stock_days_total Запас (FBO+FBS), днейcomputed wb_stock_days_total = stocks_amount_total / (wb_orders_amount_7d / 7) number
Цены и СПП · 4 метрик

Метрики цен и СПП

price_before_spp Цена до СПП, руб money
price_after_spp Цена с СПП, руб money
spp_percent СПП, % percent
spp_rub СПП, рубcomputed spp_rub = price_before_spp * spp_percent / 100 money
Прогноз · 43 метрик

Прогнозные метрики на основе заказов

forecast_orders_sum ПРОГНОЗ: Заказы, руб money
forecast_realization ПРОГНОЗ: Реализация, руб money
forecast_all_services ПРОГНОЗ: Все услуги, руб money
forecast_wb_commission ПРОГНОЗ: Комиссия ВБ, руб money
forecast_logistics ПРОГНОЗ: Прямая логистика, руб money
forecast_reverse_logistics ПРОГНОЗ: Обр. логистика, руб money
forecast_ads ПРОГНОЗ: Реклама, руб money
forecast_storage ПРОГНОЗ: Хранение, руб money
paid_storage_daily Хранение, руб money
forecast_acquiring ПРОГНОЗ: Эквайринг, руб money
forecast_tax ПРОГНОЗ: Налог, руб money
forecast_outgoing_vat ПРОГНОЗ: Исходящий НДС, руб money
forecast_incoming_vat ПРОГНОЗ: Входящий НДС, руб money
forecast_cost_price ПРОГНОЗ: Себестоимость, руб money
forecast_profit ПРОГНОЗ: Прибыль, руб money
forecast_profit_custom ПРОГНОЗ: Прибыль, руб (ИУ) money
forecast_realization_custom ПРОГНОЗ: Реализация, руб (ИУ) money
forecast_orders_sum_custom ПРОГНОЗ: Заказы, руб (ИУ) money
forecast_wb_commission_custom ПРОГНОЗ: Комиссия ВБ, руб (ИУ) money
forecast_ads_custom ПРОГНОЗ: Реклама, руб (ИУ) money
forecast_fulfillment_custom ПРОГНОЗ: Фулфилмент, руб (ИУ) money
forecast_cost_price_custom ПРОГНОЗ: Себестоимость, руб (ИУ) money
forecast_nds_custom ПРОГНОЗ: НДС, руб (ИУ) money
forecast_tax_custom ПРОГНОЗ: Налог, руб (ИУ) money
wb_fp_all_services_pct ПРОГНОЗ: % всех услугcomputed wb_fp_all_services_pct = forecast_all_services / forecast_realization * 100 percent
wb_fp_commission_pct ПРОГНОЗ: % комиссии ВБcomputed wb_fp_commission_pct = forecast_wb_commission / forecast_realization * 100 percent
wb_fp_logistics_pct ПРОГНОЗ: % прямой логистикиcomputed wb_fp_logistics_pct = forecast_logistics / forecast_realization * 100 percent
wb_fp_reverse_logistics_pct ПРОГНОЗ: % обр. логистикиcomputed wb_fp_reverse_logistics_pct = forecast_reverse_logistics / forecast_realization * 100 percent
wb_fp_logistics_total ПРОГНОЗ: Логистика, рубcomputed wb_fp_logistics_total = forecast_logistics + forecast_reverse_logistics money
wb_fp_logistics_total_pct ПРОГНОЗ: % логистикиcomputed wb_fp_logistics_total_pct = wb_fp_logistics_total / forecast_realization * 100 percent
wb_fp_ads_pct ПРОГНОЗ: % рекламыcomputed wb_fp_ads_pct = forecast_ads / forecast_realization * 100 percent
wb_fp_storage_pct ПРОГНОЗ: % храненияcomputed wb_fp_storage_pct = forecast_storage / forecast_realization * 100 percent
wb_fp_acquiring_pct ПРОГНОЗ: % эквайрингаcomputed wb_fp_acquiring_pct = forecast_acquiring / forecast_realization * 100 percent
wb_fp_tax_pct ПРОГНОЗ: % налогаcomputed wb_fp_tax_pct = forecast_tax / forecast_realization * 100 percent
wb_fp_outgoing_vat_pct ПРОГНОЗ: % исходящего НДСcomputed wb_fp_outgoing_vat_pct = forecast_outgoing_vat / forecast_realization * 100 percent
wb_fp_incoming_vat_pct ПРОГНОЗ: % входящего НДСcomputed wb_fp_incoming_vat_pct = forecast_incoming_vat / forecast_realization * 100 percent
wb_fp_cost_price_pct ПРОГНОЗ: % себестоимостиcomputed wb_fp_cost_price_pct = forecast_cost_price / forecast_realization * 100 percent
wb_fp_margin_pct ПРОГНОЗ: Маржинальность, %computed wb_fp_margin_pct = forecast_profit / forecast_realization * 100 percent
wb_fp_profitability_pct ПРОГНОЗ: Рентабельность, %computed wb_fp_profitability_pct = forecast_profit / forecast_cost_price * 100 percent
wb_fp_markup ПРОГНОЗ: Наценка, коэффcomputed wb_fp_markup = forecast_realization / forecast_cost_price number
wb_fp_buyout_rate ПРОГНОЗ: Выкуп, %computed wb_fp_buyout_rate = buyout_sales_45d / buyout_orders_45d * 100 percent
wb_fp_margin_custom ПРОГНОЗ: Маржинальность, % (ИУ)computed wb_fp_margin_custom = forecast_profit_custom / forecast_realization_custom * 100 percent
wb_fp_buyout_rate_custom ПРОГНОЗ: Выкуп, % (ИУ)computed wb_fp_buyout_rate_custom = buyout_sales_45d / buyout_orders_45d * 100 percent

Пример запроса

curl https://web.metriclab.ru/v1/wb/metrics \
  -H "Authorization: Bearer ml_live_xxxxxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{
    "cabinets":  ["12345"],
    "date_from": "2026-05-01",
    "date_to":   "2026-05-31",
    "metrics":   ["orders_amount", "orders_sum", "card_clicks"],
    "group_by":  ["date"]
  }'
import requests

KEY  = "ml_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
HOST = "https://web.metriclab.ru"

resp = requests.post(
    f"{HOST}/v1/wb/metrics",
    headers={"Authorization": f"Bearer {KEY}"},
    json={
        "cabinets":  ["12345"],
        "date_from": "2026-05-01",
        "date_to":   "2026-05-31",
        "metrics":   ["orders_amount", "orders_sum", "card_clicks"],
        "group_by":  ["date"],
    },
    timeout=120,
)
resp.raise_for_status()
data = resp.json()
print(data["data"]["current"]["totals"])
const KEY  = "ml_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
const HOST = "https://web.metriclab.ru";

const r = await fetch(`${HOST}/v1/wb/metrics`, {
  method: "POST",
  headers: {
    "Authorization": `Bearer ${KEY}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    cabinets:  ["12345"],
    date_from: "2026-05-01",
    date_to:   "2026-05-31",
    metrics:   ["orders_amount", "orders_sum", "card_clicks"],
    group_by:  ["date"],
  }),
});
if (!r.ok) throw new Error(`HTTP ${r.status}`);
const { data, meta } = await r.json();
console.log(data.current.totals);

Пример ответа · 200 OK

json
{
  "status": "success",
  "data": {
    "current": {
      "totals": {
        "orders_amount": 1234,
        "orders_sum":    567890.12,
        "card_clicks":   18540
      },
      "by_date": {
        "2026-05-01": {
          "orders_amount": 42,
          "card_clicks":   380
        }
        /* ... */
      }
    }
  },
  "meta": {
    "marketplace":      "wb",
    "dataset":          "metrics",
    "cabinets":         1,
    "yls":              1,
    "metrics":          ["orders_amount", "orders_sum", "card_clicks"],
    "group_by":         ["date"],
    "include_previous": false
  }
}

POST /v1/ozon/metrics

Возвращает статистику Ozon за период с опциональной группировкой по датам и/или артикулам.

POST https://web.metriclab.ru/v1/ozon/metrics
Рекомендации и частые ошибки
  • Метрики с пометкой computed в ответе НЕ приходят. Это производные (ДРР, маржа и т.п.). Запросите сырые метрики из их формулы и посчитайте сами; если передать computed-метрику в metrics — будет ошибка 400.
  • Запрашивайте только нужные метрики и разрезы — меньше данных, быстрее ответ. group_by: [] (только итоги) — самый быстрый вариант.
  • Разрезы перемножаются: ["article","date"] на большом ассортименте за длинный период даёт очень большой ответ. Выбирайте разрез осознанно.
  • Ключ в by_article — "юрлицо:артикул". Чтобы получить голый артикул, отрежьте часть до первого :.
  • Даты — YYYY-MM-DD, включительно. date_to в будущем обрезается до сегодня.
  • Все data-метрики аддитивны (складываются по любому разрезу). Деньги — в рублях, количества — в штуках.
  • Сравнение с прошлым периодом: include_previous: true плюс явные date_from_previous/date_to_previous (авто-сдвига периода нет).
  • Лимиты: 3 запроса/мин на метод и 60/мин суммарно по ключу. Не опрашивайте в плотном цикле; при 429 подождите Retry-After секунд и повторите.

Тело запроса

cabinets required
string[] Массив client_id кабинетов. Вместо идентификатора можно указать название кабинета — то, что отдаёт GET /v1/cabinets в поле name (регистр не важен). Кабинет должен принадлежать владельцу API-ключа (получите доступные через GET /v1/cabinets). Пустой массив [] — взять все доступные пользователю.
date_from required
string Начало периода, формат YYYY-MM-DD. Включительно.
date_to required
string Конец периода, YYYY-MM-DD. Включительно.
metrics required
string[] Названия метрик из каталога ниже. Берите те, что без пометки computed — метрики с такой пометкой API не считает, их вы получаете сами по формуле (она указана рядом в каталоге).
group_by
string[] Разрезы ответа. Допустимые значения: "date", "article". По умолчанию [] — только итоги (totals). Можно комбинировать.
include_previous
boolean Если true — в ответе появится data.previous для сравнения с прошлым периодом. Сам период задайте полями date_from_previous и date_to_previous. По умолчанию false.
date_from_previous
string Начало периода для сравнения, YYYY-MM-DD. Нужно вместе с include_previous: true.
date_to_previous
string Конец периода для сравнения, YYYY-MM-DD.
filters
object Дополнительные фильтры на товары. Все вложенные поля — массивы строк, пустой массив = без ограничения.
skus
string[] SKU Ozon в виде строк.
brands
string[] Имена брендов.
subjects
string[] Имена предметов/категорий.
article_suppliers
string[] Артикулы поставщика — внутренние коды клиента в карточках товаров.
grouping_level_1
string[] Имена группировки уровня 1 (создаются в MetricLab вручную).
grouping_level_2
string[] Имена группировки уровня 2.
grouping_level_3
string[] Имена группировки уровня 3.
group_name
string[] Имена групп товаров.
responsible
string[] Имена ответственных за товары.

Структура ответа

status
string Всегда "success" при HTTP 200. При ошибке — "error" и поле error.
data
object Контейнер со срезами статистики: current (всегда) и опционально previous.
current
object Данные за основной период (date_from … date_to).
totals
{metric: number} Всегда присутствует. Итоги по всем запрошенным метрикам за период.
by_date
{date: {metric: number}} Появляется, если в group_by есть "date". Ключ — дата YYYY-MM-DD.
by_article
{article_key: {metric: number}} Появляется, если в group_by есть "article". Ключ строки — "кабинет:sku". Кабинет в начале — чтобы одинаковые SKU из разных кабинетов не склеились; название кабинета то же, что в GET /v1/cabinets.
by_article_date
{article_key: {date: {metric: number}}} Появляется, если в group_by есть и "date", и "article". Разрез артикул × дата.
previous
object Появляется только при include_previous: true. Структура идентична current — те же totals / by_date / by_article / by_article_date за предыдущий период.
meta
object Служебная информация о запросе: что спросили и сколько кабинетов/юрлиц вошло в ответ.
marketplace
string "ozon".
dataset
string "metrics".
cabinets
number Сколько кабинетов вошло в запрос (только доступные вам).
yls
number Сколько юрлиц затронул запрос. Одно юрлицо может объединять несколько кабинетов.
metrics
string[] Метрики, которые вы запросили.
group_by
string[] Разрезы, которые вы указали в запросе.
include_previous
boolean Значение из запроса.

Каталог метрик · Ozon

В поле metrics передаются key метрик. Группировка и порядок — как в виджете RNP внутри MetricLab. Метрики с тегом computed в ответе API не возвращаются — это производные показатели; запросите сырые компоненты из формулы и посчитайте на стороне клиента. Метрики с тегом план — это ваши же планы из формы «Планы»: план среза равен сумме дневных планов внутри него, а рядом с тегом стоит ключ метрики факта, к которой план относится.

Воронка · 23 метрик

Метрики воронки продаж: показы, клики, корзина, заказы, продажи

ozon_rnp_notes Заметки text
card_views Показы карточки number
ozon_views_search_catalog Показы (поиск и каталог) number
card_clicks Переходы в карточку number
ozon_unique_visitors Уникальные посетители number
ozon_sessions_search_catalog Уникальные посет. (ПиК) number
add_to_basket Добавления в корзину number
orders_amount Заказы, шт. number
orders_sum Заказы, руб. money
sales_amount Продажи, шт. number
sales_sum Продажи, руб. money
ozon_buyout_num Выкупы за 45д (скольз.) number
ozon_buyout_den Заказы с исходом за 45д (скольз.) number
search_position Средняя позиция в поиске number
ozon_show_frequency Частота показовcomputed ozon_show_frequency = card_views / ozon_unique_visitors number
ozon_show_frequency_new Частота показов (ПиК)computed ozon_show_frequency_new = ozon_views_search_catalog / ozon_sessions_search_catalog number
ozon_new_views_share Доля показов (ПиК), %computed ozon_new_views_share = ozon_views_search_catalog / card_views * 100 percent
ozon_ctr Конверсия в клик, %computed ozon_ctr = card_clicks / card_views * 100 percent
ozon_conversion_to_basket Конверсия в корзину, %computed ozon_conversion_to_basket = add_to_basket / card_clicks * 100 percent
ozon_conversion_to_order Конверсия в заказ, %computed ozon_conversion_to_order = orders_amount / add_to_basket * 100 percent
ozon_avg_price_order Средний чек заказа, рубcomputed ozon_avg_price_order = orders_sum / orders_amount money
ozon_avg_price_sale Средний чек продажи, рубcomputed ozon_avg_price_sale = sales_sum / sales_amount money
ozon_buyout_rate Процент выкупа, %computed ozon_buyout_rate = ozon_buyout_num / ozon_buyout_den * 100 percent
Воронка - органика · 4 метрик

Органическая воронка: показатели всего за вычетом рекламных (РК)

card_views_org Показы орг., штcomputed card_views_org = card_views - card_views_adv number
card_clicks_org Клики орг., штcomputed card_clicks_org = card_clicks - card_clicks_adv number
orders_amount_org Заказы орг., штcomputed orders_amount_org = orders_amount - orders_amount_adv number
orders_sum_org Заказы орг., рубcomputed orders_sum_org = orders_sum - orders_sum_adv money
Реклама · 25 метрик

Метрики рекламы: расходы, ДРР, заказы по РК

adv_sum Расходы РК (все) money
adv_sum_ozk_search Расходы на ОЗК (Поиск) money
adv_sum_ozk_search_rec Расходы на ОЗК (Поиск + рек.) money
adv_sum_special Расходы на Спецразмещение money
adv_sum_ozz Расходы на ОЗЗ money
orders_sum_adv Заказы по РК, руб. money
card_views_adv Показы РК, шт number
card_clicks_adv Клики РК, шт number
orders_amount_adv Заказы РК, шт number
ozon_drr_of_all_orders ДРР от всех заказов, %computed ozon_drr_of_all_orders = adv_sum / orders_sum * 100 percent
ozon_drr_of_all_orders_ozk_search ДРР от всех заказов (ОЗК поиск), %computed ozon_drr_of_all_orders_ozk_search = adv_sum_ozk_search / orders_sum * 100 percent
ozon_drr_of_all_orders_ozk_search_rec ДРР от всех заказов (ОЗК поиск + рек.), %computed ozon_drr_of_all_orders_ozk_search_rec = adv_sum_ozk_search_rec / orders_sum * 100 percent
ozon_drr_of_all_orders_special ДРР от всех заказов (Спецразмещение), %computed ozon_drr_of_all_orders_special = adv_sum_special / orders_sum * 100 percent
ozon_drr_of_all_orders_ozz ДРР от всех заказов (ОЗЗ), %computed ozon_drr_of_all_orders_ozz = adv_sum_ozz / orders_sum * 100 percent
ozon_drr_of_adv_orders ДРР от заказов РК, %computed ozon_drr_of_adv_orders = adv_sum / orders_sum_adv * 100 percent
ozon_drr_of_all_sales ДРР от всех продаж, %computed ozon_drr_of_all_sales = adv_sum / sales_sum * 100 percent
ozon_drr_of_all_sales_ozk_search ДРР от всех продаж (ОЗК поиск), %computed ozon_drr_of_all_sales_ozk_search = adv_sum_ozk_search / sales_sum * 100 percent
ozon_drr_of_all_sales_ozk_search_rec ДРР от всех продаж (ОЗК поиск + рек.), %computed ozon_drr_of_all_sales_ozk_search_rec = adv_sum_ozk_search_rec / sales_sum * 100 percent
ozon_drr_of_all_sales_special ДРР от всех продаж (Спецразмещение), %computed ozon_drr_of_all_sales_special = adv_sum_special / sales_sum * 100 percent
ozon_drr_of_all_sales_ozz ДРР от всех продаж (ОЗЗ), %computed ozon_drr_of_all_sales_ozz = adv_sum_ozz / sales_sum * 100 percent
ozon_cost_per_mille Стоимость 1000 показов, рубcomputed ozon_cost_per_mille = adv_sum / card_views * 1000 money
ozon_cost_per_click Стоимость клика, рубcomputed ozon_cost_per_click = adv_sum / card_clicks money
ozon_cost_per_cart Стоимость корзины, рубcomputed ozon_cost_per_cart = adv_sum / add_to_basket money
ozon_cost_per_order Стоимость заказа, рубcomputed ozon_cost_per_order = adv_sum / orders_amount money
ozon_cost_per_sale Стоимость продажи, рубcomputed ozon_cost_per_sale = adv_sum / sales_amount money
План-факт · 20 метрик

Метрики план-факт: план, % выполнения, прогноз; целевые ДРР и маржинальность — цель и отклонение от неё

ozon_rnp_views_plan ПЛАН: Показы, штплан → card_views number
ozon_rnp_ads_cost_plan ПЛАН: Расходы на рекламуплан → adv_sum money
ozon_rnp_profit_plan ПЛАН: Прибыльплан → profit_sum money
ozon_rnp_for_pay_plan ПЛАН: Сумма к перечислениюплан → for_pay money
ozon_rnp_clicks_plan ПЛАН: Клики, штплан → card_clicks number
ozon_rnp_add_to_cart_plan ПЛАН: Корзина, штплан → add_to_basket number
ozon_rnp_orders_count_plan ПЛАН: Заказы, штплан → orders_amount number
ozon_rnp_orders_sum_plan ПЛАН: Заказы, рубплан → orders_sum money
ozon_rnp_sales_count_plan ПЛАН: Продажи, штплан → sales_amount number
ozon_rnp_sales_sum_plan ПЛАН: Продажи, рубплан → sales_sum money
ozon_views_plan_pct % ВЫПОЛНЕНИЯ: Показы, штcomputed ozon_views_plan_pct = card_views / ozon_rnp_views_plan * 100 percent
ozon_ads_cost_plan_pct % ВЫПОЛНЕНИЯ: Расходы на рекламуcomputed ozon_ads_cost_plan_pct = adv_sum / ozon_rnp_ads_cost_plan * 100 percent
ozon_profit_plan_pct % ВЫПОЛНЕНИЯ: Прибыльcomputed ozon_profit_plan_pct = profit_sum / ozon_rnp_profit_plan * 100 percent
ozon_for_pay_plan_pct % ВЫПОЛНЕНИЯ: Сумма к перечислениюcomputed ozon_for_pay_plan_pct = for_pay / ozon_rnp_for_pay_plan * 100 percent
ozon_clicks_plan_pct % ВЫПОЛНЕНИЯ: Клики, штcomputed ozon_clicks_plan_pct = card_clicks / ozon_rnp_clicks_plan * 100 percent
ozon_add_to_cart_plan_pct % ВЫПОЛНЕНИЯ: Корзина, штcomputed ozon_add_to_cart_plan_pct = add_to_basket / ozon_rnp_add_to_cart_plan * 100 percent
ozon_orders_count_plan_pct % ВЫПОЛНЕНИЯ: Заказы, штcomputed ozon_orders_count_plan_pct = orders_amount / ozon_rnp_orders_count_plan * 100 percent
ozon_orders_sum_plan_pct % ВЫПОЛНЕНИЯ: Заказы, рубcomputed ozon_orders_sum_plan_pct = orders_sum / ozon_rnp_orders_sum_plan * 100 percent
ozon_sales_count_plan_pct % ВЫПОЛНЕНИЯ: Продажи, штcomputed ozon_sales_count_plan_pct = sales_amount / ozon_rnp_sales_count_plan * 100 percent
ozon_sales_sum_plan_pct % ВЫПОЛНЕНИЯ: Продажи, рубcomputed ozon_sales_sum_plan_pct = sales_sum / ozon_rnp_sales_sum_plan * 100 percent
Прибыль · 30 метрик

Метрики прибыли и маржинальности

sum_before_spp_realized Реализация до СПП, руб. money
ozon_sum_before_spp_realized_rf Реализация до СПП, РФ, руб. money
ozon_sum_before_spp_realized_cis Реализация до СПП, другие страны, руб. money
sum_after_spp_realized Реализация после СПП, руб. money
ozon_sum_after_spp_realized_rf Реализация после СПП, РФ, руб. money
ozon_sum_after_spp_realized_cis Реализация с учётом выкупного коэффициента, другие страны, руб. money
ozon_commission_sum Комиссия Ozon money
ozon_commission_sum_rf Комиссия Ozon, РФ money
ozon_commission_sum_cis Комиссия Ozon, другие страны money
for_pay К перечислению money
ozon_for_pay_rf К перечислению, РФ money
ozon_for_pay_cis К перечислению за продажи в другие страны money
direct_cost_sebes_sum Себестоимость money
ozon_sebes_sum_rf Себестоимость, РФ money
ozon_sebes_sum_cis Себестоимость, другие страны money
profit_sum Прибыль money
ozon_all_services_sum Все услуги Ozon money
ozon_3_logistics Логистика Ozon money
ozon_12_reverse_logistics Обратная логистика money
ozon_advertising_spent_sum Реклама — списано денег money
ozon_20_placement_of_goods_on_the_warehouse Размещение товаров на складе (платное хранение) money
ozon_41_service_of_acquiring Эквайринг Ozon money
direct_cost_nalog_sum Налог money
direct_cost_in_and_out_nalog_sum НДС (вход. + исход.) money
ozon_avg_commission_percent Средний % комиссии Ozoncomputed ozon_avg_commission_percent = -ozon_commission_sum / sum_before_spp_realized * 100 percent
ozon_for_pay_share Доля суммы к перечислению к сумме реализацииcomputed ozon_for_pay_share = for_pay / sum_before_spp_realized * 100 percent
ozon_sebes_share Доля себестоимости от суммы реализацииcomputed ozon_sebes_share = -direct_cost_sebes_sum / sum_before_spp_realized * 100 percent
ozon_margin_before_spp Маржинальность до СПП, %computed ozon_margin_before_spp = profit_sum / sum_before_spp_realized * 100 percent
ozon_margin_after_spp Маржинальность после СПП, %computed ozon_margin_after_spp = profit_sum / sum_after_spp_realized * 100 percent
ozon_profit_share_of_sebes Доля прибыли от себестоимости (рентабельность товара)computed ozon_profit_share_of_sebes = profit_sum / -direct_cost_sebes_sum * 100 percent
Остатки · 4 метрик

Метрики остатков и запасов

stocks_amount Остаток FBO, шт number
stocks_amount_fbs Остаток FBS, шт number
stocks_amount_total Остаток (FBO+FBS), шт number
stocks_in_transit Товары в пути, шт. number
Цены · 5 метрик

Метрики цен и СПП

price_before_spp Цена до СПП, руб money
price_after_spp Цена с СПП, руб money
spp_percent СПП, % percent
price_after_spp_and_card Цена с картой Ozon, руб money
spp_rub СПП, рубcomputed spp_rub = price_before_spp * spp_percent / 100 money
Прогноз · 36 метрик

Прогнозные метрики на основе заказов

ozon_forecast_orders_sum ПРОГНОЗ: Заказы, руб money
ozon_forecast_realization ПРОГНОЗ: Реализация, руб money
ozon_forecast_all_services ПРОГНОЗ: Все услуги, руб money
ozon_forecast_commission ПРОГНОЗ: Комиссия Ozon, руб money
ozon_forecast_logistics ПРОГНОЗ: Прямая логистика, руб money
ozon_forecast_reverse_logistics ПРОГНОЗ: Обр. логистика, руб money
ozon_forecast_ads ПРОГНОЗ: Реклама, руб money
ozon_forecast_storage ПРОГНОЗ: Хранение, руб money
ozon_forecast_acquiring ПРОГНОЗ: Эквайринг, руб money
ozon_forecast_other_services ПРОГНОЗ: Прочие услуги, руб money
ozon_forecast_tax ПРОГНОЗ: Налог, руб money
ozon_forecast_outgoing_vat ПРОГНОЗ: Исходящий НДС, руб money
ozon_forecast_incoming_vat ПРОГНОЗ: Входящий НДС, руб money
ozon_forecast_cost_price ПРОГНОЗ: Себестоимость, руб money
ozon_forecast_profit ПРОГНОЗ: Прибыль, руб money
ozon_forecast_buyout_units_40d Выкупы за 45 дней до заказа number
ozon_forecast_resolved_units_40d Заказы с исходом за 45 дней до заказа number
ozon_fp_all_services_pct ПРОГНОЗ: % всех услугcomputed ozon_fp_all_services_pct = ozon_forecast_all_services / ozon_forecast_realization * 100 percent
ozon_fp_commission_pct ПРОГНОЗ: % комиссии Ozoncomputed ozon_fp_commission_pct = ozon_forecast_commission / ozon_forecast_realization * 100 percent
ozon_fp_logistics_pct ПРОГНОЗ: % прямой логистикиcomputed ozon_fp_logistics_pct = ozon_forecast_logistics / ozon_forecast_realization * 100 percent
ozon_fp_reverse_logistics_pct ПРОГНОЗ: % обр. логистикиcomputed ozon_fp_reverse_logistics_pct = ozon_forecast_reverse_logistics / ozon_forecast_realization * 100 percent
ozon_fp_logistics_total ПРОГНОЗ: Логистика, рубcomputed ozon_fp_logistics_total = ozon_forecast_logistics + ozon_forecast_reverse_logistics money
ozon_fp_logistics_total_pct ПРОГНОЗ: % логистикиcomputed ozon_fp_logistics_total_pct = ozon_fp_logistics_total / ozon_forecast_realization * 100 percent
ozon_fp_ads_pct ПРОГНОЗ: % рекламыcomputed ozon_fp_ads_pct = ozon_forecast_ads / ozon_forecast_realization * 100 percent
ozon_fp_storage_pct ПРОГНОЗ: % храненияcomputed ozon_fp_storage_pct = ozon_forecast_storage / ozon_forecast_realization * 100 percent
ozon_fp_acquiring_pct ПРОГНОЗ: % эквайрингаcomputed ozon_fp_acquiring_pct = ozon_forecast_acquiring / ozon_forecast_realization * 100 percent
ozon_fp_other_services_pct ПРОГНОЗ: % прочих услугcomputed ozon_fp_other_services_pct = ozon_forecast_other_services / ozon_forecast_realization * 100 percent
ozon_fp_tax_pct ПРОГНОЗ: % налогаcomputed ozon_fp_tax_pct = ozon_forecast_tax / ozon_forecast_realization * 100 percent
ozon_fp_outgoing_vat_pct ПРОГНОЗ: % исходящего НДСcomputed ozon_fp_outgoing_vat_pct = ozon_forecast_outgoing_vat / ozon_forecast_realization * 100 percent
ozon_fp_incoming_vat_pct ПРОГНОЗ: % входящего НДСcomputed ozon_fp_incoming_vat_pct = ozon_forecast_incoming_vat / ozon_forecast_realization * 100 percent
ozon_fp_cost_price_pct ПРОГНОЗ: % себестоимостиcomputed ozon_fp_cost_price_pct = ozon_forecast_cost_price / ozon_forecast_realization * 100 percent
ozon_fp_margin_pct ПРОГНОЗ: Маржинальность, %computed ozon_fp_margin_pct = ozon_forecast_profit / ozon_forecast_realization * 100 percent
ozon_fp_profitability_pct ПРОГНОЗ: Рентабельность, %computed ozon_fp_profitability_pct = ozon_forecast_profit / ozon_forecast_cost_price * 100 percent
ozon_fp_markup ПРОГНОЗ: Наценка, коэффcomputed ozon_fp_markup = ozon_forecast_realization / ozon_forecast_cost_price number
ozon_fp_buyout_rate ПРОГНОЗ: Выкуп, %computed ozon_fp_buyout_rate = ozon_forecast_realization / ozon_forecast_orders_sum * 100 percent
ozon_fp_buyout_rate_40d ПРОГНОЗ: Выкуп за 45 дней (скольз.), %computed ozon_fp_buyout_rate_40d = ozon_forecast_buyout_units_40d / ozon_forecast_resolved_units_40d * 100 percent

Пример запроса

curl https://web.metriclab.ru/v1/ozon/metrics \
  -H "Authorization: Bearer ml_live_xxxxxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{
    "cabinets":  ["67890"],
    "date_from": "2026-05-01",
    "date_to":   "2026-05-31",
    "metrics":   ["orders_amount", "orders_sum", "card_clicks"],
    "group_by":  ["date"]
  }'
import requests

KEY  = "ml_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
HOST = "https://web.metriclab.ru"

resp = requests.post(
    f"{HOST}/v1/ozon/metrics",
    headers={"Authorization": f"Bearer {KEY}"},
    json={
        "cabinets":  ["67890"],
        "date_from": "2026-05-01",
        "date_to":   "2026-05-31",
        "metrics":   ["orders_amount", "orders_sum", "card_clicks"],
        "group_by":  ["date"],
    },
    timeout=120,
)
resp.raise_for_status()
data = resp.json()
print(data["data"]["current"]["totals"])
const KEY  = "ml_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
const HOST = "https://web.metriclab.ru";

const r = await fetch(`${HOST}/v1/ozon/metrics`, {
  method: "POST",
  headers: {
    "Authorization": `Bearer ${KEY}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    cabinets:  ["67890"],
    date_from: "2026-05-01",
    date_to:   "2026-05-31",
    metrics:   ["orders_amount", "orders_sum", "card_clicks"],
    group_by:  ["date"],
  }),
});
if (!r.ok) throw new Error(`HTTP ${r.status}`);
const { data, meta } = await r.json();
console.log(data.current.totals);

Пример ответа · 200 OK

json
{
  "status": "success",
  "data": {
    "current": {
      "totals": {
        "orders_amount": 1234,
        "orders_sum":    567890.12,
        "card_clicks":   18540
      },
      "by_date": {
        "2026-05-01": {
          "orders_amount": 42,
          "card_clicks":   380
        }
        /* ... */
      }
    }
  },
  "meta": {
    "marketplace":      "ozon",
    "dataset":          "metrics",
    "cabinets":         1,
    "yls":              1,
    "metrics":          ["orders_amount", "orders_sum", "card_clicks"],
    "group_by":         ["date"],
    "include_previous": false
  }
}

POST /v1/yandex/metrics

Возвращает статистику Яндекс Маркет за период с опциональной группировкой по датам и/или артикулам.

POST https://web.metriclab.ru/v1/yandex/metrics
Рекомендации и частые ошибки
  • Метрики с пометкой computed в ответе НЕ приходят. Это производные (ДРР, маржа и т.п.). Запросите сырые метрики из их формулы и посчитайте сами; если передать computed-метрику в metrics — будет ошибка 400.
  • Запрашивайте только нужные метрики и разрезы — меньше данных, быстрее ответ. group_by: [] (только итоги) — самый быстрый вариант.
  • Разрезы перемножаются: ["article","date"] на большом ассортименте за длинный период даёт очень большой ответ. Выбирайте разрез осознанно.
  • Ключ в by_article — "юрлицо:артикул". Чтобы получить голый артикул, отрежьте часть до первого :.
  • Даты — YYYY-MM-DD, включительно. date_to в будущем обрезается до сегодня.
  • Все data-метрики аддитивны (складываются по любому разрезу). Деньги — в рублях, количества — в штуках.
  • Сравнение с прошлым периодом: include_previous: true плюс явные date_from_previous/date_to_previous (авто-сдвига периода нет).
  • Лимиты: 3 запроса/мин на метод и 60/мин суммарно по ключу. Не опрашивайте в плотном цикле; при 429 подождите Retry-After секунд и повторите.

Тело запроса

cabinets required
string[] Массив business_id кабинетов. Вместо идентификатора можно указать название кабинета — то, что отдаёт GET /v1/cabinets в поле name (регистр не важен). Кабинет должен принадлежать владельцу API-ключа (получите доступные через GET /v1/cabinets). Пустой массив [] — взять все доступные пользователю.
date_from required
string Начало периода, формат YYYY-MM-DD. Включительно.
date_to required
string Конец периода, YYYY-MM-DD. Включительно.
metrics required
string[] Названия метрик из каталога ниже. Берите те, что без пометки computed — метрики с такой пометкой API не считает, их вы получаете сами по формуле (она указана рядом в каталоге).
group_by
string[] Разрезы ответа. Допустимые значения: "date", "article". По умолчанию [] — только итоги (totals). Можно комбинировать.
include_previous
boolean Если true — в ответе появится data.previous для сравнения с прошлым периодом. Сам период задайте полями date_from_previous и date_to_previous. По умолчанию false.
date_from_previous
string Начало периода для сравнения, YYYY-MM-DD. Нужно вместе с include_previous: true.
date_to_previous
string Конец периода для сравнения, YYYY-MM-DD.
filters
object Дополнительные фильтры на товары. Все вложенные поля — массивы строк, пустой массив = без ограничения.
articles
string[] Артикулы продавца (offer_id, SKU магазина) в виде строк.
brands
string[] Имена брендов.
subjects
string[] Имена предметов/категорий.
article_suppliers
string[] Артикулы поставщика — внутренние коды клиента в карточках товаров.
grouping_level_1
string[] Имена группировки уровня 1 (создаются в MetricLab вручную).
grouping_level_2
string[] Имена группировки уровня 2.
grouping_level_3
string[] Имена группировки уровня 3.
group_name
string[] Имена групп товаров.
responsible
string[] Имена ответственных за товары.

Структура ответа

status
string Всегда "success" при HTTP 200. При ошибке — "error" и поле error.
data
object Контейнер со срезами статистики: current (всегда) и опционально previous.
current
object Данные за основной период (date_from … date_to).
totals
{metric: number} Всегда присутствует. Итоги по всем запрошенным метрикам за период.
by_date
{date: {metric: number}} Появляется, если в group_by есть "date". Ключ — дата YYYY-MM-DD.
by_article
{article_key: {metric: number}} Появляется, если в group_by есть "article". Ключ строки — "кабинет:артикул". Кабинет в начале — чтобы одинаковые артикулы из разных кабинетов не склеились; название кабинета то же, что в GET /v1/cabinets.
by_article_date
{article_key: {date: {metric: number}}} Появляется, если в group_by есть и "date", и "article". Разрез артикул × дата.
previous
object Появляется только при include_previous: true. Структура идентична current — те же totals / by_date / by_article / by_article_date за предыдущий период.
meta
object Служебная информация о запросе: что спросили и сколько кабинетов/юрлиц вошло в ответ.
marketplace
string "yandex".
dataset
string "metrics".
cabinets
number Сколько кабинетов вошло в запрос (только доступные вам).
yls
number Сколько юрлиц затронул запрос. Одно юрлицо может объединять несколько кабинетов.
metrics
string[] Метрики, которые вы запросили.
group_by
string[] Разрезы, которые вы указали в запросе.
include_previous
boolean Значение из запроса.

Каталог метрик · Яндекс Маркет

В поле metrics передаются key метрик. Группировка и порядок — как в виджете RNP внутри MetricLab. Метрики с тегом computed в ответе API не возвращаются — это производные показатели; запросите сырые компоненты из формулы и посчитайте на стороне клиента. Метрики с тегом план — это ваши же планы из формы «Планы»: план среза равен сумме дневных планов внутри него, а рядом с тегом стоит ключ метрики факта, к которой план относится.

Воронка · 25 метрик

Метрики воронки продаж: показы, переходы, корзина, заказы, реализация

yandex_rnp_notes Заметки text
yandex_card_views Показы карточки, шт number
yandex_card_clicks Переходы в карточку, шт number
yandex_add_to_basket Добавления в корзину, шт number
yandex_orders_amount Заказы, шт. number
yandex_orders_sum Заказы, руб. money
yandex_sales_amount Реализовано, шт. number
yandex_sales_sum Реализовано, руб. money
yandex_cancels_unredeemed Отмены и невыкупы, шт. number
yandex_returns_funnel Возвраты (воронка), шт. number
yandex_uf_returns_sum Сумма возвратов money
yandex_buyout_num Выкупы за 45д (скольз.) number
yandex_buyout_den Заказы с исходом за 45д (скольз.) number
yandex_uf_sales_sum Сумма продаж money
yandex_uf_sales_qty Продаж number
yandex_uf_returns_qty Возвратов number
yandex_ctr Конверсия в клик, %computed yandex_ctr = yandex_card_clicks / yandex_card_views * 100 percent
yandex_conversion_to_basket Конверсия в корзину, %computed yandex_conversion_to_basket = yandex_add_to_basket / yandex_card_clicks * 100 percent
yandex_conversion_to_order Конверсия в заказ, %computed yandex_conversion_to_order = yandex_orders_amount / yandex_add_to_basket * 100 percent
yandex_avg_price_order Средний чек заказа, руб.computed yandex_avg_price_order = yandex_orders_sum / yandex_orders_amount money
yandex_avg_price_sale Средний чек реализации, руб.computed yandex_avg_price_sale = yandex_sales_sum / yandex_sales_amount money
yandex_uf_cancels_sum Сумма отмен и невыкуповcomputed yandex_uf_cancels_sum = yandex_cancels_unredeemed * yandex_uf_sales_sum / yandex_uf_sales_qty money
yandex_uf_cancel_rate % отмен и невыкуповcomputed yandex_uf_cancel_rate = yandex_cancels_unredeemed / yandex_orders_amount * 100 percent
yandex_uf_return_rate % возвратовcomputed yandex_uf_return_rate = yandex_uf_returns_qty / yandex_uf_sales_qty * 100 percent
yandex_buyout_rate_45d Процент выкупа, %computed yandex_buyout_rate_45d = yandex_buyout_num / yandex_buyout_den * 100 percent
Воронка - органика · 5 метрик

Органическая воронка: показатели всего за вычетом продвижения

yandex_organic_sales_amount Продажи (органика), шт. number
yandex_card_views_org Показы орг., штcomputed yandex_card_views_org = yandex_card_views - yandex_card_views_adv number
yandex_card_clicks_org Переходы орг., штcomputed yandex_card_clicks_org = yandex_card_clicks - yandex_card_clicks_adv number
yandex_orders_amount_org Заказы орг., штcomputed yandex_orders_amount_org = yandex_orders_amount - yandex_orders_amount_adv number
yandex_orders_sum_org Заказы орг., рубcomputed yandex_orders_sum_org = yandex_orders_sum - yandex_orders_sum_adv money
Продвижение · 31 метрик

Метрики продвижения: расходы, ДРР, заказы по кампаниям

yandex_adv_sum Расходы на продвижение, руб. money
yandex_adv_sum_bonus Расходы на продвижение (бонусы), руб. money
yandex_adv_sum_boost_sales Расходы на буст продаж, руб. money
yandex_adv_sum_boost_shows Расходы на буст показов, руб. money
yandex_adv_sum_shelf Расходы на полку, руб. money
yandex_adv_sum_banner Расходы на баннеры, руб. money
yandex_card_views_adv Показы по РК, шт number
yandex_card_clicks_adv Переходы по РК, шт number
yandex_add_to_basket_adv Корзина по РК, шт number
yandex_orders_amount_adv Заказы по РК, шт number
yandex_orders_sum_adv Заказы по РК, руб. money
yandex_adv_sales_amount Продажи по РК, шт. number
yandex_adv_sales_sum Продажи по РК, руб. money
yandex_drr_of_all_orders ДРР от всех заказов, %computed yandex_drr_of_all_orders = yandex_adv_sum / yandex_orders_sum * 100 percent
yandex_drr_of_all_orders_bonus ДРР от всех заказов (бонусы), %computed yandex_drr_of_all_orders_bonus = yandex_adv_sum_bonus / yandex_orders_sum * 100 percent
yandex_drr_of_all_orders_boost_sales ДРР от всех заказов (буст продаж), %computed yandex_drr_of_all_orders_boost_sales = yandex_adv_sum_boost_sales / yandex_orders_sum * 100 percent
yandex_drr_of_all_orders_boost_shows ДРР от всех заказов (буст показов), %computed yandex_drr_of_all_orders_boost_shows = yandex_adv_sum_boost_shows / yandex_orders_sum * 100 percent
yandex_drr_of_all_orders_shelf ДРР от всех заказов (полка), %computed yandex_drr_of_all_orders_shelf = yandex_adv_sum_shelf / yandex_orders_sum * 100 percent
yandex_drr_of_all_orders_banner ДРР от всех заказов (баннеры), %computed yandex_drr_of_all_orders_banner = yandex_adv_sum_banner / yandex_orders_sum * 100 percent
yandex_drr_of_all_sales ДРР от реализации, %computed yandex_drr_of_all_sales = yandex_adv_sum / yandex_sales_sum * 100 percent
yandex_drr_of_all_sales_bonus ДРР от реализации (бонусы), %computed yandex_drr_of_all_sales_bonus = yandex_adv_sum_bonus / yandex_sales_sum * 100 percent
yandex_drr_of_all_sales_boost_sales ДРР от реализации (буст продаж), %computed yandex_drr_of_all_sales_boost_sales = yandex_adv_sum_boost_sales / yandex_sales_sum * 100 percent
yandex_drr_of_all_sales_boost_shows ДРР от реализации (буст показов), %computed yandex_drr_of_all_sales_boost_shows = yandex_adv_sum_boost_shows / yandex_sales_sum * 100 percent
yandex_drr_of_all_sales_shelf ДРР от реализации (полка), %computed yandex_drr_of_all_sales_shelf = yandex_adv_sum_shelf / yandex_sales_sum * 100 percent
yandex_drr_of_all_sales_banner ДРР от реализации (баннеры), %computed yandex_drr_of_all_sales_banner = yandex_adv_sum_banner / yandex_sales_sum * 100 percent
yandex_drr_of_adv_orders ДРР от заказов по РК, %computed yandex_drr_of_adv_orders = yandex_adv_sum / yandex_orders_sum_adv * 100 percent
yandex_cost_per_mille Стоимость 1000 показов, руб.computed yandex_cost_per_mille = yandex_adv_sum / yandex_card_views * 1000 money
yandex_cost_per_click Стоимость перехода, руб.computed yandex_cost_per_click = yandex_adv_sum / yandex_card_clicks money
yandex_cost_per_cart Стоимость корзины, руб.computed yandex_cost_per_cart = yandex_adv_sum / yandex_add_to_basket money
yandex_cost_per_order Стоимость заказа, руб.computed yandex_cost_per_order = yandex_adv_sum / yandex_orders_amount money
yandex_cost_per_sale Стоимость реализации, руб.computed yandex_cost_per_sale = yandex_adv_sum / yandex_sales_amount money
План-факт · 20 метрик

Метрики план-факт: план, % выполнения, прогноз; целевые ДРР и маржинальность — цель и отклонение от неё

yandex_rnp_views_plan ПЛАН: Показы, штплан → yandex_card_views number
yandex_rnp_ads_cost_plan ПЛАН: Расходы на продвижениеплан → yandex_adv_sum money
yandex_rnp_profit_plan ПЛАН: Прибыльплан → yandex_uf_profit money
yandex_rnp_for_pay_plan ПЛАН: Сумма к перечислениюплан → yandex_uf_for_pay money
yandex_rnp_clicks_plan ПЛАН: Переходы, штплан → yandex_card_clicks number
yandex_rnp_add_to_cart_plan ПЛАН: Корзина, штплан → yandex_add_to_basket number
yandex_rnp_orders_count_plan ПЛАН: Заказы, штплан → yandex_orders_amount number
yandex_rnp_orders_sum_plan ПЛАН: Заказы, рубплан → yandex_orders_sum money
yandex_rnp_sales_count_plan ПЛАН: Реализовано, штплан → yandex_sales_amount number
yandex_rnp_sales_sum_plan ПЛАН: Реализовано, рубплан → yandex_sales_sum money
yandex_views_plan_pct % ВЫПОЛНЕНИЯ: Показы, штcomputed yandex_views_plan_pct = yandex_card_views / yandex_rnp_views_plan * 100 percent
yandex_ads_cost_plan_pct % ВЫПОЛНЕНИЯ: Расходы на продвижениеcomputed yandex_ads_cost_plan_pct = yandex_adv_sum / yandex_rnp_ads_cost_plan * 100 percent
yandex_profit_plan_pct % ВЫПОЛНЕНИЯ: Прибыльcomputed yandex_profit_plan_pct = yandex_uf_profit / yandex_rnp_profit_plan * 100 percent
yandex_for_pay_plan_pct % ВЫПОЛНЕНИЯ: Сумма к перечислениюcomputed yandex_for_pay_plan_pct = yandex_uf_for_pay / yandex_rnp_for_pay_plan * 100 percent
yandex_clicks_plan_pct % ВЫПОЛНЕНИЯ: Переходы, штcomputed yandex_clicks_plan_pct = yandex_card_clicks / yandex_rnp_clicks_plan * 100 percent
yandex_add_to_cart_plan_pct % ВЫПОЛНЕНИЯ: Корзина, штcomputed yandex_add_to_cart_plan_pct = yandex_add_to_basket / yandex_rnp_add_to_cart_plan * 100 percent
yandex_orders_count_plan_pct % ВЫПОЛНЕНИЯ: Заказы, штcomputed yandex_orders_count_plan_pct = yandex_orders_amount / yandex_rnp_orders_count_plan * 100 percent
yandex_orders_sum_plan_pct % ВЫПОЛНЕНИЯ: Заказы, рубcomputed yandex_orders_sum_plan_pct = yandex_orders_sum / yandex_rnp_orders_sum_plan * 100 percent
yandex_sales_count_plan_pct % ВЫПОЛНЕНИЯ: Реализовано, штcomputed yandex_sales_count_plan_pct = yandex_sales_amount / yandex_rnp_sales_count_plan * 100 percent
yandex_sales_sum_plan_pct % ВЫПОЛНЕНИЯ: Реализовано, рубcomputed yandex_sales_sum_plan_pct = yandex_sales_sum / yandex_rnp_sales_sum_plan * 100 percent
Прибыль · 18 метрик

Метрики прибыли и маржинальности

yandex_uf_for_pay Сумма к перечислению money
yandex_uf_sebes Себестоимость реализованного товара money
yandex_uf_profit Маржинальная прибыль money
yandex_uf_buyer_payments Оплатили покупатели money
yandex_uf_payment_returns Возвращено покупателям money
yandex_uf_tax Налог money
yandex_uf_vat_out НДС (исходящий) money
yandex_uf_vat_in НДС (входящий) money
yandex_uf_self_buyouts Затраты на самовыкупы money
yandex_uf_self_buyouts_sebes Себестоимость самовыкупов money
yandex_uf_distributions Затраты на раздачи (сумма кэшбэка) money
yandex_uf_marketing Внешний маркетинг money
yandex_uf_realized_after Сумма реализации с учётом скидок Маркетаcomputed yandex_uf_realized_after = yandex_uf_buyer_payments + yandex_uf_payment_returns money
yandex_uf_for_pay_share К перечислению, %computed yandex_uf_for_pay_share = yandex_uf_for_pay / yandex_sales_sum * 100 percent
yandex_uf_sebes_share Себестоимость, %computed yandex_uf_sebes_share = -yandex_uf_sebes / yandex_sales_sum * 100 percent
yandex_uf_margin Маржинальность до скидок Маркетаcomputed yandex_uf_margin = yandex_uf_profit / yandex_sales_sum * 100 percent
yandex_uf_margin_after Маржинальность после скидок Маркетаcomputed yandex_uf_margin_after = yandex_uf_profit / yandex_uf_realized_after * 100 percent
yandex_uf_roi Рентабельность товараcomputed yandex_uf_roi = yandex_uf_profit / -yandex_uf_sebes * 100 percent
Остатки · 9 метрик

Метрики остатков и запасов

yandex_stocks_amount Остаток, шт number
yandex_stocks_fit Остаток годного, шт number
yandex_stocks_reserved Зарезервировано под заказы, шт number
yandex_stocks_quarantine Карантин, шт number
yandex_stocks_defect Брак, шт number
yandex_stocks_expiring С истекшим сроком, шт number
yandex_stocks_utilization К утилизации, шт number
yandex_stock_price Цена реализации остатков, руб. money
yandex_stock_sebes Себестоимость остатков, руб. money
Цены · 4 метрик

Метрики цен и скидок Маркета

yandex_price_before_discount Цена до скидок, руб money
yandex_price_after_discount Цена после скидок, руб money
yandex_discount_rub Скидка Маркета, рубcomputed yandex_discount_rub = yandex_price_before_discount - yandex_price_after_discount money
yandex_discount_percent Скидка Маркета, %computed yandex_discount_percent = (yandex_price_before_discount - yandex_price_after_discount) / yandex_price_before_discount * 100 percent

Пример запроса

curl https://web.metriclab.ru/v1/yandex/metrics \
  -H "Authorization: Bearer ml_live_xxxxxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{
    "cabinets":  ["11223344"],
    "date_from": "2026-05-01",
    "date_to":   "2026-05-31",
    "metrics":   ["orders_amount", "orders_sum", "card_clicks"],
    "group_by":  ["date"]
  }'
import requests

KEY  = "ml_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
HOST = "https://web.metriclab.ru"

resp = requests.post(
    f"{HOST}/v1/yandex/metrics",
    headers={"Authorization": f"Bearer {KEY}"},
    json={
        "cabinets":  ["11223344"],
        "date_from": "2026-05-01",
        "date_to":   "2026-05-31",
        "metrics":   ["orders_amount", "orders_sum", "card_clicks"],
        "group_by":  ["date"],
    },
    timeout=120,
)
resp.raise_for_status()
data = resp.json()
print(data["data"]["current"]["totals"])
const KEY  = "ml_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
const HOST = "https://web.metriclab.ru";

const r = await fetch(`${HOST}/v1/yandex/metrics`, {
  method: "POST",
  headers: {
    "Authorization": `Bearer ${KEY}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    cabinets:  ["11223344"],
    date_from: "2026-05-01",
    date_to:   "2026-05-31",
    metrics:   ["orders_amount", "orders_sum", "card_clicks"],
    group_by:  ["date"],
  }),
});
if (!r.ok) throw new Error(`HTTP ${r.status}`);
const { data, meta } = await r.json();
console.log(data.current.totals);

Пример ответа · 200 OK

json
{
  "status": "success",
  "data": {
    "current": {
      "totals": {
        "orders_amount": 1234,
        "orders_sum":    567890.12,
        "card_clicks":   18540
      },
      "by_date": {
        "2026-05-01": {
          "orders_amount": 42,
          "card_clicks":   380
        }
        /* ... */
      }
    }
  },
  "meta": {
    "marketplace":      "yandex",
    "dataset":          "metrics",
    "cabinets":         1,
    "yls":              1,
    "metrics":          ["orders_amount", "orders_sum", "card_clicks"],
    "group_by":         ["date"],
    "include_previous": false
  }
}

POST /v1/wb/advertising

Рекламная статистика Wildberries за период с группировкой по датам и/или артикулам: показы, клики, добавления в корзину, заказы (в шт. и руб.), расходы. Все data-метрики аддитивны — суммируются по любому разрезу.

POST https://web.metriclab.ru/v1/wb/advertising
Рекомендации и частые ошибки
  • Тело запроса и формат ответа — как у /metrics, но метрики рекламные (wb_rnpadv_*).
  • Производные (CPM, CTR, CPC, CPA, ДРР) API не возвращает. Запросите сырьё — показы, клики, расходы, заказы — и посчитайте сами по формуле из каталога.
  • «Ассоциированные» заказы (покупка после показа, без клика по объявлению): базовая метрика их включает. Нужны только прямые конверсии — берите версии с суффиксом _no_assoc.
  • Нужна разбивка по рекламным кампаниям — добавьте "campaign" в group_by. Тогда форма ответа другая: блок data.campaigns (имя/тип/статус) + data.current.by_campaign (метрики по кампании). См. раздел «Разрез по рекламным кампаниям» ниже.
  • Лимиты: 3 запроса/мин на метод и 60/мин суммарно; при 429 — ждите Retry-After.

Тело запроса

cabinets required
string[] Массив supplier_id кабинетов. Вместо идентификатора можно указать название кабинета — то, что отдаёт GET /v1/cabinets в поле name (регистр не важен). Кабинет должен принадлежать владельцу API-ключа (получите доступные через GET /v1/cabinets). Пустой массив [] — взять все доступные пользователю.
date_from required
string Начало периода, формат YYYY-MM-DD. Включительно.
date_to required
string Конец периода, YYYY-MM-DD. Включительно.
metrics required
string[] Названия метрик из каталога ниже. Берите те, что без пометки computed — метрики с такой пометкой API не считает, их вы получаете сами по формуле (она указана рядом в каталоге).
group_by
string[] Разрезы ответа. Допустимые значения: "date", "article", "campaign". По умолчанию [] — только итоги (totals). Можно комбинировать. Разрез "campaign" отдаёт статистику по каждой рекламной кампании — см. ниже.
include_previous
boolean Если true — в ответе появится data.previous для сравнения с прошлым периодом. Сам период задайте полями date_from_previous и date_to_previous. По умолчанию false.
date_from_previous
string Начало периода для сравнения, YYYY-MM-DD. Нужно вместе с include_previous: true.
date_to_previous
string Конец периода для сравнения, YYYY-MM-DD.
filters
object Дополнительные фильтры на товары. Все вложенные поля — массивы строк, пустой массив = без ограничения.
articles
string[] Артикулы WB (nm_id) в виде строк.
brands
string[] Имена брендов.
subjects
string[] Имена предметов/категорий.
article_suppliers
string[] Артикулы поставщика — внутренние коды клиента в карточках товаров.
grouping_level_1
string[] Имена группировки уровня 1 (создаются в MetricLab вручную).
grouping_level_2
string[] Имена группировки уровня 2.
grouping_level_3
string[] Имена группировки уровня 3.
group_name
string[] Имена групп товаров.
responsible
string[] Имена ответственных за товары.

Структура ответа

status
string Всегда "success" при HTTP 200. При ошибке — "error" и поле error.
data
object Контейнер со срезами статистики: current (всегда) и опционально previous.
current
object Данные за основной период (date_from … date_to).
totals
{metric: number} Всегда присутствует. Итоги по всем запрошенным метрикам за период.
by_date
{date: {metric: number}} Появляется, если в group_by есть "date". Ключ — дата YYYY-MM-DD.
by_article
{article_key: {metric: number}} Появляется, если в group_by есть "article". Ключ строки — "кабинет:артикул". Кабинет в начале — чтобы одинаковые артикулы из разных кабинетов не склеились; название кабинета то же, что в GET /v1/cabinets.
by_article_date
{article_key: {date: {metric: number}}} Появляется, если в group_by есть и "date", и "article". Разрез артикул × дата.
previous
object Появляется только при include_previous: true. Структура идентична current — те же totals / by_date / by_article / by_article_date за предыдущий период.
meta
object Служебная информация о запросе: что спросили и сколько кабинетов/юрлиц вошло в ответ.
marketplace
string "wb".
dataset
string "advertising".
cabinets
number Сколько кабинетов вошло в запрос (только доступные вам).
yls
number Сколько юрлиц затронул запрос. Одно юрлицо может объединять несколько кабинетов.
metrics
string[] Метрики, которые вы запросили.
group_by
string[] Разрезы, которые вы указали в запросе.
include_previous
boolean Значение из запроса.

Каталог рекламных метрик · Wildberries

Сырые компоненты (показы, клики, расходы, заказы) + производные (CPM, CTR, CPC, CPA, ДРР и др.) с тегом computed. Производные в ответе не приходят — запросите сырые компоненты из формулы и посчитайте сами по приложенному выражению.

Реклама · 21 метрик

Метрики рекламных кампаний: показы, клики, расходы, заказы по РК

wb_rnpadv_notes Заметки text
wb_rnpadv_views Показы РК, шт number
wb_rnpadv_clicks Клики РК, шт number
wb_rnpadv_atbs Корзина РК, шт number
wb_rnpadv_atbs_no_assoc Корзина, шт (без ассоц.) number
wb_rnpadv_atbs_assoc Корзина, шт (ассоц.) number
wb_rnpadv_orders_count Заказы РК, шт number
wb_rnpadv_orders_count_no_assoc Заказы, шт (без ассоц.) number
wb_rnpadv_orders_count_assoc Заказы, шт (ассоц.) number
wb_rnpadv_orders_sum Заказы РК, руб money
wb_rnpadv_orders_sum_no_assoc Заказы, ₽ (без ассоц.) money
wb_rnpadv_orders_sum_assoc Заказы, ₽ (ассоц.) money
wb_rnpadv_expenses Расходы, ₽ money
wb_adv_cpm Стоимость 1000 показов, ₽computed wb_adv_cpm = wb_rnpadv_expenses / wb_rnpadv_views * 1000 number
wb_adv_ctr CTR, %computed wb_adv_ctr = wb_rnpadv_clicks / wb_rnpadv_views * 100 percent
wb_adv_cpc Стоимость клика, ₽computed wb_adv_cpc = wb_rnpadv_expenses / wb_rnpadv_clicks number
wb_adv_cr_atbs Конверсия в корзину, %computed wb_adv_cr_atbs = wb_rnpadv_atbs / wb_rnpadv_clicks * 100 percent
wb_adv_cpa Стоимость корзины, ₽computed wb_adv_cpa = wb_rnpadv_expenses / wb_rnpadv_atbs number
wb_adv_cr_orders Конверсия в заказ, %computed wb_adv_cr_orders = wb_rnpadv_orders_count / wb_rnpadv_atbs * 100 percent
wb_adv_cpo Стоимость заказа, ₽computed wb_adv_cpo = wb_rnpadv_expenses / wb_rnpadv_orders_count number
wb_adv_drr ДРР, %computed wb_adv_drr = wb_rnpadv_expenses / orders_sum * 100 percent

Разрез по рекламным кампаниям

Добавьте "campaign" в group_by — и статистика придёт по каждой рекламной кампании, а не свёрнутая до артикулов. Можно комбинировать с "date" и "article".

Ответ устроен так же, как обычный (current / previous), только в разрезе кампаний. Имя, тип и статус каждой кампании — в отдельном блоке data.campaigns (он не зависит от периода):

data.campaigns
objectМетаданные кампаний: {"<ключ>": {campaign_id, yl, name, type, status}} — имя кампании, тип и статус.
data.current.totals
objectСуммарно по всем кампаниям за период.
data.current.by_campaign
objectМетрики по каждой кампании: {"<ключ>": {metric: value}}.
data.current.by_campaign_date
objectЕсли добавлен "date" — разрез кампания × дата.
data.current.by_campaign_article
objectЕсли добавлен "article" — разрез кампания × артикул.
data.previous
objectТот же срез за предыдущий период, если include_previous: true.

Ключ кампании — "<yl>:<campaign_id>" (юрлицо : id кампании), чтобы кампании разных юрлиц не сливались.

json
{
  "status": "success",
  "data": {
    "campaigns": {
      "<yl>:123456": {"campaign_id": "123456", "name": "Поиск · вешалки", "type": "ОЗК (Поиск + рекомендации)", "status": "Активная"}
    },
    "current": {
      "totals": {"wb_rnpadv_views": 1250400},
      "by_campaign": {
        "<yl>:123456": {"wb_rnpadv_views": 787123, "wb_rnpadv_clicks": 23759, "wb_rnpadv_expenses": 59601.35}
      }
    }
  },
  "meta": {"dataset": "advertising", "group_by": ["campaign"]}
}

Пример запроса

curl https://web.metriclab.ru/v1/wb/advertising \
  -H "Authorization: Bearer ml_live_xxxxxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{
    "cabinets":  ["12345"],
    "date_from": "2026-05-01",
    "date_to":   "2026-05-31",
    "metrics":   ["wb_rnpadv_views", "wb_rnpadv_clicks", "wb_rnpadv_expenses"],
    "group_by":  ["date"]
  }'
import requests

KEY  = "ml_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
HOST = "https://web.metriclab.ru"

resp = requests.post(
    f"{HOST}/v1/wb/advertising",
    headers={"Authorization": f"Bearer {KEY}"},
    json={
        "cabinets":  ["12345"],
        "date_from": "2026-05-01",
        "date_to":   "2026-05-31",
        "metrics":   ["wb_rnpadv_views", "wb_rnpadv_expenses"],
        "group_by":  ["date"],
    },
    timeout=120,
)
totals = resp.json()["data"]["current"]["totals"]
ctr = totals["wb_rnpadv_clicks"] / totals["wb_rnpadv_views"] * 100
print(f"CTR: {ctr:.2f}%")

Пример ответа · 200 OK

json
{
  "status": "success",
  "data": {
    "current": {
      "totals": {
        "wb_rnpadv_views":    1250400,
        "wb_rnpadv_clicks":   18540,
        "wb_rnpadv_expenses": 45200.50
      },
      "by_date": {
        "2026-05-01": {
          "wb_rnpadv_views":  41200,
          "wb_rnpadv_clicks": 615
        }
        /* ... */
      }
    }
  },
  "meta": {
    "marketplace":      "wb",
    "dataset":          "advertising",
    "cabinets":         1,
    "yls":              1,
    "metrics":          ["wb_rnpadv_views", "wb_rnpadv_clicks", "wb_rnpadv_expenses"],
    "group_by":         ["date"],
    "include_previous": false
  }
}

POST /v1/ozon/advertising

Рекламная статистика Ozon за период с группировкой по датам и/или артикулам: показы, клики, добавления в корзину, заказы (в шт. и руб.), расходы. Все data-метрики аддитивны — суммируются по любому разрезу.

POST https://web.metriclab.ru/v1/ozon/advertising
Рекомендации и частые ошибки
  • Тело запроса и формат ответа — как у /metrics, но метрики рекламные (ozon_rnpadv_*).
  • Производные (CPM, CTR, CPC, CPA, ДРР) API не возвращает. Запросите сырьё — показы, клики, расходы, заказы — и посчитайте сами по формуле из каталога.
  • «Ассоциированные» заказы (покупка после показа, без клика по объявлению): базовая метрика их включает. Нужны только прямые конверсии — берите версии с суффиксом _no_assoc.
  • Нужна разбивка по рекламным кампаниям — добавьте "campaign" в group_by. Тогда форма ответа другая: блок data.campaigns (имя/тип/статус) + data.current.by_campaign (метрики по кампании). См. раздел «Разрез по рекламным кампаниям» ниже.
  • Лимиты: 3 запроса/мин на метод и 60/мин суммарно; при 429 — ждите Retry-After.

Тело запроса

cabinets required
string[] Массив client_id кабинетов. Вместо идентификатора можно указать название кабинета — то, что отдаёт GET /v1/cabinets в поле name (регистр не важен). Кабинет должен принадлежать владельцу API-ключа (получите доступные через GET /v1/cabinets). Пустой массив [] — взять все доступные пользователю.
date_from required
string Начало периода, формат YYYY-MM-DD. Включительно.
date_to required
string Конец периода, YYYY-MM-DD. Включительно.
metrics required
string[] Названия метрик из каталога ниже. Берите те, что без пометки computed — метрики с такой пометкой API не считает, их вы получаете сами по формуле (она указана рядом в каталоге).
group_by
string[] Разрезы ответа. Допустимые значения: "date", "article", "campaign". По умолчанию [] — только итоги (totals). Можно комбинировать. Разрез "campaign" отдаёт статистику по каждой рекламной кампании — см. ниже.
include_previous
boolean Если true — в ответе появится data.previous для сравнения с прошлым периодом. Сам период задайте полями date_from_previous и date_to_previous. По умолчанию false.
date_from_previous
string Начало периода для сравнения, YYYY-MM-DD. Нужно вместе с include_previous: true.
date_to_previous
string Конец периода для сравнения, YYYY-MM-DD.
filters
object Дополнительные фильтры на товары. Все вложенные поля — массивы строк, пустой массив = без ограничения.
skus
string[] SKU Ozon в виде строк.
brands
string[] Имена брендов.
subjects
string[] Имена предметов/категорий.
article_suppliers
string[] Артикулы поставщика — внутренние коды клиента в карточках товаров.
grouping_level_1
string[] Имена группировки уровня 1 (создаются в MetricLab вручную).
grouping_level_2
string[] Имена группировки уровня 2.
grouping_level_3
string[] Имена группировки уровня 3.
group_name
string[] Имена групп товаров.
responsible
string[] Имена ответственных за товары.

Структура ответа

status
string Всегда "success" при HTTP 200. При ошибке — "error" и поле error.
data
object Контейнер со срезами статистики: current (всегда) и опционально previous.
current
object Данные за основной период (date_from … date_to).
totals
{metric: number} Всегда присутствует. Итоги по всем запрошенным метрикам за период.
by_date
{date: {metric: number}} Появляется, если в group_by есть "date". Ключ — дата YYYY-MM-DD.
by_article
{article_key: {metric: number}} Появляется, если в group_by есть "article". Ключ строки — "кабинет:sku". Кабинет в начале — чтобы одинаковые SKU из разных кабинетов не склеились; название кабинета то же, что в GET /v1/cabinets.
by_article_date
{article_key: {date: {metric: number}}} Появляется, если в group_by есть и "date", и "article". Разрез артикул × дата.
previous
object Появляется только при include_previous: true. Структура идентична current — те же totals / by_date / by_article / by_article_date за предыдущий период.
meta
object Служебная информация о запросе: что спросили и сколько кабинетов/юрлиц вошло в ответ.
marketplace
string "ozon".
dataset
string "advertising".
cabinets
number Сколько кабинетов вошло в запрос (только доступные вам).
yls
number Сколько юрлиц затронул запрос. Одно юрлицо может объединять несколько кабинетов.
metrics
string[] Метрики, которые вы запросили.
group_by
string[] Разрезы, которые вы указали в запросе.
include_previous
boolean Значение из запроса.

Каталог рекламных метрик · Ozon

Сырые компоненты (показы, клики, расходы, заказы) + производные (CPM, CTR, CPC, CPA, ДРР и др.) с тегом computed. Производные в ответе не приходят — запросите сырые компоненты из формулы и посчитайте сами по приложенному выражению.

Реклама · 16 метрик

Метрики рекламных кампаний: показы, клики, расходы, заказы по РК

ozon_rnpadv_notes Заметки text
ozon_rnpadv_views Показы, шт number
ozon_rnpadv_clicks Клики, шт number
ozon_rnpadv_orders_count Заказы, шт number
ozon_rnpadv_orders_count_no_assoc Заказы, шт (без ассоц.) number
ozon_rnpadv_orders_count_assoc Заказы, шт (ассоц.) number
ozon_rnpadv_orders_sum Заказы, ₽ money
ozon_rnpadv_orders_sum_no_assoc Заказы, ₽ (без ассоц.) money
ozon_rnpadv_orders_sum_assoc Заказы, ₽ (ассоц.) money
ozon_rnpadv_expenses Расходы, ₽ money
ozon_adv_cpm Стоимость 1000 показов, ₽computed ozon_adv_cpm = ozon_rnpadv_expenses / ozon_rnpadv_views * 1000 number
ozon_adv_ctr CTR, %computed ozon_adv_ctr = ozon_rnpadv_clicks / ozon_rnpadv_views * 100 percent
ozon_adv_cpc Стоимость клика, ₽computed ozon_adv_cpc = ozon_rnpadv_expenses / ozon_rnpadv_clicks number
ozon_adv_cr_orders Конверсия в заказ, %computed ozon_adv_cr_orders = ozon_rnpadv_orders_count / ozon_rnpadv_clicks * 100 percent
ozon_adv_cpo Стоимость заказа, ₽computed ozon_adv_cpo = ozon_rnpadv_expenses / ozon_rnpadv_orders_count number
ozon_adv_drr ДРР, %computed ozon_adv_drr = ozon_rnpadv_expenses / orders_sum * 100 percent

Разрез по рекламным кампаниям

Добавьте "campaign" в group_by — и статистика придёт по каждой рекламной кампании, а не свёрнутая до артикулов. Можно комбинировать с "date" и "article".

Ответ устроен так же, как обычный (current / previous), только в разрезе кампаний. Имя, тип и статус каждой кампании — в отдельном блоке data.campaigns (он не зависит от периода):

data.campaigns
objectМетаданные кампаний: {"<ключ>": {campaign_id, yl, name, type, status}} — имя кампании, тип и статус.
data.current.totals
objectСуммарно по всем кампаниям за период.
data.current.by_campaign
objectМетрики по каждой кампании: {"<ключ>": {metric: value}}.
data.current.by_campaign_date
objectЕсли добавлен "date" — разрез кампания × дата.
data.current.by_campaign_article
objectЕсли добавлен "article" — разрез кампания × артикул.
data.previous
objectТот же срез за предыдущий период, если include_previous: true.

Ключ кампании — "<yl>:<campaign_id>" (юрлицо : id кампании), чтобы кампании разных юрлиц не сливались.

json
{
  "status": "success",
  "data": {
    "campaigns": {
      "<yl>:123456": {"campaign_id": "123456", "name": "Поиск · вешалки", "type": "ОЗК (Поиск + рекомендации)", "status": "Активная"}
    },
    "current": {
      "totals": {"ozon_rnpadv_views": 1250400},
      "by_campaign": {
        "<yl>:123456": {"ozon_rnpadv_views": 787123, "ozon_rnpadv_clicks": 23759, "ozon_rnpadv_expenses": 59601.35}
      }
    }
  },
  "meta": {"dataset": "advertising", "group_by": ["campaign"]}
}

Пример запроса

curl https://web.metriclab.ru/v1/ozon/advertising \
  -H "Authorization: Bearer ml_live_xxxxxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{
    "cabinets":  ["67890"],
    "date_from": "2026-05-01",
    "date_to":   "2026-05-31",
    "metrics":   ["ozon_rnpadv_views", "ozon_rnpadv_clicks", "ozon_rnpadv_expenses"],
    "group_by":  ["date"]
  }'
import requests

KEY  = "ml_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
HOST = "https://web.metriclab.ru"

resp = requests.post(
    f"{HOST}/v1/ozon/advertising",
    headers={"Authorization": f"Bearer {KEY}"},
    json={
        "cabinets":  ["67890"],
        "date_from": "2026-05-01",
        "date_to":   "2026-05-31",
        "metrics":   ["ozon_rnpadv_views", "ozon_rnpadv_expenses"],
        "group_by":  ["date"],
    },
    timeout=120,
)
totals = resp.json()["data"]["current"]["totals"]
ctr = totals["ozon_rnpadv_clicks"] / totals["ozon_rnpadv_views"] * 100
print(f"CTR: {ctr:.2f}%")

Пример ответа · 200 OK

json
{
  "status": "success",
  "data": {
    "current": {
      "totals": {
        "ozon_rnpadv_views":    1250400,
        "ozon_rnpadv_clicks":   18540,
        "ozon_rnpadv_expenses": 45200.50
      },
      "by_date": {
        "2026-05-01": {
          "ozon_rnpadv_views":  41200,
          "ozon_rnpadv_clicks": 615
        }
        /* ... */
      }
    }
  },
  "meta": {
    "marketplace":      "ozon",
    "dataset":          "advertising",
    "cabinets":         1,
    "yls":              1,
    "metrics":          ["ozon_rnpadv_views", "ozon_rnpadv_clicks", "ozon_rnpadv_expenses"],
    "group_by":         ["date"],
    "include_previous": false
  }
}

POST /v1/yandex/advertising

Рекламная статистика Яндекс Маркет за период с группировкой по датам и/или артикулам: показы, клики, добавления в корзину, заказы (в шт. и руб.), расходы. Все data-метрики аддитивны — суммируются по любому разрезу.

POST https://web.metriclab.ru/v1/yandex/advertising
Рекомендации и частые ошибки
  • Тело запроса и формат ответа — как у /metrics, но метрики рекламные (yandex_rnpadv_*).
  • Производные (CPM, CTR, CPC, CPA, ДРР) API не возвращает. Запросите сырьё — показы, клики, расходы, заказы — и посчитайте сами по формуле из каталога.
  • «Ассоциированные» заказы (покупка после показа, без клика по объявлению): базовая метрика их включает. Нужны только прямые конверсии — берите версии с суффиксом _no_assoc.
  • Нужна разбивка по рекламным кампаниям — добавьте "campaign" в group_by. Тогда форма ответа другая: блок data.campaigns (имя/тип/статус) + data.current.by_campaign (метрики по кампании). См. раздел «Разрез по рекламным кампаниям» ниже.
  • Лимиты: 3 запроса/мин на метод и 60/мин суммарно; при 429 — ждите Retry-After.

Тело запроса

cabinets required
string[] Массив business_id кабинетов. Вместо идентификатора можно указать название кабинета — то, что отдаёт GET /v1/cabinets в поле name (регистр не важен). Кабинет должен принадлежать владельцу API-ключа (получите доступные через GET /v1/cabinets). Пустой массив [] — взять все доступные пользователю.
date_from required
string Начало периода, формат YYYY-MM-DD. Включительно.
date_to required
string Конец периода, YYYY-MM-DD. Включительно.
metrics required
string[] Названия метрик из каталога ниже. Берите те, что без пометки computed — метрики с такой пометкой API не считает, их вы получаете сами по формуле (она указана рядом в каталоге).
group_by
string[] Разрезы ответа. Допустимые значения: "date", "article", "campaign". По умолчанию [] — только итоги (totals). Можно комбинировать. Разрез "campaign" отдаёт статистику по каждой рекламной кампании — см. ниже.
include_previous
boolean Если true — в ответе появится data.previous для сравнения с прошлым периодом. Сам период задайте полями date_from_previous и date_to_previous. По умолчанию false.
date_from_previous
string Начало периода для сравнения, YYYY-MM-DD. Нужно вместе с include_previous: true.
date_to_previous
string Конец периода для сравнения, YYYY-MM-DD.
filters
object Дополнительные фильтры на товары. Все вложенные поля — массивы строк, пустой массив = без ограничения.
articles
string[] Артикулы продавца (offer_id, SKU магазина) в виде строк.
brands
string[] Имена брендов.
subjects
string[] Имена предметов/категорий.
article_suppliers
string[] Артикулы поставщика — внутренние коды клиента в карточках товаров.
grouping_level_1
string[] Имена группировки уровня 1 (создаются в MetricLab вручную).
grouping_level_2
string[] Имена группировки уровня 2.
grouping_level_3
string[] Имена группировки уровня 3.
group_name
string[] Имена групп товаров.
responsible
string[] Имена ответственных за товары.

Структура ответа

status
string Всегда "success" при HTTP 200. При ошибке — "error" и поле error.
data
object Контейнер со срезами статистики: current (всегда) и опционально previous.
current
object Данные за основной период (date_from … date_to).
totals
{metric: number} Всегда присутствует. Итоги по всем запрошенным метрикам за период.
by_date
{date: {metric: number}} Появляется, если в group_by есть "date". Ключ — дата YYYY-MM-DD.
by_article
{article_key: {metric: number}} Появляется, если в group_by есть "article". Ключ строки — "кабинет:артикул". Кабинет в начале — чтобы одинаковые артикулы из разных кабинетов не склеились; название кабинета то же, что в GET /v1/cabinets.
by_article_date
{article_key: {date: {metric: number}}} Появляется, если в group_by есть и "date", и "article". Разрез артикул × дата.
previous
object Появляется только при include_previous: true. Структура идентична current — те же totals / by_date / by_article / by_article_date за предыдущий период.
meta
object Служебная информация о запросе: что спросили и сколько кабинетов/юрлиц вошло в ответ.
marketplace
string "yandex".
dataset
string "advertising".
cabinets
number Сколько кабинетов вошло в запрос (только доступные вам).
yls
number Сколько юрлиц затронул запрос. Одно юрлицо может объединять несколько кабинетов.
metrics
string[] Метрики, которые вы запросили.
group_by
string[] Разрезы, которые вы указали в запросе.
include_previous
boolean Значение из запроса.

Каталог рекламных метрик · Яндекс Маркет

Сырые компоненты (показы, клики, расходы, заказы) + производные (CPM, CTR, CPC, CPA, ДРР и др.) с тегом computed. Производные в ответе не приходят — запросите сырые компоненты из формулы и посчитайте сами по приложенному выражению.

Реклама · 18 метрик

Метрики рекламных кампаний: показы, клики, расходы, заказы по РК

yandex_rnpadv_notes Заметки text
yandex_rnpadv_views Показы РК, шт number
yandex_rnpadv_clicks Клики РК, шт number
yandex_rnpadv_atbs Корзина РК, шт number
yandex_rnpadv_orders_count Заказы РК, шт number
yandex_rnpadv_sales_count Доставлено РК, шт number
yandex_rnpadv_orders_sum Заказы РК, руб money
yandex_rnpadv_sales_sum Выручка с бустом, руб money
yandex_rnpadv_expenses Расходы, ₽ money
yandex_rnpadv_bonus Оплачено бонусами, ₽ money
yandex_adv_cpm Стоимость 1000 показов, ₽computed yandex_adv_cpm = yandex_rnpadv_expenses / yandex_rnpadv_views * 1000 number
yandex_adv_ctr CTR, %computed yandex_adv_ctr = yandex_rnpadv_clicks / yandex_rnpadv_views * 100 percent
yandex_adv_cpc Стоимость клика, ₽computed yandex_adv_cpc = yandex_rnpadv_expenses / yandex_rnpadv_clicks number
yandex_adv_cr_atbs Конверсия в корзину, %computed yandex_adv_cr_atbs = yandex_rnpadv_atbs / yandex_rnpadv_clicks * 100 percent
yandex_adv_cpa Стоимость корзины, ₽computed yandex_adv_cpa = yandex_rnpadv_expenses / yandex_rnpadv_atbs number
yandex_adv_cr_orders Конверсия в заказ, %computed yandex_adv_cr_orders = yandex_rnpadv_orders_count / yandex_rnpadv_atbs * 100 percent
yandex_adv_cpo Стоимость заказа, ₽computed yandex_adv_cpo = yandex_rnpadv_expenses / yandex_rnpadv_orders_count number
yandex_adv_drr ДРР, %computed yandex_adv_drr = yandex_rnpadv_expenses / (yandex_rnpadv_orders_sum + yandex_rnpadv_sales_sum) * 100 percent

Разрез по рекламным кампаниям

Добавьте "campaign" в group_by — и статистика придёт по каждой рекламной кампании, а не свёрнутая до артикулов. Можно комбинировать с "date" и "article".

Ответ устроен так же, как обычный (current / previous), только в разрезе кампаний. Имя, тип и статус каждой кампании — в отдельном блоке data.campaigns (он не зависит от периода):

data.campaigns
objectМетаданные кампаний: {"<ключ>": {campaign_id, yl, name, type, status}} — имя кампании, тип и статус.
data.current.totals
objectСуммарно по всем кампаниям за период.
data.current.by_campaign
objectМетрики по каждой кампании: {"<ключ>": {metric: value}}.
data.current.by_campaign_date
objectЕсли добавлен "date" — разрез кампания × дата.
data.current.by_campaign_article
objectЕсли добавлен "article" — разрез кампания × артикул.
data.previous
objectТот же срез за предыдущий период, если include_previous: true.

Ключ кампании — "<yl>:<campaign_id>" (юрлицо : id кампании), чтобы кампании разных юрлиц не сливались.

json
{
  "status": "success",
  "data": {
    "campaigns": {
      "<yl>:123456": {"campaign_id": "123456", "name": "Поиск · вешалки", "type": "ОЗК (Поиск + рекомендации)", "status": "Активная"}
    },
    "current": {
      "totals": {"yandex_rnpadv_views": 1250400},
      "by_campaign": {
        "<yl>:123456": {"yandex_rnpadv_views": 787123, "yandex_rnpadv_clicks": 23759, "yandex_rnpadv_expenses": 59601.35}
      }
    }
  },
  "meta": {"dataset": "advertising", "group_by": ["campaign"]}
}

Пример запроса

curl https://web.metriclab.ru/v1/yandex/advertising \
  -H "Authorization: Bearer ml_live_xxxxxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{
    "cabinets":  ["11223344"],
    "date_from": "2026-05-01",
    "date_to":   "2026-05-31",
    "metrics":   ["yandex_rnpadv_views", "yandex_rnpadv_clicks", "yandex_rnpadv_expenses"],
    "group_by":  ["date"]
  }'
import requests

KEY  = "ml_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
HOST = "https://web.metriclab.ru"

resp = requests.post(
    f"{HOST}/v1/yandex/advertising",
    headers={"Authorization": f"Bearer {KEY}"},
    json={
        "cabinets":  ["11223344"],
        "date_from": "2026-05-01",
        "date_to":   "2026-05-31",
        "metrics":   ["yandex_rnpadv_views", "yandex_rnpadv_expenses"],
        "group_by":  ["date"],
    },
    timeout=120,
)
totals = resp.json()["data"]["current"]["totals"]
ctr = totals["yandex_rnpadv_clicks"] / totals["yandex_rnpadv_views"] * 100
print(f"CTR: {ctr:.2f}%")

Пример ответа · 200 OK

json
{
  "status": "success",
  "data": {
    "current": {
      "totals": {
        "yandex_rnpadv_views":    1250400,
        "yandex_rnpadv_clicks":   18540,
        "yandex_rnpadv_expenses": 45200.50
      },
      "by_date": {
        "2026-05-01": {
          "yandex_rnpadv_views":  41200,
          "yandex_rnpadv_clicks": 615
        }
        /* ... */
      }
    }
  },
  "meta": {
    "marketplace":      "yandex",
    "dataset":          "advertising",
    "cabinets":         1,
    "yls":              1,
    "metrics":          ["yandex_rnpadv_views", "yandex_rnpadv_clicks", "yandex_rnpadv_expenses"],
    "group_by":         ["date"],
    "include_previous": false
  }
}

POST /v1/wb/supplies

Расчёт потребности в поставках — та же методика, что у виджета «Расчёт поставок» на сайте. Для каждого артикула и размера в разрезе по федеральным округам считаются потребность, текущий остаток, среднесуточные продажи и заказы, прогноз выкупов и оборачиваемость.

Формула потребности по каждой ячейке (товар × округ):
raw = среднесуточное × (planning_days + lead_time) × (1 + demand_growth_percent)
demand = округление(raw − остаток до кратности поставки), не меньше 0. Что берётся за «среднесуточное» — определяет calc_method.

POST https://web.metriclab.ru/v1/wb/supplies
Рекомендации и частые ошибки
  • Это расчёт, а не сырая статистика. Метод возвращает рекомендованную потребность к поставке по каждому товару и федеральному округу — те же цифры, что виджет «Расчёт поставок» на сайте при тех же настройках.
  • date_from/date_to — период, по которому считаются среднесуточные продажи/заказы (например, последние 30 дней). Будущее обрезается до сегодня.
  • Товары отсортированы по убыванию потребности. limit = «топ-N к довозу», по умолчанию и максимум 5000; если товаров больше — листайте через offset (полное число — в data.total).
  • lead_time применяется ко всем округам сразу; переопределить для конкретного — через cluster_settings.
  • Параметры (planning_days, calc_method и др.) по умолчанию совпадают с виджетом. Чтобы сверить вывод — выставьте на сайте те же значения и тот же период.
  • Метод тяжелее остальных: лимит 5 запросов/мин. На большом ассортименте ответ крупный — пользуйтесь limit.

Тело запроса

cabinetsrequired
string[] Массив supplier_id кабинетов. Должны принадлежать владельцу ключа (GET /v1/cabinets). Пустой массив [] — все доступные.
date_fromrequired
string Начало периода YYYY-MM-DD — за него считаются среднесуточные продажи/заказы. Включительно.
date_torequired
string Конец периода YYYY-MM-DD. Включительно. Будущие даты усекаются до сегодня.
planning_days
integer Глубина планирования в днях — на сколько вперёд считаем потребность. По умолчанию 30.
lead_time
integer Плечо доставки в днях — добавляется к глубине планирования. Применяется ко всем округам. По умолчанию 0.
calc_method
string Что считать спросом: "sales" — выкупы (по умолчанию), "orders" — заказы, "ordersBuyout" — заказы × % выкупа.
demand_growth_percent
number Прирост спроса долей: 0.5 = +50%. По умолчанию 0.
rounding_multiple
integer Кратность поставки — итоговая потребность округляется до кратной этому числу. Минимум 1 (по умолчанию).
round_up_only
boolean true — округлять кратность только вверх; false — математическое округление (по умолчанию).
buyout_days
integer Окно (дней) для расчёта % выкупа, используемого в ordersBuyout и прогнозе выкупов. По умолчанию 45.
clusters
string[] Список федеральных округов для расчёта (например ["Центральный"]). Пусто — все известные.
cluster_settings
object Переопределение плеча доставки на конкретный округ (перебивает общий lead_time).
<cluster>.leadTime
integer Плечо доставки в днях для этого округа. Пример: {"Центральный": {"leadTime": 14}}.
limit
integer Сколько товаров вернуть за запрос. Максимум и значение по умолчанию — 5000 (если не передан или больше — берётся 5000). Товары отсортированы по убыванию потребности, поэтому это «топ-N к довозу». Всего товаров в расчёте — в data.total; если их больше 5000, забирайте страницами через offset.
offset
integer Смещение для постраничной выборки. По умолчанию 0. Например offset: 5000 — вторая страница (товары 5001–10000).
filters
object Фильтры на товары — те же, что у /v1/wb/metrics (articles, brands, subjects, article_suppliers, grouping_level_1..3, group_name, responsible).

Структура ответа

status
string"success" при 200.
data
objectРезультат расчёта.
clusters
string[]Федеральные округа, по которым посчитан разрез (ключи в объектах ниже).
stock_date
stringДата актуальности остатков YYYY-MM-DD.
days_in_period
integerЧисло дней в периоде (для среднесуточных).
total
integerВсего товаров в расчёте (до применения limit/offset). В products приходит срез согласно пагинации.
products
object[]Строка на артикул+размер. Объекты demand/stock/... имеют ключами округа.
article
stringАртикул WB (nm_id).
size
stringРазмер ("0" — без размера).
article_supplier
stringАртикул поставщика.
name
stringНазвание товара.
brand
stringБренд.
subject
stringПредмет.
redemption_percent
number | null% выкупа долей. null — нет данных.
demand
objectПотребность в поставке, шт. {"Центральный": 120}.
stock
objectТекущий остаток, шт. (по округам).
daily_sales
objectСреднесуточные выкупы, шт./день.
orders
objectСреднесуточные заказы, шт./день.
predicted_buyouts
objectПрогноз выкупов (заказы × % выкупа), шт./день. Значение null, если нет % выкупа.
turnover_orders
numberНа сколько дней хватит остатка по заказам.
turnover_sales
numberНа сколько дней хватит остатка по выкупам.
demand_total
integerСумма потребности по всем округам.
stock_total
integerСумма остатка по всем округам.
meta
objectЭхо применённых параметров: marketplace, calc_method, planning_days, lead_time, rounding_multiple, clusters, products и др.

Пример запроса

curl https://web.metriclab.ru/v1/wb/supplies \
  -H "Authorization: Bearer ml_live_xxxxxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{
    "cabinets":      ["12345"],
    "date_from":     "2026-05-01",
    "date_to":       "2026-05-31",
    "planning_days": 30,
    "lead_time":     7,
    "calc_method":   "sales",
    "limit":         200
  }'
import requests

KEY  = "ml_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
HOST = "https://web.metriclab.ru"

resp = requests.post(
    f"{HOST}/v1/wb/supplies",
    headers={"Authorization": f"Bearer {KEY}"},
    json={
        "cabinets":      ["12345"],
        "date_from":     "2026-05-01",
        "date_to":       "2026-05-31",
        "planning_days": 30,
        "lead_time":     7,
        "calc_method":   "sales",
        "limit":         200,
    },
    timeout=120,
)
products = resp.json()["data"]["products"]
for p in products[:5]:
    print(p["article"], p["demand_total"])

Пример ответа · 200 OK

{
  "status": "success",
  "data": {
    "clusters": ["Центральный"],
    "stock_date": "2026-05-31",
    "days_in_period": 31,
    "total": 412,
    "products": [
      {
        "article": "176003726", "size": "0",
        "article_supplier": "ART-001",
        "name": "Товар-пример", "brand": "BrandX",
        "redemption_percent": 0.82,
        "demand": {"Центральный": 120},
        "stock": {"Центральный": 35},
        "daily_sales": {"Центральный": 5.16},
        "turnover_sales": 6.8,
        "demand_total": 120, "stock_total": 35
      }
    ]
  },
  "meta": {"marketplace": "wb", "dataset": "supplies", "calc_method": "sales", "products": 412}
}

POST /v1/ozon/supplies

Расчёт потребности в поставках — та же методика, что у виджета «Расчёт поставок» на сайте. Для каждого SKU в разрезе по кластерам Ozon считаются потребность, текущий остаток, среднесуточные продажи и заказы, прогноз выкупов и оборачиваемость.

Формула потребности по каждой ячейке (товар × кластер):
raw = среднесуточное × (planning_days + lead_time) × (1 + demand_growth_percent)
demand = округление(raw − остаток до кратности поставки), не меньше 0. Что берётся за «среднесуточное» — определяет calc_method.

POST https://web.metriclab.ru/v1/ozon/supplies
Рекомендации и частые ошибки
  • Это расчёт, а не сырая статистика. Метод возвращает рекомендованную потребность к поставке по каждому товару и кластеру Ozon — те же цифры, что виджет «Расчёт поставок» на сайте при тех же настройках.
  • date_from/date_to — период, по которому считаются среднесуточные продажи/заказы (например, последние 30 дней). Будущее обрезается до сегодня.
  • Товары отсортированы по убыванию потребности. limit = «топ-N к довозу», по умолчанию и максимум 5000; если товаров больше — листайте через offset (полное число — в data.total).
  • lead_time применяется ко всем кластерам сразу; переопределить для конкретного — через cluster_settings.
  • Параметры (planning_days, calc_method и др.) по умолчанию совпадают с виджетом. Чтобы сверить вывод — выставьте на сайте те же значения и тот же период.
  • Метод тяжелее остальных: лимит 5 запросов/мин. На большом ассортименте ответ крупный — пользуйтесь limit.

Тело запроса

cabinetsrequired
string[] Массив client_id кабинетов. Должны принадлежать владельцу ключа (GET /v1/cabinets). Пустой массив [] — все доступные.
date_fromrequired
string Начало периода YYYY-MM-DD — за него считаются среднесуточные продажи/заказы. Включительно.
date_torequired
string Конец периода YYYY-MM-DD. Включительно. Будущие даты усекаются до сегодня.
planning_days
integer Глубина планирования в днях — на сколько вперёд считаем потребность. По умолчанию 30.
lead_time
integer Плечо доставки в днях — добавляется к глубине планирования. Применяется ко всем кластерам. По умолчанию 0.
calc_method
string Что считать спросом: "sales" — продажи (по умолчанию), "orders" — заказы, "ordersBuyout" — заказы × % выкупа.
demand_growth_percent
number Прирост спроса долей: 0.5 = +50%. По умолчанию 0.
rounding_multiple
integer Кратность поставки — итоговая потребность округляется до кратной этому числу. Минимум 1 (по умолчанию).
round_up_only
boolean true — округлять кратность только вверх; false — математическое округление (по умолчанию).
buyout_days
integer Окно (дней) для расчёта % выкупа, используемого в ordersBuyout и прогнозе выкупов. По умолчанию 45.
clusters
string[] Список кластеров Ozon для расчёта (например ["Москва, МО и Дальние регионы"]). Пусто — все известные.
cluster_settings
object Переопределение плеча доставки на конкретный кластер (перебивает общий lead_time).
<cluster>.leadTime
integer Плечо доставки в днях для этого кластера. Пример: {"Воронеж": {"leadTime": 14}}.
limit
integer Сколько товаров вернуть за запрос. Максимум и значение по умолчанию — 5000 (если не передан или больше — берётся 5000). Товары отсортированы по убыванию потребности, поэтому это «топ-N к довозу». Всего товаров в расчёте — в data.total; если их больше 5000, забирайте страницами через offset.
offset
integer Смещение для постраничной выборки. По умолчанию 0. Например offset: 5000 — вторая страница (товары 5001–10000).
filters
object Фильтры на товары — те же, что у /v1/ozon/metrics (skus, brands, subjects, article_suppliers, grouping_level_1..3, group_name, responsible).

Структура ответа

status
string"success" при 200.
data
objectРезультат расчёта.
clusters
string[]Кластеры Ozon, по которым посчитан разрез (ключи в объектах ниже).
stock_date
stringДата актуальности остатков YYYY-MM-DD.
days_in_period
integerЧисло дней в периоде (для среднесуточных).
total
integerВсего товаров в расчёте (до применения limit/offset). В products приходит срез согласно пагинации.
products
object[]Строка на SKU. Объекты demand/stock/... имеют ключами кластеры.
sku
stringSKU Ozon.
article_supplier
stringАртикул продавца (offer_id).
name
stringНазвание товара.
brand
stringБренд.
category
stringКоммерческая категория.
redemption_percent
number | null% выкупа долей. null — нет данных.
demand
objectПотребность в поставке, шт. {"Воронеж": 120}.
stock
objectТекущий остаток, шт. (по кластерам).
daily_sales
objectСреднесуточные продажи, шт./день.
orders
objectСреднесуточные заказы, шт./день.
predicted_buyouts
objectПрогноз выкупов (заказы × % выкупа), шт./день. Значение null, если нет % выкупа.
turnover_orders
numberНа сколько дней хватит остатка по заказам.
turnover_sales
numberНа сколько дней хватит остатка по продажам.
demand_total
integerСумма потребности по всем кластерам.
stock_total
integerСумма остатка по всем кластерам.
meta
objectЭхо применённых параметров: marketplace, calc_method, planning_days, lead_time, rounding_multiple, clusters, products и др.

Пример запроса

curl https://web.metriclab.ru/v1/ozon/supplies \
  -H "Authorization: Bearer ml_live_xxxxxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{
    "cabinets":      ["67890"],
    "date_from":     "2026-05-01",
    "date_to":       "2026-05-31",
    "planning_days": 30,
    "lead_time":     7,
    "calc_method":   "sales",
    "limit":         200
  }'
import requests

KEY  = "ml_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
HOST = "https://web.metriclab.ru"

resp = requests.post(
    f"{HOST}/v1/ozon/supplies",
    headers={"Authorization": f"Bearer {KEY}"},
    json={
        "cabinets":      ["67890"],
        "date_from":     "2026-05-01",
        "date_to":       "2026-05-31",
        "planning_days": 30,
        "lead_time":     7,
        "calc_method":   "sales",
        "limit":         200,
    },
    timeout=120,
)
products = resp.json()["data"]["products"]
for p in products[:5]:
    print(p["sku"], p["demand_total"])

Пример ответа · 200 OK

{
  "status": "success",
  "data": {
    "clusters": ["Москва, МО и Дальние регионы"],
    "stock_date": "2026-05-31",
    "days_in_period": 31,
    "total": 412,
    "products": [
      {
        "sku": "1612345678",
        "article_supplier": "ART-001",
        "name": "Товар-пример", "brand": "BrandX",
        "redemption_percent": 0.82,
        "demand": {"Москва, МО и Дальние регионы": 120},
        "stock": {"Москва, МО и Дальние регионы": 35},
        "daily_sales": {"Москва, МО и Дальние регионы": 5.16},
        "turnover_sales": 6.8,
        "demand_total": 120, "stock_total": 35
      }
    ]
  },
  "meta": {"marketplace": "ozon", "dataset": "supplies", "calc_method": "sales", "products": 412}
}

POST /v1/wb/stocks

Остатки товаров по складам, построчно в разрезе товар × склад × дата. По умолчанию FBO (склады Wildberries); параметром type можно запросить FBS (склады продавца) или оба сразу. Для каждой строки: характеристики товара, склад, остаток в штуках, себестоимость и цена единицы, а также стоимость всего остатка.

POST https://web.metriclab.ru/v1/wb/stocks
Рекомендации и частые ошибки
  • type = "fbo" (по умолчанию) — остатки на складах WB; "fbs" — склады продавца; "both" — и то, и то (в строках поле type = FBO/FBS).
  • Период. date_from/date_to задают диапазон дат. Если обе не переданы — вернутся остатки за всё время.
  • Себестоимость и цена единицы — актуальные (последние известные), а не на конкретную историческую дату. stock_cost = quantity × unit_cost, stock_price = quantity × unit_price. Если себес/цена неизвестны — null.
  • Пагинация. limit (по умолчанию 50000, максимум 100000) и offset. Лимит применяется на каждый кабинет: для сквозной постраничной выгрузки запрашивайте по одному cabinets.
  • Метод тяжелее обычной статистики (десятки складов × даты): лимит 5 запросов/мин. За «всё время» на большом ассортименте выгружайте постранично.

Тело запроса

cabinetsrequired
string[] Массив supplier_id кабинетов. Должны принадлежать владельцу ключа (GET /v1/cabinets). Пустой массив [] — все доступные.
type
string "fbo" (по умолчанию), "fbs" или "both".
date_from
string Начало периода YYYY-MM-DD, включительно. Не передавать вместе с date_to → за всё время.
date_to
string Конец периода YYYY-MM-DD, включительно.
filters
object Фильтры по товарам (бренды, предметы, группировки и т.п.) — те же, что в виджетах.
limit
integer Размер страницы. По умолчанию 50000, максимум 100000.
offset
integer Смещение для пагинации. Применяется на каждый кабинет.

Ответ

Строки — в data.rows[]. Поля каждой строки:

cabinet
stringЮрлицо кабинета.
type
stringFBO или FBS.
date
stringДата остатка YYYY-MM-DD.
article
integerАртикул WB (nmID).
barcode
stringБаркод.
size
stringРазмер.
name / brand / subject / supplier_article
stringНаименование, бренд, предмет, артикул поставщика.
warehouse
stringНазвание склада.
warehouse_id
integerID склада (у складов WB FBO может быть null).
quantity
integerОстаток, шт.
unit_cost
numberСебестоимость единицы (актуальная).
stock_cost
numberСебестоимость остатка = quantity × unit_cost.
unit_price
numberЦена единицы (актуальная).
stock_price
numberЦена остатка = quantity × unit_price.

Пример

curl https://web.metriclab.ru/v1/wb/stocks \
  -H "Authorization: Bearer ml_live_..." \
  -H "Content-Type: application/json" \
  -d '{"cabinets": ["12345"], "type": "both", "date_from": "2026-08-01", "date_to": "2026-08-05"}'

POST /v1/ozon/stocks

Остатки товаров по складам, построчно в разрезе товар × склад × дата. По умолчанию FBO (склады Ozon); параметром type можно запросить FBS (склады продавца) или оба сразу. Для каждой строки: характеристики товара, склад, остаток в штуках, себестоимость и цена единицы, а также стоимость всего остатка.

POST https://web.metriclab.ru/v1/ozon/stocks
Рекомендации и частые ошибки
  • type = "fbo" (по умолчанию) — остатки на складах Ozon; "fbs" — склады продавца; "both" — и то, и то (в строках поле type = FBO/FBS).
  • Период. date_from/date_to задают диапазон дат. Если обе не переданы — вернутся остатки за всё время.
  • Себестоимость и цена единицы — актуальные (последние известные), а не на конкретную историческую дату. stock_cost = quantity × unit_cost, stock_price = quantity × unit_price. Если себес/цена неизвестны — null.
  • Пагинация. limit (по умолчанию 50000, максимум 100000) и offset. Лимит применяется на каждый кабинет: для сквозной постраничной выгрузки запрашивайте по одному cabinets.
  • Метод тяжелее обычной статистики (десятки складов × даты): лимит 5 запросов/мин. За «всё время» на большом ассортименте выгружайте постранично.

Тело запроса

cabinetsrequired
string[] Массив client_id кабинетов. Должны принадлежать владельцу ключа (GET /v1/cabinets). Пустой массив [] — все доступные.
type
string "fbo" (по умолчанию), "fbs" или "both".
date_from
string Начало периода YYYY-MM-DD, включительно. Не передавать вместе с date_to → за всё время.
date_to
string Конец периода YYYY-MM-DD, включительно.
filters
object Фильтры по товарам (бренды, категории, группировки и т.п.) — те же, что в виджетах.
limit
integer Размер страницы. По умолчанию 50000, максимум 100000.
offset
integer Смещение для пагинации. Применяется на каждый кабинет.

Ответ

Строки — в data.rows[]. Поля каждой строки:

cabinet
stringЮрлицо кабинета.
type
stringFBO или FBS.
date
stringДата остатка YYYY-MM-DD.
sku
integerSKU Ozon.
article
stringАртикул продавца (offer_id).
name
stringНазвание товара.
warehouse
stringНазвание склада.
warehouse_id
integerID склада (id склада Ozon).
quantity
integerОстаток, шт.
unit_cost
numberСебестоимость единицы (актуальная).
stock_cost
numberСебестоимость остатка = quantity × unit_cost.
unit_price
numberЦена единицы (актуальная).
stock_price
numberЦена остатка = quantity × unit_price.

Пример

curl https://web.metriclab.ru/v1/ozon/stocks \
  -H "Authorization: Bearer ml_live_..." \
  -H "Content-Type: application/json" \
  -d '{"cabinets": ["67890"], "type": "both", "date_from": "2026-08-01", "date_to": "2026-08-05"}'

POST /v1/wb/costs

Себестоимость товаров — та же таблица, что и в форме «Себестоимость» на сайте. Себестоимость хранится по периодам: по неделям (2026_32 — 32-я неделя 2026 года). Без параметра period метод отдаёт последнюю известную себестоимость по каждому товару и период, к которому она относится.

POST https://web.metriclab.ru/v1/wb/costs
Рекомендации и частые ошибки
  • Список периодов — в meta.periods (от новых к старым). У каждого периода есть period (ключ для запросов), label и границы date_from/date_to — например "2026_32" → «2026 Н32 (03.08 - 09.08)». Ключи периодов не выдумывайте — берите оттуда.
  • Без period в каждой строке приходит последняя известная себестоимость и её период (period, period_label, period_start, period_end). С period — значение ровно за этот период.
  • Товары без себестоимости тоже возвращаются: cost = null, период null. Так видно, по каким товарам себестоимость ещё не заполнена.
  • Грейн строки — артикул × баркод (размеры хранятся отдельными баркодами).
  • date_from/date_to этот метод не использует — период задаётся только ключом period.

Тело запроса

cabinetsrequired
string[] Массив supplier_id кабинетов. Пустой массив [] — все доступные.
period
string Ключ периода из meta.periods, например "2026_32". Без него — последняя известная себестоимость по каждому товару.
filters
object Фильтры по товарам (бренды, предметы, группировки) — те же, что в виджетах.
limit / offset
integer Пагинация. По умолчанию 50000, максимум 100000; применяется на каждый кабинет.

Ответ

Строки — в data.rows[], справочник периодов — в meta.periods[].

cabinet
stringЮрлицо кабинета.
article
integerАртикул WB (nmID).
barcode
stringБаркод — вместе с артикулом задаёт строку себестоимости.
size
stringРазмер.
supplier_article / brand / subject
stringАртикул поставщика, бренд, предмет.
image
stringСсылка на фото товара.
cost
numberСебестоимость единицы, ₽. null — не заполнена.
period
stringПериод, к которому относится значение, например "2026_32".
period_label
stringПериод с датами для показа пользователю: 2026 Н32 (03.08 - 09.08).
period_start / period_end
stringГраницы периода YYYY-MM-DD.

Пример

curl https://web.metriclab.ru/v1/wb/costs \
  -H "Authorization: Bearer ml_live_..." \
  -H "Content-Type: application/json" \
  -d '{"cabinets": ["12345"]}'
json
{
  "status": "success",
  "data": {
    "rows": [
      {
        "article": 158393324,
        "barcode": "2037561234567",
        "size": "M",
        "cost": 1214,
        "period": "2026_32",
        "period_label": "2026 Н32 (03.08 - 09.08)",
        "period_start": "2026-08-03",
        "period_end": "2026-08-09"
      }
    ]
  },
  "meta": {
    "marketplace": "wb",
    "granularity": "week",
    "period": null,
    "count": 1,
    // справочный список — от новых периодов к старым
    "periods": [
      {"period": "2026_32",
       "label": "2026 Н32 (03.08 - 09.08)",
       "date_from": "2026-08-03",
       "date_to": "2026-08-09"}
    ]
  }
}

POST /v1/ozon/costs

Себестоимость товаров — та же таблица, что и в форме «Себестоимость» на сайте. Себестоимость хранится по периодам: по полумесячным периодам (2026_август_1 — 1–15 августа, 2026_август_2 — 16–31 августа). Без параметра period метод отдаёт последнюю известную себестоимость по каждому товару и период, к которому она относится.

POST https://web.metriclab.ru/v1/ozon/costs
Рекомендации и частые ошибки
  • Список периодов — в meta.periods (от новых к старым). У каждого периода есть period (ключ для запросов), label и границы date_from/date_to — например "2026_август_1" → «2026 август 1 (01.08 - 15.08)». Ключи периодов не выдумывайте — берите оттуда.
  • Без period в каждой строке приходит последняя известная себестоимость и её период (period, period_label, period_start, period_end). С period — значение ровно за этот период.
  • Товары без себестоимости тоже возвращаются: cost = null, период null. Так видно, по каким товарам себестоимость ещё не заполнена.
  • Грейн строки — SKU.
  • date_from/date_to этот метод не использует — период задаётся только ключом period.

Тело запроса

cabinetsrequired
string[] Массив client_id кабинетов. Пустой массив [] — все доступные.
period
string Ключ периода из meta.periods, например "2026_август_1". Без него — последняя известная себестоимость по каждому товару.
filters
object Фильтры по товарам (бренды, категории, группировки) — те же, что в виджетах.
limit / offset
integer Пагинация. По умолчанию 50000, максимум 100000; применяется на каждый кабинет.

Ответ

Строки — в data.rows[], справочник периодов — в meta.periods[].

cabinet
stringЮрлицо кабинета.
sku
stringSKU Ozon — задаёт строку себестоимости.
article
stringАртикул продавца (offer_id).
name / brand / subject
stringНазвание, бренд, категория.
image
stringСсылка на фото товара.
cost
numberСебестоимость единицы, ₽. null — не заполнена.
period
stringПериод, к которому относится значение, например "2026_август_1".
period_label
stringПериод с датами для показа пользователю: 2026 август 1 (01.08 - 15.08).
period_start / period_end
stringГраницы периода YYYY-MM-DD.

Пример

curl https://web.metriclab.ru/v1/ozon/costs \
  -H "Authorization: Bearer ml_live_..." \
  -H "Content-Type: application/json" \
  -d '{"cabinets": ["67890"]}'
json
{
  "status": "success",
  "data": {
    "rows": [
      {
        "sku": "1580142736",
        "article": "AKO.2201.01",
        "cost": 1214,
        "period": "2026_август_1",
        "period_label": "2026 август 1 (01.08 - 15.08)",
        "period_start": "2026-08-01",
        "period_end": "2026-08-15"
      }
    ]
  },
  "meta": {
    "marketplace": "ozon",
    "granularity": "halfmonth",
    "period": null,
    "count": 1,
    // справочный список — от новых периодов к старым
    "periods": [
      {"period": "2026_август_1",
       "label": "2026 август 1 (01.08 - 15.08)",
       "date_from": "2026-08-01",
       "date_to": "2026-08-15"}
    ]
  }
}

POST /v1/yandex/costs

Себестоимость товаров — та же таблица, что и в форме «Себестоимость» на сайте. Себестоимость хранится по периодам: по полумесячным периодам (2026_август_1 — 1–15 августа, 2026_август_2 — 16–31 августа). Без параметра period метод отдаёт последнюю известную себестоимость по каждому товару и период, к которому она относится.

POST https://web.metriclab.ru/v1/yandex/costs
Рекомендации и частые ошибки
  • Список периодов — в meta.periods (от новых к старым). У каждого периода есть period (ключ для запросов), label и границы date_from/date_to — например "2026_август_1" → «2026 август 1 (01.08 - 15.08)». Ключи периодов не выдумывайте — берите оттуда.
  • Без period в каждой строке приходит последняя известная себестоимость и её период (period, period_label, period_start, period_end). С period — значение ровно за этот период.
  • Товары без себестоимости тоже возвращаются: cost = null, период null. Так видно, по каким товарам себестоимость ещё не заполнена.
  • Грейн строки — артикул продавца (отдельного SKU у товара Маркета нет).
  • date_from/date_to этот метод не использует — период задаётся только ключом period.

Тело запроса

cabinetsrequired
string[] Массив business_id кабинетов. Пустой массив [] — все доступные.
period
string Ключ периода из meta.periods, например "2026_август_1". Без него — последняя известная себестоимость по каждому товару.
filters
object Фильтры по товарам (бренды, категории, группировки) — те же, что в виджетах.
limit / offset
integer Пагинация. По умолчанию 50000, максимум 100000; применяется на каждый кабинет.

Ответ

Строки — в data.rows[], справочник периодов — в meta.periods[].

cabinet
stringЮрлицо кабинета.
article
stringАртикул продавца (offer_id, SKU магазина) — задаёт строку себестоимости.
name / brand / subject
stringНазвание, производитель, категория.
image
stringСсылка на фото товара.
cost
numberСебестоимость единицы, ₽. null — не заполнена.
period
stringПериод, к которому относится значение, например "2026_август_1".
period_label
stringПериод с датами для показа пользователю: 2026 август 1 (01.08 - 15.08).
period_start / period_end
stringГраницы периода YYYY-MM-DD.

Пример

curl https://web.metriclab.ru/v1/yandex/costs \
  -H "Authorization: Bearer ml_live_..." \
  -H "Content-Type: application/json" \
  -d '{"cabinets": ["11223344"]}'
json
{
  "status": "success",
  "data": {
    "rows": [
      {
        "article": "AKO-2201",
        "cost": 1214,
        "period": "2026_август_1",
        "period_label": "2026 август 1 (01.08 - 15.08)",
        "period_start": "2026-08-01",
        "period_end": "2026-08-15"
      }
    ]
  },
  "meta": {
    "marketplace": "yandex",
    "granularity": "halfmonth",
    "period": null,
    "count": 1,
    // справочный список — от новых периодов к старым
    "periods": [
      {"period": "2026_август_1",
       "label": "2026 август 1 (01.08 - 15.08)",
       "date_from": "2026-08-01",
       "date_to": "2026-08-15"}
    ]
  }
}

POST /v1/wb/costs-update

Записывает себестоимость за один период сразу по списку товаров — то же самое, что заполнить колонку периода в форме «Себестоимость» и сохранить. Период указывается обязательно; за один запрос меняется ровно один период.

POST https://web.metriclab.ru/v1/wb/costs-update
Рекомендации и частые ошибки
  • Один кабинет на запрос. В cabinets должен быть ровно один supplier_id — иначе непонятно, чью себестоимость менять.
  • Ключ периода берите из meta.periods ответа POST /v1/wb/costs. Неизвестный период → 400 с подсказкой последних доступных.
  • Баркод необязателен: если передать только article, значение проставится на все баркоды (размеры) этого артикула.
  • cost: null очищает себестоимость за этот период.
  • Протягивание. После сохранения себестоимость проставляется в те периоды, где значения ещё нет — как в форме на сайте. Уже заполненные периоды не перезаписываются.
  • Товары, которых нет в кабинете, попадают в data.skipped — остальные при этом сохраняются. До 5000 позиций в запросе.

Тело запроса

cabinetsrequired
string[] Ровно один supplier_id.
periodrequired
string Период, за который меняется себестоимость: "2026_32".
itemsrequired
object[] Товары со значениями. article (обязателен), barcode (опц.), cost. cost: null — очистить.

Ответ

data.updated
integerСколько строк себестоимости записано.
data.cleared
integerСколько значений очищено (cost: null).
data.skipped
object[]Товары, которых нет в кабинете, с причиной.
data.period*
stringПериод записи и его даты — как в ответе /costs.

Пример

curl https://web.metriclab.ru/v1/wb/costs-update \
  -H "Authorization: Bearer ml_live_..." \
  -H "Content-Type: application/json" \
  -d '{
    "cabinets": ["12345"],
    "period": "2026_32",
    "items": [
      {"article": 158393324, "barcode": "2037561234567", "cost": 1214},
      {"article": 158393325, "cost": 980.5},
      {"article": 158393326, "cost": null}
    ]
  }'
json
{
  "status": "success",
  "data": {
    "updated": 2,
    "cleared": 1,
    "skipped": [],
    "period": "2026_32",
    "period_label": "2026 Н32 (03.08 - 09.08)",
    "period_start": "2026-08-03",
    "period_end": "2026-08-09"
  },
  "meta": {
    "marketplace": "wb",
    "cabinet": "...",
    "items": 3
  }
}

POST /v1/ozon/costs-update

Записывает себестоимость за один период сразу по списку товаров — то же самое, что заполнить колонку периода в форме «Себестоимость» и сохранить. Период указывается обязательно; за один запрос меняется ровно один период.

POST https://web.metriclab.ru/v1/ozon/costs-update
Рекомендации и частые ошибки
  • Один кабинет на запрос. В cabinets должен быть ровно один client_id — иначе непонятно, чью себестоимость менять.
  • Ключ периода берите из meta.periods ответа POST /v1/ozon/costs. Неизвестный период → 400 с подсказкой последних доступных.
  • Товар задаётся SKU, либо артикулом продавца — тогда значение проставится на все SKU этого артикула.
  • cost: null очищает себестоимость за этот период.
  • Протягивание. После сохранения себестоимость проставляется в те периоды, где значения ещё нет — как в форме на сайте. Уже заполненные периоды не перезаписываются.
  • Товары, которых нет в кабинете, попадают в data.skipped — остальные при этом сохраняются. До 5000 позиций в запросе.

Тело запроса

cabinetsrequired
string[] Ровно один client_id.
periodrequired
string Период, за который меняется себестоимость: "2026_август_1".
itemsrequired
object[] Товары со значениями. sku (или article), cost. cost: null — очистить.

Ответ

data.updated
integerСколько строк себестоимости записано.
data.cleared
integerСколько значений очищено (cost: null).
data.skipped
object[]Товары, которых нет в кабинете, с причиной.
data.period*
stringПериод записи и его даты — как в ответе /costs.

Пример

curl https://web.metriclab.ru/v1/ozon/costs-update \
  -H "Authorization: Bearer ml_live_..." \
  -H "Content-Type: application/json" \
  -d '{
    "cabinets": ["67890"],
    "period": "2026_август_1",
    "items": [
      {"sku": "1580142736", "cost": 1214},
      {"article": "AKO.2201.01", "cost": 980.5},
      {"sku": "1579471752", "cost": null}
    ]
  }'
json
{
  "status": "success",
  "data": {
    "updated": 2,
    "cleared": 1,
    "skipped": [],
    "period": "2026_август_1",
    "period_label": "2026 август 1 (01.08 - 15.08)",
    "period_start": "2026-08-01",
    "period_end": "2026-08-15"
  },
  "meta": {
    "marketplace": "ozon",
    "cabinet": "...",
    "items": 3
  }
}

POST /v1/yandex/costs-update

Записывает себестоимость за один период сразу по списку товаров — то же самое, что заполнить колонку периода в форме «Себестоимость» и сохранить. Период указывается обязательно; за один запрос меняется ровно один период.

POST https://web.metriclab.ru/v1/yandex/costs-update
Рекомендации и частые ошибки
  • Один кабинет на запрос. В cabinets должен быть ровно один business_id — иначе непонятно, чью себестоимость менять.
  • Ключ периода берите из meta.periods ответа POST /v1/yandex/costs. Неизвестный период → 400 с подсказкой последних доступных.
  • Товар задаётся артикулом продавца (article, строка) — как в форме на сайте.
  • cost: null очищает себестоимость за этот период.
  • Протягивание. После сохранения себестоимость проставляется в те периоды, где значения ещё нет — как в форме на сайте. Уже заполненные периоды не перезаписываются.
  • Товары, которых нет в кабинете, попадают в data.skipped — остальные при этом сохраняются. До 5000 позиций в запросе.

Тело запроса

cabinetsrequired
string[] Ровно один business_id.
periodrequired
string Период, за который меняется себестоимость: "2026_август_1".
itemsrequired
object[] Товары со значениями. article (обязателен), cost. cost: null — очистить.

Ответ

data.updated
integerСколько строк себестоимости записано.
data.cleared
integerСколько значений очищено (cost: null).
data.skipped
object[]Товары, которых нет в кабинете, с причиной.
data.period*
stringПериод записи и его даты — как в ответе /costs.

Пример

curl https://web.metriclab.ru/v1/yandex/costs-update \
  -H "Authorization: Bearer ml_live_..." \
  -H "Content-Type: application/json" \
  -d '{
    "cabinets": ["11223344"],
    "period": "2026_август_1",
    "items": [
      {"article": "AKO-2201", "cost": 1214},
      {"article": "AKO-2202", "cost": null}
    ]
  }'
json
{
  "status": "success",
  "data": {
    "updated": 2,
    "cleared": 1,
    "skipped": [],
    "period": "2026_август_1",
    "period_label": "2026 август 1 (01.08 - 15.08)",
    "period_start": "2026-08-01",
    "period_end": "2026-08-15"
  },
  "meta": {
    "marketplace": "yandex",
    "cabinet": "...",
    "items": 3
  }
}

POST /v1/wb/unit-fact

Лист «Unit-факт» из виджета «Таблица» на сайте — строка на артикул и размер за период со всеми колонками листа: реализация, услуги площадки по статьям, себестоимость, налог и НДС, сумма к перечислению, прибыль, маржинальность, доли, показатели на единицу, ABC-классы и остатки. Считается тем же кодом, что и таблица на сайте, поэтому цифры совпадают с ней.

POST https://web.metriclab.ru/v1/wb/unit-fact
Рекомендации и частые ошибки
  • Разреза по датам нет. Строка — товар за весь период целиком. Динамику по дням даёт /v1/wb/metrics.
  • Колонки-формулы, доли и ABC приходят уже посчитанными (в отличие от metrics, где производные считает клиент). Формула каждой такой колонки показана в каталоге ниже.
  • Гранулярность как на сайте. Неделя считается по дням только там, где у кабинета есть ежедневные отчёты Wildberries за неё; иначе неделя входит целиком одной строкой и только если она целиком внутри периода. Неделя, задетая периодом не целиком, в ответ не попадает. Что именно вошло — в meta.cabinets_notes: по одной заметке на кабинет (с какой даты доступен ежедневный Unit-факт, какие недели вошли по дням, какие целиком, какие пропущены). Чтобы пропущенные недели вошли, расширьте период до границ недель (понедельник–воскресенье).
  • Знаки как на листе: услуги, себестоимость и налог — отрицательные, чтобы рублёвые колонки складывались в сумму к перечислению.
  • Остатки — снимок, а не сумма за период. В колонках остатков — значение на самую свежую дату (meta.stocks.latest); на последнюю дату внутри периода — те же колонки с суффиксом __in_period (есть, только когда даты различаются).
  • Ответ большой: до 5000 строк по 150–200 колонок. Ограничивайте выборку filters и листайте через offset; полное число строк — в data.total.
  • Метод тяжёлый: лимит 3 запроса/мин.

Тело запроса

cabinetsrequired
string[] Массив supplier_id кабинетов. Должны принадлежать владельцу ключа (GET /v1/cabinets). Пустой массив [] — все доступные.
date_fromrequired
string Начало периода YYYY-MM-DD, включительно.
date_torequired
string Конец периода YYYY-MM-DD, включительно.
filters
object Фильтры на товары — те же, что у /v1/wb/metrics (articles, brands, subjects, article_suppliers, grouping_level_1..3, group_name, responsible).
limit
integer Сколько строк вернуть. По умолчанию и максимум — 5000. Строки идут по кабинету и товару (артикул и размер).
offset
integer Смещение для постраничной выборки. По умолчанию 0.

Структура ответа

status
string"success" при 200.
data
objectСтроки листа.
rows
object[]Строка на артикул и размер. Ключи — колонки листа из каталога ниже: cabinet, article_wb, size, article_supplier, brand, subject, группы товаров и далее все показатели. Колонки-формулы, доли и ABC — уже посчитаны (null, если не считается: нет слагаемого или деление на ноль).
total
integerВсего строк (до limit/offset).
meta
objectЭхо параметров и служебные сведения.
stocks
objectlatest — дата снимка остатков в колонках остатков; in_period — дата снимка в колонках с суффиксом __in_period (null, если совпадает с latest или данных нет).
cabinets_notes
object[]Ровно одна запись на кабинет: cabinet, daily_available_from (с какой даты есть ежедневные отчёты, null — нет), weeks.by_day / weeks.whole_week / weeks.skipped (недели периода: вошли по дням, целиком, не вошли; у каждой period, date_from, date_to) и note — то же словами.
count, total, limit, offset
integerСтрок в ответе, всего, и параметры пагинации.

Каталог колонок · Wildberries

Ключи колонок в строках ответа. Блоки и порядок — как на листе «Unit-факт» в MetricLab. Колонки с тегом computed считаются из других (формула показана рядом) и приходят в ответе уже посчитанными. Актуальный список — GET /v1/wb/unit-fact-catalog.

Номенклатура · 10 колонок
grouping_level_1 Уровень группировки 1
Группировка 1 из ручной формы «Группы товаров».
text
group_name Группа товаров
Название группы товаров из ручной формы «Группы товаров».
text
responsible Ответственный
Кто отвечает за товар — из ручной формы «Группы товаров».
text
cabinet Кабинет
Кабинет, к которому относится строка.
text
subject Предмет
Предмет — категория товара в каталоге Wildberries.
text
brand Бренд
Бренд товара из карточки.
text
article_supplier Артикул поставщика
Ваш артикул из карточки товара.
text
article_wb Артикул Wildberries
Идентификатор товара в системе Wildberries.
text
size Размер
Размер товара. Строка отчёта — отдельный размер артикула.
text
card_created Дата создания карточки
Когда карточка товара создана на Wildberries.
text
ABC · 3 колонок
abc_realization ABC по сумме реализацииcomputed
Класс товара по накопленной доле в показателе «До спп: сумма реализации». Товары выстраиваются по убыванию значения: A — те, что дают верхнюю часть суммы, B — следующую, C — хвост. Отрицательное значение — класс D. Доли классов (по умолчанию 80 %, 15 % и 5 %) настраиваются в подписи блока.
ABC-класс по wb_unit_fact_sum_before_spp_realized (A/B/C = 80/15/5 %, убыток = D)
text
abc_profit ABC по маржинальной прибылиcomputed
Класс товара по накопленной доле в показателе «Маржинальная прибыль». Товары выстраиваются по убыванию значения: A — те, что дают верхнюю часть суммы, B — следующую, C — хвост. Отрицательное значение — класс D. Доли классов (по умолчанию 80 %, 15 % и 5 %) настраиваются в подписи блока.
ABC-класс по wb_unit_fact_profit_sum (A/B/C = 80/15/5 %, убыток = D)
text
abc_for_pay ABC по сумме к перечислениюcomputed
Класс товара по накопленной доле в показателе «Сумма к перечислению». Товары выстраиваются по убыванию значения: A — те, что дают верхнюю часть суммы, B — следующую, C — хвост. Отрицательное значение — класс D. Доли классов (по умолчанию 80 %, 15 % и 5 %) настраиваются в подписи блока.
ABC-класс по wb_unit_fact_for_pay (A/B/C = 80/15/5 %, убыток = D)
text
Штуки · 23 колонок
wb_unit_fact_orders_amount Заказов
Сколько единиц товара заказали покупатели за период, включая самозаказы и раздачи. Заказ считается в момент оформления, независимо от того, выкупят его потом или отменят. Приходит из статистики заказов Wildberries.
number · шт
wb_unit_fact_count_self_orders Самозаказов
Сколько единиц заказано в рамках самовыкупов. Берётся из ручной формы «Самовыкупы». Нужны, чтобы очистить воронку от собственных заказов: в чистых продажах они не участвуют.
number · шт
wb_unit_fact_count_orders_clean Заказов (без учета самозаказов и раздач)computed
Заказы покупателей без ваших собственных: из общего числа заказов вычтены самозаказы и раздачи. Именно эта величина показывает реальный спрос. Формула: «Заказов» − «Самозаказов» − «Раздач».
wb_unit_fact_orders_amount - wb_unit_fact_count_self_orders - wb_unit_fact_count_distributions
number · шт
wb_unit_fact_count_deliveries Доставок
Сколько единиц товара доехало до покупателя и было ему выдано. Приходит из недельного отчёта Wildberries о реализации.
number · шт
wb_unit_fact_count_refusals Отказов
Сколько единиц покупатели не забрали: отказались при получении или товар вернулся невостребованным. Логистику по таким заказам продавец всё равно оплачивает. Приходит из недельного отчёта Wildberries о реализации.
number · шт
wb_unit_fact_percent_refusals % отказовcomputed
Какая доля доставок закончилась отказом покупателя. Каждый отказ — это оплаченная логистика без продажи. Формула: «Отказов» / «Доставок» × 100.
wb_unit_fact_count_refusals / wb_unit_fact_count_deliveries * 100
percent · %
wb_unit_fact_count_sales Продаж
Сколько единиц выкуплено покупателями, включая самовыкупы и раздачи. Приходит из недельного отчёта Wildberries о реализации.
number · шт
wb_unit_fact_count_self_sales Самовыкупов
Сколько единиц выкуплено вами самими. Берётся из ручной формы «Самовыкупы».
number · шт
wb_unit_fact_count_distributions Раздач
Сколько единиц роздано по механикам продвижения с кэшбеком. Берётся из ручной формы «Раздачи».
number · шт
wb_unit_fact_count_sales_clean Продаж (без учета самозаказов и раздач)computed
Настоящие продажи покупателям: из всех выкупов вычтены самовыкупы и раздачи. Формула: «Продаж» − «Самовыкупов» − «Раздач».
wb_unit_fact_count_sales - wb_unit_fact_count_self_sales - wb_unit_fact_count_distributions
number · шт
wb_unit_fact_count_returns Возвратовcomputed
Сколько единиц покупатели вернули после выкупа: разница между выкупленным и дошедшим до реализации, за вычетом списанного товара. Формула: «Продаж» + «Итого списанных товаров» − «Итого реализовано товаров».
wb_unit_fact_count_sales + (wb_unit_fact_count_lost + wb_unit_fact_count_defective + wb_unit_fact_count_replaced) - wb_unit_fact_count_realized
number · шт
wb_unit_fact_percent_returns % возвратовcomputed
Какая доля выкупленного товара вернулась обратно. Формула: «Возвратов» / «Продаж» × 100.
(wb_unit_fact_count_sales + (wb_unit_fact_count_lost + wb_unit_fact_count_defective + wb_unit_fact_count_replaced) - wb_unit_fact_count_realized) / wb_unit_fact_count_sales * 100
percent · %
wb_unit_fact_count_lost Потерянных товаров
Сколько единиц Wildberries потерял и компенсировал. Приходит из недельного отчёта Wildberries о реализации.
number · шт
wb_unit_fact_count_defective Бракованных товаров
Сколько единиц признано бракованными с компенсацией от Wildberries. Приходит из недельного отчёта Wildberries о реализации.
number · шт
wb_unit_fact_count_replaced Подмененых товаров
Сколько единиц подменили при доставке — вместо вашего товара покупателю уехал чужой, Wildberries это компенсировал. Приходит из недельного отчёта Wildberries о реализации.
number · шт
wb_unit_fact_count_utils Итого списанных товаровcomputed
Товары, которые до покупателя не дошли и были списаны с компенсацией: потерянные, бракованные и подменённые вместе. Формула: «Потерянных товаров» + «Бракованных товаров» + «Подмененых товаров».
wb_unit_fact_count_lost + wb_unit_fact_count_defective + wb_unit_fact_count_replaced
number · шт
wb_unit_fact_count_correct_sales Корректных продаж
Продажи, которые Wildberries скорректировал задним числом — обычно уточнение по прошлым неделям. Приходит из недельного отчёта Wildberries о реализации.
number · шт
wb_unit_fact_count_correct_returns Корректных возвратов
Возвраты, скорректированные задним числом. Приходит из недельного отчёта Wildberries о реализации.
number · шт
wb_unit_fact_count_storno_sales Сторно продаж
Отменённые продажи прошлых периодов: Wildberries сторнировал ранее проведённую продажу. Приходит из недельного отчёта Wildberries о реализации.
number · шт
wb_unit_fact_count_storno_returns Сторно возвратов
Отменённые возвраты прошлых периодов. Приходит из недельного отчёта Wildberries о реализации.
number · шт
wb_unit_fact_count_corrections_total Итого корректировок и стонированийcomputed
Все правки задним числом в штуках: корректные продажи и возвраты плюс сторнирования. Помогает понять, насколько неделя «шевелится» после закрытия. Формула: «Корректных продаж» + «Корректных возвратов» + «Сторно продаж» + «Сторно возвратов».
wb_unit_fact_count_correct_sales + wb_unit_fact_count_correct_returns + wb_unit_fact_count_storno_sales + wb_unit_fact_count_storno_returns
number · шт
wb_unit_fact_count_realized Итого реализовано товаров
Итоговое количество реализованного товара за период — то, с чего Wildberries считает вам выручку. Учитывает продажи, возвраты, списания и корректировки. Приходит из недельного отчёта Wildberries о реализации.
number · шт
wb_unit_fact_percent_buyout % выкупаcomputed
Какая доля доставленного товара осталась у покупателя. Считается от доставок, а не от заказов: заказ, не доехавший до покупателя, к выкупу отношения не имеет. Низкий процент означает, что логистика оплачивается, а выручки по ней нет. Формула: («Итого реализовано товаров» − «Итого списанных товаров») / «Доставок» × 100.
(wb_unit_fact_count_realized - (wb_unit_fact_count_lost + wb_unit_fact_count_defective + wb_unit_fact_count_replaced)) / wb_unit_fact_count_deliveries * 100
percent · %
Остатки · 13 колонок
wb_nedeli_stock_count Остатков
Сколько единиц лежит на складах и доступно к заказу. Снимок остатков на складах на конец недели.
number · шт
wb_nedeli_stock_in_way_to Остатков в пути к клиету
Сколько единиц едет к покупателям — заказано, но ещё не выдано. Снимок остатков на складах на конец недели.
number · шт
wb_nedeli_stock_in_way_from Остатков в пути от клиента
Сколько единиц едет обратно на склад после отказа или возврата. Снимок остатков на складах на конец недели.
number · шт
wb_nedeli_stock_total Итого нереализованных остатковcomputed
Весь товар, который ещё не продан: на складах и в пути в обе стороны. Формула: «Остатков» + «Остатков в пути к клиету» + «Остатков в пути от клиента».
wb_nedeli_stock_count + wb_nedeli_stock_in_way_to + wb_nedeli_stock_in_way_from
number · шт
wb_nedeli_stock_sebes Себестоимость остатков, доступных для заказа
Во сколько обошлась закупка товара, лежащего на складах. Считается по ручной форме «Себестоимость».
currency · ₽
wb_nedeli_stock_sebes_in_way_to Cебестоимость остатков в пути до клиента
Себестоимость товара, который едет к покупателям. Считается по ручной форме «Себестоимость».
currency · ₽
wb_nedeli_stock_sebes_in_way_from Cебестоимость остатков в пути от клиента
Себестоимость товара, который едет обратно на склад. Считается по ручной форме «Себестоимость».
currency · ₽
wb_nedeli_stock_sebes_total Итого себестоимость нереализованных остатковcomputed
Сколько ваших денег заморожено в непроданном товаре. Формула: «Себестоимость остатков, доступных для заказа» + «Cебестоимость остатков в пути до клиента» + «Cебестоимость остатков в пути от клиента».
wb_nedeli_stock_sebes + wb_nedeli_stock_sebes_in_way_to + wb_nedeli_stock_sebes_in_way_from
currency · ₽
wb_nedeli_stock_price Цена реализации остатков (до СПП)
За сколько можно продать остаток на складах по вашим ценам до скидки Wildberries.
currency · ₽
wb_nedeli_stock_price_in_way_to Цена реализации остатков в пути до клиента (до СПП)
За сколько можно продать товар, который едет к покупателям.
currency · ₽
wb_nedeli_stock_price_in_way_from Цена реализации остатков в пути от клиента (до СПП)
За сколько можно продать товар, который едет обратно на склад.
currency · ₽
wb_nedeli_stock_price_total Итого цена реализации всех остатков (до СПП)computed
Сколько выручки принесёт весь непроданный товар, если продать его по текущим ценам. Формула: «Цена реализации остатков (до СПП)» + «Цена реализации остатков в пути до клиента (до СПП)» + «Цена реализации остатков в пути от клиента (до СПП)».
wb_nedeli_stock_price + wb_nedeli_stock_price_in_way_to + wb_nedeli_stock_price_in_way_from
currency · ₽
wb_nedeli_stock_markup_coefficient Коэффициент наценки на остатокcomputed
Во сколько раз ожидаемая выручка с остатков выше вложенных в них денег. Формула: «Итого цена реализации всех остатков (до СПП)» / «Итого себестоимость нереализованных остатков».
(wb_nedeli_stock_price + wb_nedeli_stock_price_in_way_to + wb_nedeli_stock_price_in_way_from) / (wb_nedeli_stock_sebes + wb_nedeli_stock_sebes_in_way_to + wb_nedeli_stock_sebes_in_way_from)
number
Рубли до СПП · 16 колонок
wb_unit_fact_orders_sum Сумма заказов
Сумма заказов по вашим ценам до скидки Wildberries, включая самозаказы. Приходит из статистики заказов Wildberries.
currency · ₽
wb_unit_fact_sum_self_orders Сумма самозаказов
Сумма самозаказов по вашим ценам. Берётся из ручной формы «Самовыкупы».
currency · ₽
wb_unit_fact_orders_sum_clean Сумма заказов (без учета самозаказов)computed
Сумма заказов покупателей без ваших собственных. Формула: «Сумма заказов» − «Сумма самозаказов».
wb_unit_fact_orders_sum - wb_unit_fact_sum_self_orders
currency · ₽
wb_unit_fact_sum_before_spp_sales До спп: сумма продаж
Сумма выкупленного товара по вашей цене — до скидки постоянного покупателя, которую Wildberries даёт за свой счёт. Именно от этой величины площадка считает комиссию и услуги. Приходит из недельного отчёта Wildberries о реализации.
currency · ₽
wb_unit_fact_sum_before_spp_returns До спп: сумма возвратов
Сумма возвращённого товара по вашей цене до скидки Wildberries. Приходит из недельного отчёта Wildberries о реализации.
currency · ₽
wb_unit_fact_sum_before_spp_comp_lost До спп: сумма компенсаций за потерянный товар
Компенсация за потерянный товар по вашей цене до скидки Wildberries. Приходит из недельного отчёта Wildberries о реализации.
currency · ₽
wb_unit_fact_sum_before_spp_comp_defective До спп: сумма компенсаций за бракованный товар
Компенсация за бракованный товар по вашей цене до скидки Wildberries. Приходит из недельного отчёта Wildberries о реализации.
currency · ₽
wb_unit_fact_sum_before_spp_comp_replaced До спп: сумма компенсаций за подмененный товар
Компенсация за подменённый товар по вашей цене до скидки Wildberries. Приходит из недельного отчёта Wildberries о реализации.
currency · ₽
wb_unit_fact_sum_before_spp_comp_total До спп: итого сумма компенсаций за списанный товарcomputed
Все компенсации за не дошедший до покупателя товар по вашим ценам. Формула: «До спп: сумма компенсаций за потерянный товар» + «До спп: сумма компенсаций за бракованный товар» + «До спп: сумма компенсаций за подмененный товар».
wb_unit_fact_sum_before_spp_comp_lost + wb_unit_fact_sum_before_spp_comp_defective + wb_unit_fact_sum_before_spp_comp_replaced
currency · ₽
wb_unit_fact_sum_before_spp_correct_sales До спп: сумма корректных продаж
Продажи, скорректированные задним числом, по вашей цене. Приходит из недельного отчёта Wildberries о реализации.
currency · ₽
wb_unit_fact_sum_before_spp_correct_returns До спп: сумма корректных возвратов
Возвраты, скорректированные задним числом, по вашей цене. Приходит из недельного отчёта Wildberries о реализации.
currency · ₽
wb_unit_fact_sum_before_spp_storno_sales До спп: сумма сторнированных продаж
Сторнированные продажи прошлых периодов по вашей цене. Приходит из недельного отчёта Wildberries о реализации.
currency · ₽
wb_unit_fact_sum_before_spp_storno_returns До спп: сумма сторнированных возвратов
Сторнированные возвраты прошлых периодов по вашей цене. Приходит из недельного отчёта Wildberries о реализации.
currency · ₽
wb_unit_fact_sum_before_spp_corrections_total До спп: итого сумма корректировок и сторнированийcomputed
Все правки задним числом в деньгах по вашим ценам. Формула: «До спп: сумма корректных продаж» + «До спп: сумма корректных возвратов» + «До спп: сумма сторнированных продаж» + «До спп: сумма сторнированных возвратов».
wb_unit_fact_sum_before_spp_correct_sales + wb_unit_fact_sum_before_spp_correct_returns + wb_unit_fact_sum_before_spp_storno_sales + wb_unit_fact_sum_before_spp_storno_returns
currency · ₽
wb_unit_fact_sum_before_spp_realized До спп: сумма реализации
Главная величина отчёта: сколько товара реализовано по ВАШИМ ценам — до скидки постоянного покупателя. От неё Wildberries считает комиссию и услуги, поэтому доли расходов в отчёте берутся именно от неё. Приходит из недельного отчёта Wildberries о реализации.
currency · ₽
wb_unit_fact_share_of_realization Вклад артикула в общую сумму реализацииcomputed
Какую долю всей реализации за период дал этот товар. Доли всех товаров складываются в 100%, поэтому колонку удобно сортировать по убыванию, чтобы увидеть, на чём держится оборот.
wb_unit_fact_share_of_realization = wb_unit_fact_sum_before_spp_realized / сумма wb_unit_fact_sum_before_spp_realized по всем строкам * 100
percent · %
Рубли после СПП · 15 колонок
wb_unit_fact_sum_after_spp_sales После спп: сумма продаж
Сумма выкупленного товара по цене, которую фактически заплатил покупатель, — уже со скидкой Wildberries. Приходит из недельного отчёта Wildberries о реализации.
currency · ₽
wb_unit_fact_sum_after_spp_returns После спп: сумма возвратов
Сумма возвратов по цене покупателя. Приходит из недельного отчёта Wildberries о реализации.
currency · ₽
wb_unit_fact_sum_after_spp_comp_lost После спп: сумма компенсаций за потерянный товар
Компенсация за потерянный товар по цене покупателя. Приходит из недельного отчёта Wildberries о реализации.
currency · ₽
wb_unit_fact_sum_after_spp_comp_defective После спп: сумма компенсаций за бракованный товар
Компенсация за бракованный товар по цене покупателя. Приходит из недельного отчёта Wildberries о реализации.
currency · ₽
wb_unit_fact_sum_after_spp_comp_replaced После спп: сумма компенсаций за подмененный товар
Компенсация за подменённый товар по цене покупателя. Приходит из недельного отчёта Wildberries о реализации.
currency · ₽
wb_unit_fact_sum_after_spp_comp_total После спп: итого сумма компенсаций за списанный товарcomputed
Все компенсации за списанный товар по ценам покупателя. Формула: «После спп: сумма компенсаций за потерянный товар» + «После спп: сумма компенсаций за бракованный товар» + «После спп: сумма компенсаций за подмененный товар».
wb_unit_fact_sum_after_spp_comp_lost + wb_unit_fact_sum_after_spp_comp_defective + wb_unit_fact_sum_after_spp_comp_replaced
currency · ₽
wb_unit_fact_sum_after_spp_correct_sales После спп: сумма корректных продаж
Скорректированные задним числом продажи по цене покупателя. Приходит из недельного отчёта Wildberries о реализации.
currency · ₽
wb_unit_fact_sum_after_spp_correct_returns После спп: сумма корректных возвратов
Скорректированные задним числом возвраты по цене покупателя. Приходит из недельного отчёта Wildberries о реализации.
currency · ₽
wb_unit_fact_sum_after_spp_storno_sales После спп: сумма сторнированных продаж
Сторнированные продажи прошлых периодов по цене покупателя. Приходит из недельного отчёта Wildberries о реализации.
currency · ₽
wb_unit_fact_sum_after_spp_storno_returns После спп: сумма сторнированных возвратов
Сторнированные возвраты прошлых периодов по цене покупателя. Приходит из недельного отчёта Wildberries о реализации.
currency · ₽
wb_unit_fact_sum_after_spp_corrections_total После спп: итого сумма корректировок и сторнированийcomputed
Все правки задним числом в деньгах по ценам покупателя. Формула: «После спп: сумма корректных продаж» + «После спп: сумма корректных возвратов» + «После спп: сумма сторнированных продаж» + «После спп: сумма сторнированных возвратов».
wb_unit_fact_sum_after_spp_correct_sales + wb_unit_fact_sum_after_spp_correct_returns + wb_unit_fact_sum_after_spp_storno_sales + wb_unit_fact_sum_after_spp_storno_returns
currency · ₽
wb_unit_fact_sum_after_spp_realized После спп: сумма реализации
Сколько реализовано по ценам, которые видел покупатель, — со скидкой Wildberries. Отличается от реализации до СПП ровно на сумму этой скидки. Приходит из недельного отчёта Wildberries о реализации.
currency · ₽
wb_unit_fact_sum_after_spp_realized_clean После СПП: сумма реализации (без учета самовыкупов и раздач)computed
Реализация по ценам покупателя, очищенная от ваших собственных выкупов и раздач. Формула: «После спп: сумма реализации» − «Затраты на самовыкупы» − «Затраты на раздачи (сумма кэшбека)».
wb_unit_fact_sum_after_spp_realized - wb_unit_fact_direct_cost_self_sales_sum - wb_unit_fact_direct_cost_distribution_sum
currency · ₽
wb_unit_fact_sum_spp Сумма спп
Скидка постоянного покупателя — сколько Wildberries скинул покупателю за свой счёт. На ваши деньги напрямую не влияет: комиссия и услуги считаются от цены ДО этой скидки. Но чем она больше, тем больше заказов и, значит, логистики.
currency · ₽
wb_unit_fact_percent_spp % сппcomputed
Насколько цена покупателя ниже вашей — размер скидки Wildberries в процентах. Формула: (1 − «После спп: сумма продаж» / «До спп: сумма продаж») × 100.
(1 - wb_unit_fact_sum_after_spp_sales / wb_unit_fact_sum_before_spp_sales) * 100
percent · %
Услуги Wildberries · 26 колонок
wb_unit_fact_wb_commission_before_spp_sum Комиссия от суммы реализации до спп
Комиссия Wildberries за продажу, посчитанная от вашей цены до скидки площадки. Ставка зависит от категории товара и схемы работы. Приходит из недельного отчёта Wildberries о реализации.
currency · ₽
wb_unit_fact_percent_commission_before_spp Комиссия, %computed
Какую долю вашей реализации Wildberries забирает комиссией. Формула: «Комиссия от суммы реализации до спп» / «До спп: сумма реализации» × 100.
-wb_unit_fact_wb_commission_before_spp_sum / wb_unit_fact_sum_before_spp_realized * 100
percent · %
wb_unit_fact_wb_commission_sum Комиссияcomputed
Комиссия после скидки площадки: начисленная с вашей цены комиссия, уменьшенная на сумму скидки, которую площадка дала покупателю за свой счёт. В итог услуг не входит — она показана справочно, потому что уже учтена в комиссии до скидки. Формула: «Сумма спп» + «Комиссия от суммы реализации до спп».
wb_unit_fact_sum_spp + wb_unit_fact_wb_commission_before_spp_sum
currency · ₽
wb_unit_fact_wb_acquiring_sum Эквайринг
Удержание за приём платежа от покупателя — стоимость эквайринга по тарифу банка. Приходит из недельного отчёта Wildberries о реализации.
currency · ₽
wb_unit_fact_percent_acquiring Эквайринг, %computed
Какую долю реализации съедает приём платежей. Формула: «Эквайринг» / «До спп: сумма реализации» × 100.
-wb_unit_fact_wb_acquiring_sum / wb_unit_fact_sum_before_spp_realized * 100
percent · %
wb_unit_fact_wb_logistics_sum Логистика
Стоимость доставки заказов до покупателя и возвратов обратно. Тариф зависит от объёма упаковки, поэтому оплачивается и то, что покупатель не выкупил. Приходит из недельного отчёта Wildberries о реализации.
currency · ₽
wb_unit_fact_percent_logistics Логистика, %computed
Какую долю реализации съедает логистика. Растёт при низком проценте выкупа: дорога оплачена, а продажи нет. Формула: «Логистика» / «До спп: сумма реализации» × 100.
-wb_unit_fact_wb_logistics_sum / wb_unit_fact_sum_before_spp_realized * 100
percent · %
wb_unit_fact_wb_storage_sum Хранение
Плата за хранение товара на складах Wildberries сверх льготного периода: ставка за кубометр в сутки умножается на объём и число платных дней. Приходит из недельного отчёта Wildberries о реализации.
currency · ₽
wb_unit_fact_percent_storage Хранение, %computed
Какую долю реализации съедает хранение. Высокий процент — признак залежавшегося товара. Формула: «Хранение» / «До спп: сумма реализации» × 100.
-wb_unit_fact_wb_storage_sum / wb_unit_fact_sum_before_spp_realized * 100
percent · %
wb_unit_fact_wb_adv_bonuses_sum Справочно: реклама (бонусы)
Справочно: сколько рекламы оплачено бонусами Wildberries. В расходы отчёта не входит — бонусы не ваши деньги. Приходит из недельного отчёта Wildberries о реализации.
currency · ₽
wb_unit_fact_wb_adv_cashback_sum Справочно: реклама (кэшбек)
Справочно: сколько рекламы оплачено кэшбеком Wildberries. В расходы отчёта не входит. Приходит из недельного отчёта Wildberries о реализации.
currency · ₽
wb_unit_fact_wb_adv_balance_sum Начисления за рекламу (баланс продавца)
Реклама, оплаченная с баланса продавца. Приходит из недельного отчёта Wildberries о реализации.
currency · ₽
wb_unit_fact_wb_adv_account_sum Начисления за рекламу (счет продавца)
Реклама, оплаченная со счёта продавца. Приходит из недельного отчёта Wildberries о реализации.
currency · ₽
wb_unit_fact_wb_adv_balance_and_account_sum Начисления за рекламу (баланс + счет)computed
Все рекламные расходы, оплаченные вашими деньгами. Бонусы и кэшбек сюда не входят — они показаны отдельно как справочные. Формула: «Начисления за рекламу (баланс продавца)» + «Начисления за рекламу (счет продавца)».
wb_unit_fact_wb_adv_balance_sum + wb_unit_fact_wb_adv_account_sum
currency · ₽
wb_unit_fact_percent_adv_drr_after_spp Реклама после СПП, %computed
Тот же ДРР, но от денег, которые реально заплатил покупатель: реализация после скидки постоянного покупателя ниже, поэтому доля рекламы получается выше, чем в соседней колонке до скидки. Формула: «Начисления за рекламу (баланс + счет)» / «После спп: сумма реализации» × 100.
-(wb_unit_fact_wb_adv_balance_sum + wb_unit_fact_wb_adv_account_sum) / wb_unit_fact_sum_after_spp_realized * 100
percent · %
wb_unit_fact_percent_adv_drr_orders Реклама от заказов, %computed
ДРР к заказам: реклама сравнивается с тем, что заказали за период, а не с тем, что из заказанного успели выкупить. Отвечает на вопрос, сколько рекламы стоит рубль заказа — реклама и заказ приходятся на один период, а выкуп сдвинут по времени. Формула: «Начисления за рекламу (баланс + счет)» / «Сумма заказов» × 100.
-(wb_unit_fact_wb_adv_balance_sum + wb_unit_fact_wb_adv_account_sum) / wb_unit_fact_orders_sum * 100
percent · %
wb_unit_fact_percent_adv_drr Реклама, %computed
Доля рекламных расходов в выручке (ДРР) — сколько копеек рекламы приходится на рубль реализации. Формула: «Начисления за рекламу (баланс + счет)» / «До спп: сумма реализации» × 100.
-(wb_unit_fact_wb_adv_balance_sum + wb_unit_fact_wb_adv_account_sum) / wb_unit_fact_sum_before_spp_realized * 100
percent · %
wb_unit_fact_wb_reviews_bonuses_sum Баллы за отзывы
Удержание по программе «Баллы за отзывы»: Wildberries начисляет баллы покупателям за отзывы на ваш товар, а стоимость списывает с продавца. Приходит из недельного отчёта Wildberries о реализации.
currency · ₽
wb_unit_fact_wb_loyalty_bonuses_sum Удержания за начисленные баллы программы лояльности
Сколько Wildberries удержал за баллы, начисленные покупателям по программе лояльности при покупке вашего товара. Удерживается из выплаты и входит в сумму всех услуг. Приходит из недельного отчёта Wildberries о реализации.
currency · ₽
wb_unit_fact_wb_jam_subscription_sum Подписка Джем
Плата за подписку Джем — платный тариф Wildberries с расширенной аналитикой и инструментами продвижения. Приходит из недельного отчёта Wildberries о реализации.
currency · ₽
wb_unit_fact_wb_transit_cost_sum Транзитные поставки
Стоимость транзитной поставки: когда товар едет на склад Wildberries через их логистику, а не привозится вами напрямую. Приходит из недельного отчёта Wildberries о реализации.
currency · ₽
wb_unit_fact_wb_paid_acceptance_sum Платная приемка
Плата за приёмку поставки на склад. Возникает, когда склад загружен и приёмка перестаёт быть бесплатной; размер зависит от коэффициента склада на дату поставки. Приходит из недельного отчёта Wildberries о реализации.
currency · ₽
wb_unit_fact_wb_penalties_sum Штрафы
Штрафы Wildberries за нарушения правил работы: неверные габариты или вес, подмена вложения, нарушения при поставке и упаковке. Приходит из недельного отчёта Wildberries о реализации.
currency · ₽
wb_unit_fact_wb_additional_payments_sum Доплаты
Доплаты и перерасчёты Wildberries в вашу пользу или в пользу площадки: поправки к ранее проведённым начислениям. Приходит из недельного отчёта Wildberries о реализации.
currency · ₽
wb_unit_fact_wb_all_services_sum Сумма всех услугcomputed
Сколько всего Wildberries удержал за свои услуги: комиссия, логистика, хранение, приёмка, реклама, штрафы и прочие удержания. Расходы и удержания показаны со знаком минус, поступления — со знаком плюс: рублёвые колонки отчёта можно складывать как есть. Формула: «Комиссия от суммы реализации до спп» + «Эквайринг» + «Логистика» + «Хранение» + «Начисления за рекламу (баланс + счет)» + «Баллы за отзывы» + «Удержания за начисленные баллы программы лояльности» + «Подписка Джем» + «Транзитные поставки» + «Платная приемка» + «Штрафы» + «Доплаты».
wb_unit_fact_wb_commission_before_spp_sum + wb_unit_fact_wb_acquiring_sum + wb_unit_fact_wb_logistics_sum + wb_unit_fact_wb_storage_sum + (wb_unit_fact_wb_adv_balance_sum + wb_unit_fact_wb_adv_account_sum) + wb_unit_fact_wb_reviews_bonuses_sum + wb_unit_fact_wb_loyalty_bonuses_sum + wb_unit_fact_wb_jam_subscription_sum + wb_unit_fact_wb_transit_cost_sum + wb_unit_fact_wb_paid_acceptance_sum + wb_unit_fact_wb_penalties_sum + wb_unit_fact_wb_additional_payments_sum
currency · ₽
wb_unit_fact_percent_all_services Все услуги, %computed
Какую долю реализации забирает площадка целиком. Ключевой показатель нагрузки: если он растёт, а цены прежние, дело в логистике, хранении или рекламе. Формула: «Сумма всех услуг» / «До спп: сумма реализации» × 100.
-(wb_unit_fact_wb_commission_before_spp_sum + wb_unit_fact_wb_acquiring_sum + wb_unit_fact_wb_logistics_sum + wb_unit_fact_wb_storage_sum + (wb_unit_fact_wb_adv_balance_sum + wb_unit_fact_wb_adv_account_sum) + wb_unit_fact_wb_reviews_bonuses_sum + wb_unit_fact_wb_loyalty_bonuses_sum + wb_unit_fact_wb_jam_subscription_sum + wb_unit_fact_wb_transit_cost_sum + wb_unit_fact_wb_paid_acceptance_sum + wb_unit_fact_wb_penalties_sum + wb_unit_fact_wb_additional_payments_sum) / wb_unit_fact_sum_before_spp_realized * 100
percent · %
Перечисление · 3 колонок
wb_unit_fact_for_pay_shushary Сумма к перечислению за Шушары
Компенсация за товар, уничтоженный на складе в Шушарах. Приходит из недельного отчёта Wildberries о реализации.
currency · ₽
wb_unit_fact_for_pay Сумма к перечислениюcomputed
Сколько Wildberries должен перечислить вам за период: реализация за вычетом всех удержаний. Расходы и удержания показаны со знаком минус, поступления — со знаком плюс: рублёвые колонки отчёта можно складывать как есть. Формула: «До спп: сумма реализации» + «Сумма всех услуг».
wb_unit_fact_sum_before_spp_realized + (wb_unit_fact_wb_commission_before_spp_sum + wb_unit_fact_wb_acquiring_sum + wb_unit_fact_wb_logistics_sum + wb_unit_fact_wb_storage_sum + (wb_unit_fact_wb_adv_balance_sum + wb_unit_fact_wb_adv_account_sum) + wb_unit_fact_wb_reviews_bonuses_sum + wb_unit_fact_wb_loyalty_bonuses_sum + wb_unit_fact_wb_jam_subscription_sum + wb_unit_fact_wb_transit_cost_sum + wb_unit_fact_wb_paid_acceptance_sum + wb_unit_fact_wb_penalties_sum + wb_unit_fact_wb_additional_payments_sum)
currency · ₽
wb_unit_fact_for_pay_share К перечислению, %computed
Какая часть реализации доходит до вас деньгами. Обратная сторона доли всех услуг: чем больше забирает площадка, тем меньше эта колонка. Формула: «Сумма к перечислению» / «До спп: сумма реализации» × 100.
(wb_unit_fact_sum_before_spp_realized + (wb_unit_fact_wb_commission_before_spp_sum + wb_unit_fact_wb_acquiring_sum + wb_unit_fact_wb_logistics_sum + wb_unit_fact_wb_storage_sum + (wb_unit_fact_wb_adv_balance_sum + wb_unit_fact_wb_adv_account_sum) + wb_unit_fact_wb_reviews_bonuses_sum + wb_unit_fact_wb_loyalty_bonuses_sum + wb_unit_fact_wb_jam_subscription_sum + wb_unit_fact_wb_transit_cost_sum + wb_unit_fact_wb_paid_acceptance_sum + wb_unit_fact_wb_penalties_sum + wb_unit_fact_wb_additional_payments_sum)) / wb_unit_fact_sum_before_spp_realized * 100
percent · %
Прямые и маркетинговые расходы · 16 колонок
wb_unit_fact_direct_cost_nalog_sum Налог
Налог с реализации за период. Считается по ручной форме «Налоги». Ставка и система налогообложения задаются там же.
currency · ₽
wb_unit_fact_direct_cost_out_nalog_sum НДС (исходящий)
НДС, начисленный с вашей реализации. Считается по ручной форме «Налоги».
currency · ₽
wb_unit_fact_direct_cost_in_nalog_sum НДС (входящий)
НДС, принятый к вычету по закупке товара. Считается по ручной форме «Налоги».
currency · ₽
wb_unit_fact_direct_cost_in_and_out_nalog_sum Итого НДСcomputed
НДС к уплате: начисленный с продаж и принятый к вычету вместе. Формула: «НДС (исходящий)» + «НДС (входящий)».
wb_unit_fact_direct_cost_out_nalog_sum + wb_unit_fact_direct_cost_in_nalog_sum
currency · ₽
wb_unit_fact_direct_cost_sebes_sum Себестоимость реализованного товара
Себестоимость проданного товара за период. Считается по ручной форме «Себестоимость». Если колонка пустая или заметно ниже ожидаемой — проверьте, что себестоимость заполнена по всем артикулам и размерам.
currency · ₽
wb_unit_fact_percent_sebes Себестоимость, %computed
Какую долю вашей цены составляет закупка товара. Чем выше процент, тем меньше пространства для скидок и рекламы. Формула: «Себестоимость реализованного товара» / «До спп: сумма реализации» × 100.
-wb_unit_fact_direct_cost_sebes_sum / wb_unit_fact_sum_before_spp_realized * 100
percent · %
wb_unit_fact_direct_cost_shushary_sebes_sum Себестоимость уничтоженного товара (Шушары)
Себестоимость товара, уничтоженного на складе в Шушарах. Считается по ручной форме «Себестоимость».
currency · ₽
wb_unit_fact_direct_cost_self_sales_sebes_sum Себестоимость самовыкуповленного товара
Себестоимость товара, выкупленного вами самими. Считается по ручной форме «Себестоимость».
currency · ₽
wb_unit_fact_percent_self_sales_before_spp Самовыкупы до СПП, %computed
Какую долю вашей реализации составляют затраты на самовыкупы. Формула: «Затраты на самовыкупы» / «До спп: сумма реализации» × 100.
-wb_unit_fact_direct_cost_self_sales_sum / wb_unit_fact_sum_before_spp_realized * 100
percent · %
wb_unit_fact_percent_self_sales_after_spp Самовыкупы после СПП, %computed
Какую долю реализации по ценам покупателя составляют затраты на самовыкупы. Формула: «Затраты на самовыкупы» / «После спп: сумма реализации» × 100.
-wb_unit_fact_direct_cost_self_sales_sum / wb_unit_fact_sum_after_spp_realized * 100
percent · %
wb_unit_fact_direct_cost_self_sales_sum Затраты на самовыкупы
Сколько вы потратили на самовыкупы. Берётся из ручной формы «Самовыкупы».
currency · ₽
wb_unit_fact_percent_distributions_before_spp Раздачи до СПП, %computed
Какую долю вашей реализации составляют затраты на раздачи. Формула: «Затраты на раздачи (сумма кэшбека)» / «До спп: сумма реализации» × 100.
-wb_unit_fact_direct_cost_distribution_sum / wb_unit_fact_sum_before_spp_realized * 100
percent · %
wb_unit_fact_percent_distributions_after_spp Раздачи после СПП, %computed
Какую долю реализации по ценам покупателя составляют затраты на раздачи. Формула: «Затраты на раздачи (сумма кэшбека)» / «После спп: сумма реализации» × 100.
-wb_unit_fact_direct_cost_distribution_sum / wb_unit_fact_sum_after_spp_realized * 100
percent · %
wb_unit_fact_direct_cost_distribution_sum Затраты на раздачи (сумма кэшбека)
Сколько вы потратили на раздачи — кэшбек покупателям за выкуп. Берётся из ручной формы «Раздачи».
currency · ₽
wb_unit_fact_direct_cost_external_marketing_sum Внешний маркетинг
Расходы на продвижение вне Wildberries: блогеры, внешний трафик, реклама на других площадках. Берётся из ручной формы «Операционные расходы».
currency · ₽
wb_unit_fact_percent_external_marketing Внешний маркетинг, %computed
Какую долю реализации вы вкладываете во внешнее продвижение. Формула: «Внешний маркетинг» / «До спп: сумма реализации» × 100.
-wb_unit_fact_direct_cost_external_marketing_sum / wb_unit_fact_sum_before_spp_realized * 100
percent · %
Прибыль · 6 колонок
wb_unit_fact_profit_sum Маржинальная прибыльcomputed
Маржинальная прибыль: реализация за вычетом услуг Wildberries, себестоимости, налога и маркетинговых расходов. То, что остаётся до постоянных расходов бизнеса. Формула: «До спп: сумма реализации» + «Сумма всех услуг» + «Себестоимость реализованного товара» + «Налог» + «Итого НДС» + «Затраты на самовыкупы» − «Себестоимость самовыкуповленного товара» + «Затраты на раздачи (сумма кэшбека)» + «Внешний маркетинг».
wb_unit_fact_sum_before_spp_realized + (wb_unit_fact_wb_commission_before_spp_sum + wb_unit_fact_wb_acquiring_sum + wb_unit_fact_wb_logistics_sum + wb_unit_fact_wb_storage_sum + (wb_unit_fact_wb_adv_balance_sum + wb_unit_fact_wb_adv_account_sum) + wb_unit_fact_wb_reviews_bonuses_sum + wb_unit_fact_wb_loyalty_bonuses_sum + wb_unit_fact_wb_jam_subscription_sum + wb_unit_fact_wb_transit_cost_sum + wb_unit_fact_wb_paid_acceptance_sum + wb_unit_fact_wb_penalties_sum + wb_unit_fact_wb_additional_payments_sum) + wb_unit_fact_direct_cost_sebes_sum + wb_unit_fact_direct_cost_nalog_sum + (wb_unit_fact_direct_cost_out_nalog_sum + wb_unit_fact_direct_cost_in_nalog_sum) + wb_unit_fact_direct_cost_self_sales_sum - wb_unit_fact_direct_cost_self_sales_sebes_sum + wb_unit_fact_direct_cost_distribution_sum + wb_unit_fact_direct_cost_external_marketing_sum
currency · ₽
wb_unit_fact_share_of_profit Вклад артикула в общую сумму маржинальной прибылиcomputed
Какую долю всей прибыли за период дал этот товар. У убыточных товаров доля отрицательная — по этой колонке их удобно находить.
wb_unit_fact_share_of_profit = wb_unit_fact_profit_sum / сумма wb_unit_fact_profit_sum по всем строкам * 100
percent · %
wb_unit_fact_percent_profit_before_spp Маржинальность до СППcomputed
Маржинальность: сколько копеек прибыли остаётся с рубля вашей реализации. Формула: «Маржинальная прибыль» / «До спп: сумма реализации» × 100.
(wb_unit_fact_sum_before_spp_realized + (wb_unit_fact_wb_commission_before_spp_sum + wb_unit_fact_wb_acquiring_sum + wb_unit_fact_wb_logistics_sum + wb_unit_fact_wb_storage_sum + (wb_unit_fact_wb_adv_balance_sum + wb_unit_fact_wb_adv_account_sum) + wb_unit_fact_wb_reviews_bonuses_sum + wb_unit_fact_wb_loyalty_bonuses_sum + wb_unit_fact_wb_jam_subscription_sum + wb_unit_fact_wb_transit_cost_sum + wb_unit_fact_wb_paid_acceptance_sum + wb_unit_fact_wb_penalties_sum + wb_unit_fact_wb_additional_payments_sum) + wb_unit_fact_direct_cost_sebes_sum + wb_unit_fact_direct_cost_nalog_sum + (wb_unit_fact_direct_cost_out_nalog_sum + wb_unit_fact_direct_cost_in_nalog_sum) + wb_unit_fact_direct_cost_self_sales_sum - wb_unit_fact_direct_cost_self_sales_sebes_sum + wb_unit_fact_direct_cost_distribution_sum + wb_unit_fact_direct_cost_external_marketing_sum) / wb_unit_fact_sum_before_spp_realized * 100
percent · %
wb_unit_fact_percent_profit_after_spp Маржинальность после СППcomputed
Маржинальность, посчитанная от цены, которую заплатил покупатель. Формула: «Маржинальная прибыль» / «После спп: сумма реализации» × 100.
(wb_unit_fact_sum_before_spp_realized + (wb_unit_fact_wb_commission_before_spp_sum + wb_unit_fact_wb_acquiring_sum + wb_unit_fact_wb_logistics_sum + wb_unit_fact_wb_storage_sum + (wb_unit_fact_wb_adv_balance_sum + wb_unit_fact_wb_adv_account_sum) + wb_unit_fact_wb_reviews_bonuses_sum + wb_unit_fact_wb_loyalty_bonuses_sum + wb_unit_fact_wb_jam_subscription_sum + wb_unit_fact_wb_transit_cost_sum + wb_unit_fact_wb_paid_acceptance_sum + wb_unit_fact_wb_penalties_sum + wb_unit_fact_wb_additional_payments_sum) + wb_unit_fact_direct_cost_sebes_sum + wb_unit_fact_direct_cost_nalog_sum + (wb_unit_fact_direct_cost_out_nalog_sum + wb_unit_fact_direct_cost_in_nalog_sum) + wb_unit_fact_direct_cost_self_sales_sum - wb_unit_fact_direct_cost_self_sales_sebes_sum + wb_unit_fact_direct_cost_distribution_sum + wb_unit_fact_direct_cost_external_marketing_sum) / wb_unit_fact_sum_after_spp_realized * 100
percent · %
wb_unit_fact_percent_profitability Рентабельность товараcomputed
Рентабельность: сколько прибыли приносит каждый рубль, вложенный в закупку товара. Формула: «Маржинальная прибыль» / «Себестоимость реализованного товара» × 100.
(wb_unit_fact_sum_before_spp_realized + (wb_unit_fact_wb_commission_before_spp_sum + wb_unit_fact_wb_acquiring_sum + wb_unit_fact_wb_logistics_sum + wb_unit_fact_wb_storage_sum + (wb_unit_fact_wb_adv_balance_sum + wb_unit_fact_wb_adv_account_sum) + wb_unit_fact_wb_reviews_bonuses_sum + wb_unit_fact_wb_loyalty_bonuses_sum + wb_unit_fact_wb_jam_subscription_sum + wb_unit_fact_wb_transit_cost_sum + wb_unit_fact_wb_paid_acceptance_sum + wb_unit_fact_wb_penalties_sum + wb_unit_fact_wb_additional_payments_sum) + wb_unit_fact_direct_cost_sebes_sum + wb_unit_fact_direct_cost_nalog_sum + (wb_unit_fact_direct_cost_out_nalog_sum + wb_unit_fact_direct_cost_in_nalog_sum) + wb_unit_fact_direct_cost_self_sales_sum - wb_unit_fact_direct_cost_self_sales_sebes_sum + wb_unit_fact_direct_cost_distribution_sum + wb_unit_fact_direct_cost_external_marketing_sum) / -wb_unit_fact_direct_cost_sebes_sum * 100
percent · %
wb_unit_fact_markup_coefficient Коэффициент наценкиcomputed
Во сколько раз ваша цена выше себестоимости. Коэффициент 3 означает продажу втрое дороже закупки. Считается по цене до скидки площадки — скидку даёт Wildberries, к вашей наценке она отношения не имеет. Формула: «До спп: сумма реализации» / «Себестоимость реализованного товара».
wb_unit_fact_sum_before_spp_realized / -wb_unit_fact_direct_cost_sebes_sum
number
Показатели на единицу реализованного товара · 19 колонок
wb_unit_fact_avg_check_before_spp До спп: средний чек продажиcomputed
Средняя цена одной продажи по вашим ценам. Формула: «До спп: сумма продаж» / «Продаж».
wb_unit_fact_sum_before_spp_sales / wb_unit_fact_count_sales
currency · ₽
wb_unit_fact_avg_check_after_spp После спп: средний чек продажиcomputed
Средняя цена одной продажи по ценам покупателя — со скидкой Wildberries. Формула: «После спп: сумма продаж» / «Продаж».
wb_unit_fact_sum_after_spp_sales / wb_unit_fact_count_sales
currency · ₽
wb_unit_fact_commission_per_unit Комиссия на единицуcomputed
Сколько комиссии приходится на одну реализованную единицу. Формула: «Комиссия от суммы реализации до спп» / «Итого реализовано товаров».
wb_unit_fact_wb_commission_before_spp_sum / wb_unit_fact_count_realized
currency · ₽
wb_unit_fact_acquiring_per_unit Эквайринг на единицуcomputed
Сколько эквайринга приходится на одну реализованную единицу. Формула: «Эквайринг» / «Итого реализовано товаров».
wb_unit_fact_wb_acquiring_sum / wb_unit_fact_count_realized
currency · ₽
wb_unit_fact_logistics_per_unit Логистика на единицуcomputed
Сколько логистики приходится на одну реализованную единицу. Удобно сравнивать с ценой товара: у дешёвых позиций доставка часто съедает всю маржу. Формула: «Логистика» / «Итого реализовано товаров».
wb_unit_fact_wb_logistics_sum / wb_unit_fact_count_realized
currency · ₽
wb_unit_fact_storage_per_unit Хранение на единицуcomputed
Сколько хранения приходится на одну реализованную единицу. Формула: «Хранение» / «Итого реализовано товаров».
wb_unit_fact_wb_storage_sum / wb_unit_fact_count_realized
currency · ₽
wb_unit_fact_adv_per_unit Реклама на единицуcomputed
Сколько рекламы приходится на одну реализованную единицу. Формула: («Начисления за рекламу (баланс продавца)» + «Начисления за рекламу (счет продавца)») / «Итого реализовано товаров».
(wb_unit_fact_wb_adv_balance_sum + wb_unit_fact_wb_adv_account_sum) / wb_unit_fact_count_realized
currency · ₽
wb_unit_fact_reviews_per_unit Баллы за отзывы на единицуcomputed
Сколько удержаний за баллы по отзывам приходится на единицу. Формула: «Баллы за отзывы» / «Итого реализовано товаров».
wb_unit_fact_wb_reviews_bonuses_sum / wb_unit_fact_count_realized
currency · ₽
wb_unit_fact_jam_per_unit Подписка Джем на единицуcomputed
Сколько стоимости подписки Джем приходится на единицу. Формула: «Подписка Джем» / «Итого реализовано товаров».
wb_unit_fact_wb_jam_subscription_sum / wb_unit_fact_count_realized
currency · ₽
wb_unit_fact_transit_per_unit Транзитные поставки на единицуcomputed
Сколько транзитной поставки приходится на единицу. Формула: «Транзитные поставки» / «Итого реализовано товаров».
wb_unit_fact_wb_transit_cost_sum / wb_unit_fact_count_realized
currency · ₽
wb_unit_fact_paid_acceptance_per_unit Платная приемка на единицуcomputed
Сколько платной приёмки приходится на единицу. Формула: «Платная приемка» / «Итого реализовано товаров».
wb_unit_fact_wb_paid_acceptance_sum / wb_unit_fact_count_realized
currency · ₽
wb_unit_fact_penalties_per_unit Штрафы на единицуcomputed
Сколько штрафов приходится на единицу. Формула: «Штрафы» / «Итого реализовано товаров».
wb_unit_fact_wb_penalties_sum / wb_unit_fact_count_realized
currency · ₽
wb_unit_fact_additional_payments_per_unit Доплаты на единицуcomputed
Сколько доплат приходится на единицу. Формула: «Доплаты» / «Итого реализовано товаров».
wb_unit_fact_wb_additional_payments_sum / wb_unit_fact_count_realized
currency · ₽
wb_unit_fact_all_services_per_unit Все услуги Wildberries на единицуcomputed
Сколько всех услуг Wildberries приходится на одну реализованную единицу — полная стоимость площадки в пересчёте на товар. Формула: «Сумма всех услуг» / «Итого реализовано товаров».
(wb_unit_fact_wb_commission_before_spp_sum + wb_unit_fact_wb_acquiring_sum + wb_unit_fact_wb_logistics_sum + wb_unit_fact_wb_storage_sum + (wb_unit_fact_wb_adv_balance_sum + wb_unit_fact_wb_adv_account_sum) + wb_unit_fact_wb_reviews_bonuses_sum + wb_unit_fact_wb_loyalty_bonuses_sum + wb_unit_fact_wb_jam_subscription_sum + wb_unit_fact_wb_transit_cost_sum + wb_unit_fact_wb_paid_acceptance_sum + wb_unit_fact_wb_penalties_sum + wb_unit_fact_wb_additional_payments_sum) / wb_unit_fact_count_realized
currency · ₽
wb_unit_fact_for_pay_per_unit Перечисление на единицуcomputed
Сколько денег вы получаете с одной реализованной единицы. Формула: «Сумма к перечислению» / «Итого реализовано товаров».
(wb_unit_fact_sum_before_spp_realized + (wb_unit_fact_wb_commission_before_spp_sum + wb_unit_fact_wb_acquiring_sum + wb_unit_fact_wb_logistics_sum + wb_unit_fact_wb_storage_sum + (wb_unit_fact_wb_adv_balance_sum + wb_unit_fact_wb_adv_account_sum) + wb_unit_fact_wb_reviews_bonuses_sum + wb_unit_fact_wb_loyalty_bonuses_sum + wb_unit_fact_wb_jam_subscription_sum + wb_unit_fact_wb_transit_cost_sum + wb_unit_fact_wb_paid_acceptance_sum + wb_unit_fact_wb_penalties_sum + wb_unit_fact_wb_additional_payments_sum)) / wb_unit_fact_count_realized
currency · ₽
wb_unit_fact_nalog_per_unit Налог на единицуcomputed
Сколько налога приходится на одну реализованную единицу. Формула: «Налог» / «Итого реализовано товаров».
wb_unit_fact_direct_cost_nalog_sum / wb_unit_fact_count_realized
currency · ₽
wb_unit_fact_nds_per_unit НДС на единицуcomputed
Сколько НДС приходится на одну реализованную единицу. Формула: «Итого НДС» / «Итого реализовано товаров».
(wb_unit_fact_direct_cost_out_nalog_sum + wb_unit_fact_direct_cost_in_nalog_sum) / wb_unit_fact_count_realized
currency · ₽
wb_unit_fact_sebes_per_unit Себестоимость на единицуcomputed
Сколько себестоимости приходится на одну реализованную единицу. Формула: «Себестоимость реализованного товара» / «Итого реализовано товаров».
wb_unit_fact_direct_cost_sebes_sum / wb_unit_fact_count_realized
currency · ₽
wb_unit_fact_profit_per_unit Прибыль на единицуcomputed
Сколько прибыли приносит одна реализованная единица. Формула: «Маржинальная прибыль» / «Итого реализовано товаров».
(wb_unit_fact_sum_before_spp_realized + (wb_unit_fact_wb_commission_before_spp_sum + wb_unit_fact_wb_acquiring_sum + wb_unit_fact_wb_logistics_sum + wb_unit_fact_wb_storage_sum + (wb_unit_fact_wb_adv_balance_sum + wb_unit_fact_wb_adv_account_sum) + wb_unit_fact_wb_reviews_bonuses_sum + wb_unit_fact_wb_loyalty_bonuses_sum + wb_unit_fact_wb_jam_subscription_sum + wb_unit_fact_wb_transit_cost_sum + wb_unit_fact_wb_paid_acceptance_sum + wb_unit_fact_wb_penalties_sum + wb_unit_fact_wb_additional_payments_sum) + wb_unit_fact_direct_cost_sebes_sum + wb_unit_fact_direct_cost_nalog_sum + (wb_unit_fact_direct_cost_out_nalog_sum + wb_unit_fact_direct_cost_in_nalog_sum) + wb_unit_fact_direct_cost_self_sales_sum - wb_unit_fact_direct_cost_self_sales_sebes_sum + wb_unit_fact_direct_cost_distribution_sum + wb_unit_fact_direct_cost_external_marketing_sum) / wb_unit_fact_count_realized
currency · ₽

Пример запроса

curl https://web.metriclab.ru/v1/wb/unit-fact \
  -H "Authorization: Bearer ml_live_xxxxxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{
    "cabinets":  ["12345"],
    "date_from": "2026-08-31",
    "date_to":   "2026-09-13",
    "limit":     500
  }'
import requests

KEY  = "ml_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
HOST = "https://web.metriclab.ru"

resp = requests.post(
    f"{HOST}/v1/wb/unit-fact",
    headers={"Authorization": f"Bearer {KEY}"},
    json={
        "cabinets":  ["12345"],
        "date_from": "2026-08-31",
        "date_to":   "2026-09-13",
        "limit":     500,
    },
    timeout=180,
)
body = resp.json()
for note in body["meta"]["cabinets_notes"]:
    print(note["cabinet"], note["note"])
for row in body["data"]["rows"][:5]:
    print(row["article_wb"], row["wb_unit_fact_profit_sum"])

Пример ответа · 200 OK

{
  "status": "success",
  "data": {
    "total": 412,
    "rows": [
      {
        "cabinet": "Юрлицо-w123",
        "article_wb": "176003726", "size": "0",
        "article_supplier": "ART-001", "brand": "BrandX",
        "abc_realization": "A", "abc_profit": "B",
        "wb_unit_fact_sum_before_spp_realized": 184300,
        "wb_unit_fact_for_pay": 121870.5,
        "wb_unit_fact_profit_sum": 38412.7,
        "wb_unit_fact_percent_profit_before_spp": 20.8,
        …остальные колонки листа…
      }
    ]
  },
  "meta": {
    "marketplace": "wb", "dataset": "unit-fact",
    "stocks": {"latest": "2026-09-14", "in_period": "2026-09-13"},
    "cabinets_notes": [{
      "cabinet": "Юрлицо-w123",
      "daily_available_from": "2026-08-25",
      "weeks": {"by_day": […], "whole_week": [], "skipped": []},
      "note": "Ежедневный Unit-факт по кабинету доступен с 25.08.2026. По дням вошли недели: 31.08.2026–06.09.2026, 07.09.2026–13.09.2026."
    }],
    "count": 412, "total": 412, "limit": 500, "offset": 0
  }
}

POST /v1/ozon/unit-fact

Лист «Unit-факт» из виджета «Таблица» на сайте — строка на SKU за период со всеми колонками листа: реализация, услуги площадки по статьям, себестоимость, налог и НДС, сумма к перечислению, прибыль, маржинальность, доли, показатели на единицу, ABC-классы и остатки. Считается тем же кодом, что и таблица на сайте, поэтому цифры совпадают с ней.

POST https://web.metriclab.ru/v1/ozon/unit-fact
Рекомендации и частые ошибки
  • Разреза по датам нет. Строка — товар за весь период целиком. Динамику по дням даёт /v1/ozon/metrics.
  • Колонки-формулы, доли и ABC приходят уже посчитанными (в отличие от metrics, где производные считает клиент). Формула каждой такой колонки показана в каталоге ниже.
  • Знаки как на листе: начисления Ozon идут со своим знаком (услуги — отрицательные), доли — от реализации до соинвеста.
  • Заметки по товару за период приходят в поле notes строки — массив {date, text}.
  • Остатки — снимок, а не сумма за период. В колонках остатков — значение на самую свежую дату (meta.stocks.latest); на последнюю дату внутри периода — те же колонки с суффиксом __in_period (есть, только когда даты различаются).
  • Ответ большой: до 5000 строк по 150–200 колонок. Ограничивайте выборку filters и листайте через offset; полное число строк — в data.total.
  • Метод тяжёлый: лимит 3 запроса/мин.

Тело запроса

cabinetsrequired
string[] Массив client_id кабинетов. Должны принадлежать владельцу ключа (GET /v1/cabinets). Пустой массив [] — все доступные.
date_fromrequired
string Начало периода YYYY-MM-DD, включительно.
date_torequired
string Конец периода YYYY-MM-DD, включительно.
filters
object Фильтры на товары — те же, что у /v1/ozon/metrics (skus, brands, subjects, article_suppliers, grouping_level_1..3, group_name, responsible).
limit
integer Сколько строк вернуть. По умолчанию и максимум — 5000. Строки идут по кабинету и товару (SKU).
offset
integer Смещение для постраничной выборки. По умолчанию 0.

Структура ответа

status
string"success" при 200.
data
objectСтроки листа.
rows
object[]Строка на SKU. Ключи — колонки листа из каталога ниже: cabinet, article_ozon (SKU), article_supplier, brand, subject, группы товаров и далее все показатели. Колонки-формулы, доли и ABC — уже посчитаны (null, если не считается: нет слагаемого или деление на ноль).
total
integerВсего строк (до limit/offset).
meta
objectЭхо параметров и служебные сведения.
stocks
objectlatest — дата снимка остатков в колонках остатков; in_period — дата снимка в колонках с суффиксом __in_period (null, если совпадает с latest или данных нет).
count, total, limit, offset
integerСтрок в ответе, всего, и параметры пагинации.

Каталог колонок · Ozon

Ключи колонок в строках ответа. Блоки и порядок — как на листе «Unit-факт» в MetricLab. Колонки с тегом computed считаются из других (формула показана рядом) и приходят в ответе уже посчитанными. Актуальный список — GET /v1/ozon/unit-fact-catalog.

О товаре · 11 колонок
grouping_level_1 Уровень группировки 1
Группировка 1 из ручной формы «Группы товаров».
text
grouping_level_2 Уровень группировки 2
Группировка 2 из ручной формы «Группы товаров».
text
grouping_level_3 Уровень группировки 3
Группировка 3 из ручной формы «Группы товаров».
text
group_name Группа товаров
Название группы товаров из ручной формы «Группы товаров».
text
responsible Ответственный
Кто отвечает за товар — из ручной формы «Группы товаров».
text
cabinet Кабинет
Кабинет, к которому относится строка.
text
subject Категория
Категория товара в каталоге Ozon.
text
brand Бренд
Бренд товара из карточки.
text
article_supplier Артикул
Ваш артикул из карточки товара.
text
article_ozon SKU
Идентификатор товара в системе Ozon (SKU).
text
card_created Дата создания карточки
Когда карточка товара создана на Ozon.
text
ABC · 3 колонок
abc_realization ABC по сумме реализацииcomputed
Класс товара по накопленной доле в показателе «Сумма реализации по ценам продавца (до соинвеста)». Товары выстраиваются по убыванию значения: A — те, что дают верхнюю часть суммы, B — следующую, C — хвост. Отрицательное значение — класс D. Доли классов (по умолчанию 80 %, 15 % и 5 %) настраиваются в подписи блока.
ABC-класс по sum_before_spp_realized (A/B/C = 80/15/5 %, убыток = D)
text
abc_profit ABC по маржинальной прибылиcomputed
Класс товара по накопленной доле в показателе «Маржинальная прибыль». Товары выстраиваются по убыванию значения: A — те, что дают верхнюю часть суммы, B — следующую, C — хвост. Отрицательное значение — класс D. Доли классов (по умолчанию 80 %, 15 % и 5 %) настраиваются в подписи блока.
ABC-класс по profit_sum (A/B/C = 80/15/5 %, убыток = D)
text
abc_for_pay ABC по сумме к перечислениюcomputed
Класс товара по накопленной доле в показателе «Сумма к перечислению». Товары выстраиваются по убыванию значения: A — те, что дают верхнюю часть суммы, B — следующую, C — хвост. Отрицательное значение — класс D. Доли классов (по умолчанию 80 %, 15 % и 5 %) настраиваются в подписи блока.
ABC-класс по for_pay (A/B/C = 80/15/5 %, убыток = D)
text
Воронка продаж (движение товара в штуках) · 27 колонок
search_position Средняя позиция в поиске
Позиция карточки в результатах поиска. За период берётся лучшая (минимальная) достигнутая позиция.
number
card_views Показов
Количество показов карточки товара из Аналитика - Графики (Продажи моих товаров)
number · шт
card_clicks Кликов
Количество переходов в карточку товара из Аналитика - Графики (Продажи моих товаров)
number · шт
ozon_ctr CTRcomputed
Конверсия из показов в клики (переходы / показы * 100). Формула: «Кликов» / «Показов» × 100.
card_clicks / card_views * 100
percent · %
add_to_basket Добавлений в корзину
Количество добавлений товара в корзину из Аналитика - Графики (Продажи моих товаров)
number · шт
ozon_conversion_to_basket Конверсия в корзинуcomputed
Конверсия из переходов в добавления в корзину (добавления в корзину / переходы * 100). Формула: «Добавлений в корзину» / «Кликов» × 100.
add_to_basket / card_clicks * 100
percent · %
orders_amount Заказов
Количество заказов из Аналитика - Графики (Продажи моих товаров)
number · шт
count_self_orders Само-заказов
Сколько единиц вы заказали сами — считается по дате заказа. Заполняется в ручной форме «Самовыкупы».
number · шт
ozon_orders_amount_no_self Заказов (без учета самозаказов)
Заказы покупателей без ваших собственных.
number · шт
ozon_conversion_to_order Конверсия в заказcomputed
Конверсия из корзины в заказ (заказы / добавления в корзину * 100). Формула: «Заказов» / «Добавлений в корзину» × 100.
orders_amount / add_to_basket * 100
percent · %
count_deliveries_funnel Доставок
Сколько единиц товара доставлено покупателям за период. Если площадка не отдаёт доставки в аналитике (так бывает без подписки Premium), они считаются по статусам отправлений и относятся к дате заказа.
number · шт
count_cancellations Отмен
Сколько единиц покупатели отменили до получения заказа. Если площадка не отдаёт отмены в аналитике (так бывает без подписки Premium), они считаются по статусам отправлений и относятся к дате заказа.
number · шт
ozon_cancellation_rate % отменcomputed
Какая доля заказов отменена — покупателем, продавцом или площадкой. Высокий процент бьёт по выдаче карточки. Формула: «Отмен» / «Заказов» × 100.
count_cancellations / orders_amount * 100
percent · %
count_sales Продаж
Сколько единиц товара выкупили покупатели за период.
number · шт
count_self_sales Само-выкупов
Сколько единиц вы выкупили сами — считается по дате выкупа. Заполняется в ручной форме «Самовыкупы».
number · шт
count_distributions Раздач
Сколько единиц роздано по механикам раздач. Заполняется в ручной форме «Раздачи».
number · шт
ozon_count_sales_no_self_distrib Продаж (без учета самовыкупов и раздач)
Настоящие продажи покупателям: из всех выкупов вычтены самовыкупы и раздачи.
number · шт
count_returns Возвратов
Сколько единиц покупатели вернули за период после выкупа. Возврат уменьшает реализацию и добавляет обратную логистику. Приходит из отчёта Ozon о начислениях.
number · шт
ozon_return_rate % возвратовcomputed
Какая часть суммы продаж вернулась обратно возвратами. Формула: «Сумма возвратов» / «Сумма продаж» × 100.
-sum_before_spp_returns / sum_before_spp_sales * 100
percent · %
count_realized Итого реализовано товаров
Сколько единиц товара реализовано за период.
number · шт
ozon_realization_rate % выкупа с учетом возвратовcomputed
Какая часть отправленных товаров осталась у покупателей. Формула: «Итого реализовано товаров» / («Продаж» + «Отмен») × 100.
count_realized / (count_sales + count_cancellations) * 100
percent · %
ozon_cpm Стоимость 1000 показовcomputed
Во сколько обходится тысяча показов рекламы. Формула: «Рекламные расходы» / «Показов» × 1000.
ozon_total_advertising_sum / card_views * 1000
currency · ₽
ozon_cpc Стоимость кликаcomputed
Во сколько обходится один переход в карточку из рекламы. Формула: «Рекламные расходы» / «Кликов».
ozon_total_advertising_sum / card_clicks
currency · ₽
ozon_cost_per_basket Стоимость корзиныcomputed
Во сколько обходится одно добавление товара в корзину. Формула: «Рекламные расходы» / «Добавлений в корзину».
ozon_total_advertising_sum / add_to_basket
currency · ₽
ozon_cost_per_order Стоимость заказаcomputed
Стоимость одного заказа (расходы на РК / общее количество заказов по кабинету). Формула: «Расходы РК (все)» / «Заказов».
ozon_total_advertising_sum / orders_amount
currency · ₽
ozon_count_sales_rf Продаж, РФ
Сколько единиц товара выкупили покупатели внутри РФ.
number · шт
ozon_count_sales_cis Продаж, другие страны
Сколько единиц товара выкупили покупатели за пределами РФ.
number · шт
Остатки · 5 колонок
ozon_stock_count Остатков на складах Ozon
Сколько единиц товара лежит на складах Ozon и доступно к продаже. Это остаток на дату, а не за период.
number
ozon_stock_in_supply Товаров в поставках
Сколько единиц едет на склады Ozon и ещё не доступно к продаже. Это остаток на дату, а не за период.
number
ozon_stock_sebes Себестоимость остатков
Сколько денег лежит на складах в себестоимости.
currency
ozon_stock_price Цена реализации остатков (по ценам продавца до соинвеста)
За сколько можно продать остаток по вашим ценам до соинвеста Ozon.
currency
ozon_stock_markup_coefficient Коэффициент наценки на остатокcomputed
Во сколько раз остаток дороже в продаже, чем в закупке. Формула: «Цена реализации остатков (по ценам продавца до соинвеста)» / «Себестоимость остатков».
ozon_stock_price / ozon_stock_sebes
number
Рубли · 19 колонок
orders_sum Сумма заказов
Сумма заказов из Аналитика - Графики (Продажи моих товаров)
currency · ₽
ozon_cancellations_sum Сумма отменcomputed
Отменённые заказы в деньгах: количество отмен по средней цене продажи. Формула: «Отмен» × «Сумма продаж» / «Продаж».
count_cancellations * sum_before_spp_sales / count_sales
currency · ₽
sum_before_spp_sales Сумма продаж
Сумма выкупленных товаров по цене до соинвеста Ozon — по всем покупателям сразу, и внутри РФ, и за её пределами.
currency · ₽
ozon_sum_before_spp_sales_rf Сумма продаж, РФ
Часть суммы продаж, которую выкупили покупатели внутри РФ.
currency · ₽
ozon_sum_before_spp_sales_cis Сумма продаж, другие страны
Часть суммы продаж, которую выкупили покупатели за пределами РФ. Такие продажи Ozon оформляет выкупом товара у вас.
currency · ₽
sum_before_spp_returns Сумма возвратов
Сумма возвращённых товаров по цене до соинвеста Ozon.
currency · ₽
sum_before_spp_realized Сумма реализации по ценам продавца (до соинвеста)
Стоимость реализованного товара до вычета СПП (соинвестирования). Включает продажи и в РФ, и в другие страны.
currency · ₽
ozon_article_realization_share Вклад артикула в общую сумму реализацииcomputed
Какую долю всей реализации за период дал этот товар. Доли всех товаров складываются в 100%.
ozon_article_realization_share = sum_before_spp_realized / сумма sum_before_spp_realized по всем строкам * 100
percent · %
ozon_sum_balls_sales Баллы за скидки
Баллы за скидки по проданным товарам: часть скидки покупателя, которую оплачивает продавец.
currency · ₽
ozon_sum_balls_returns Баллы за скидки (возврат)
Баллы за скидки по возвращённым товарам: возврат ранее оплаченной продавцом части скидки.
currency · ₽
ozon_sum_loyalty_sales Выплаты по механикам лояльности партнеров
Выплаты по акциям и механикам лояльности партнёров, в которых участвовал проданный товар.
currency · ₽
ozon_sum_loyalty_returns Выплаты по механикам лояльности партнеров (возврат)
Возврат выплат по акциям и механикам лояльности партнёров за возвращённые товары.
currency · ₽
sum_spp Итого сумма соинвеста
Соинвестирование Ozon в скидку: сколько площадка скинула покупателю за свой счёт. Продавцу это компенсируется баллами, которыми можно оплачивать комиссии и услуги. Комиссия при этом считается от цены ДО соинвеста. Только по РФ: за её пределами Ozon скидку не софинансирует — он выкупает товар дешевле, и эта разница считается комиссией.
currency · ₽
ozon_spp_share_of_sales Соинвест, %computed
Какую часть суммы реализации до соинвеста компенсирует Ozon. Формула: «Итого сумма соинвеста» / «Сумма реализации до соинвеста, РФ» × 100.
sum_spp / ozon_sum_before_spp_realized_rf * 100
percent · %
sum_after_spp_realized Сумма реализации с учетом соинвеста
Стоимость реализованного товара с учётом СПП (соинвестирования). Включает продажи и в РФ, и в другие страны.
currency · ₽
ozon_sum_before_spp_realized_rf Сумма реализации до соинвеста, РФ
Часть суммы реализации, которая приходится на продажи внутри РФ.
currency · ₽
ozon_sum_before_spp_realized_cis Сумма реализации до соинвеста, другие страны
Часть суммы реализации, которая приходится на продажи покупателям за пределами РФ, по вашим ценам — до того, как Ozon возьмёт на себя часть стоимости.
currency · ₽
ozon_sum_after_spp_realized_rf Сумма реализации с учетом соинвеста, РФ
Часть суммы реализации с учётом соинвестирования, которая приходится на продажи внутри РФ.
currency · ₽
ozon_sum_after_spp_realized_cis Сумма реализации с уч. выкупного коэф., другие страны
Сколько Ozon перечисляет за товар, проданный за пределы РФ, — ваша цена за вычетом выкупного коэффициента. Соинвестирования и компенсации баллами по таким продажам нет: площадка просто выкупает товар дешевле.
currency · ₽
Услуги Ozon · 47 колонок
ozon_commission_sum Комиссия Ozon
Комиссия площадки за продажу: процент от цены товара по его категории. Складывается из двух частей — комиссии по РФ и того, что Ozon оставляет себе на продажах за её пределы (выкупной коэффициент).
currency · ₽
ozon_commission_sum_rf Комиссия Ozon, РФ
Комиссия площадки за продажи внутри РФ: процент от цены товара по его категории.
currency · ₽
ozon_commission_sum_cis Комиссия Ozon, другие страны
Комиссия площадки за продажи за пределы РФ. Отдельной строкой Ozon её не показывает: он выкупает товар по цене ниже вашей, и разница — выкупной коэффициент — и есть то, что площадка оставляет себе.
currency · ₽
ozon_avg_commission_percent Комиссия, %computed
Какую часть суммы реализации до соинвеста забирает комиссия Ozon. Формула: «Комиссия Ozon» / «Сумма реализации по ценам продавца (до соинвеста)» × 100.
-ozon_commission_sum / sum_before_spp_realized * 100
percent · %
ozon_avg_commission_percent_rf Комиссия РФ, %computed
Какую часть реализации внутри РФ забирает комиссия площадки. Формула: «Комиссия Ozon, РФ» / «Сумма реализации до соинвеста, РФ» × 100.
-ozon_commission_sum_rf / ozon_sum_before_spp_realized_rf * 100
percent · %
ozon_avg_commission_percent_cis Комиссия другие страны, %computed
Какую часть реализации за пределами РФ забирает выкупной коэффициент площадки. Формула: «Комиссия Ozon, другие страны» / «Сумма реализации до соинвеста, другие страны» × 100.
-ozon_commission_sum_cis / ozon_sum_before_spp_realized_cis * 100
percent · %
ozon_logistics_total Логистика Ozon
Вся логистика Ozon: доставка до покупателя, обратная дорога и перемещения между складами. Складывается из: «Сборка заказа», «Обработка отправления», «Логистика», «Магистраль», «Последняя миля», «Доставка партнером Ozon», «Услуги доставки партнерами Ozon по схеме realFBS», «Обработка возврата», «Обработка отмененного или невостребованного товара», «Обработка невыкупленного товара», «Обратная магистраль», «Обратная логистика», «Услуги партнеров Ozon».
currency · ₽
ozon_logistics_share Логистика, %computed
Какую долю реализации съедает логистика. Растёт при низком проценте выкупа: дорога оплачена, а продажи нет. Формула: «Логистика Ozon» / «Сумма реализации по ценам продавца (до соинвеста)» × 100.
-ozon_logistics_total / sum_before_spp_realized * 100
percent · %
ozon_20_placement_of_goods_on_the_warehouse Размещение товаров на складе (платное хранение)
Списание за платное хранение товара на складе Ozon: зависит от занятого объёма и срока хранения.
currency · ₽
ozon_paid_storage_share Хранение, %computed
Какую часть суммы реализации до соинвеста забирает платное хранение. Формула: «Размещение товаров на складе (платное хранение)» / «Сумма реализации по ценам продавца (до соинвеста)» × 100.
-ozon_20_placement_of_goods_on_the_warehouse / sum_before_spp_realized * 100
percent · %
ozon_additional_services_total Дополнительные услуги Ozon
Дополнительные услуги площадки, не вошедшие в другие блоки. Складывается из: «Premium-подписка», «Рассрочка, досрочные выплаты», «Транзитные поставки (кросс-докинг)», «Дополнительное вознаграждение за доставку», «Перемещение товаров между складами Ozon», «Бронирование места на складе», «Размещение товаров на складе (хранение)», «Обработка брака, излишков», «Подготовка товаров к возврату», «Утилизация товара», «Абонентское обслуживание по продвижению товаров», «Услуга продвижения бренда», «Продвижение Premium», «Продвижение бонусы продавца», «Продвижение звездные товары», «Генерация видеообложки», «Приобретение отзывов», «Закрепление отзыва», «Услуги модерации товаров», «Операционные ошибки продавца», «Прочие услуги».
currency · ₽
ozon_additional_services_share Доп. услуги, %computed
Какую долю реализации съедают дополнительные услуги площадки. Формула: «Дополнительные услуги Ozon» / «Сумма реализации по ценам продавца (до соинвеста)» × 100.
-ozon_additional_services_total / sum_before_spp_realized * 100
percent · %
adv_sum_ozk_search Оплата за клик (поиск)
Расходы на «Оплату за клик» в поиске: списывается за каждый переход покупателя по вашему объявлению в поисковой выдаче. Приходит из отчёта Ozon о начислениях.
currency · ₽
ozon_drr_ozk_search ДРР Оплата за клик (поиск)computed
Какую часть суммы реализации до соинвеста съедает продвижение в поиске. Формула: «Оплата за клик (поиск)» / «Сумма реализации по ценам продавца (до соинвеста)» × 100.
adv_sum_ozk_search / sum_before_spp_realized * 100
percent · %
adv_sum_ozk_search_rec Оплата за клик (поиск + рекомендации)
Расходы на ОЗК (Оплата за клик в поиске и рекомендациях)
currency · ₽
ozon_drr_ozk_search_rec ДРР Оплата за клик (поиск + рекомендации)computed
Какую часть суммы реализации до соинвеста съедает продвижение в поиске и рекомендациях. Формула: «Оплата за клик (поиск + рекомендации)» / «Сумма реализации по ценам продавца (до соинвеста)» × 100.
adv_sum_ozk_search_rec / sum_before_spp_realized * 100
percent · %
adv_sum_special Спецразмещение
Расходы на спецразмещение (прежнее название — «Вывод в топ»): платный показ карточки на приоритетных местах выдачи. Приходит из отчёта Ozon о начислениях.
currency · ₽
ozon_drr_special ДРР Спецразмещениеcomputed
Какую часть суммы реализации до соинвеста съедает спецразмещение. Формула: «Спецразмещение» / «Сумма реализации по ценам продавца (до соинвеста)» × 100.
adv_sum_special / sum_before_spp_realized * 100
percent · %
adv_sum_ozz Оплата за заказ
Расходы на «Оплату за заказ»: площадка берёт процент только с состоявшихся заказов, приведённых рекламой. Приходит из отчёта Ozon о начислениях.
currency · ₽
ozon_drr_ozz ДРР Оплата за заказcomputed
Какую часть суммы реализации до соинвеста съедает продвижение с оплатой за заказ. Формула: «Оплата за заказ» / «Сумма реализации по ценам продавца (до соинвеста)» × 100.
adv_sum_ozz / sum_before_spp_realized * 100
percent · %
adv_sum_banner Медийная
Расходы на медийную рекламу (баннеры и видеобаннеры)
currency · ₽
ozon_drr_banner ДРР медийнаяcomputed
Какую часть суммы реализации до соинвеста съедает медийная реклама. Формула: «Медийная» / «Сумма реализации по ценам продавца (до соинвеста)» × 100.
adv_sum_banner / sum_before_spp_realized * 100
percent · %
adv_sum_brand_shelf Брендовая полка
Расходы на формат «Брендовая полка»: подборка ваших товаров с баннером бренда в результатах поиска.
currency · ₽
ozon_drr_brand_shelf ДРР брендовая полкаcomputed
Какую часть суммы реализации до соинвеста съедает брендовая полка. Формула: «Брендовая полка» / «Сумма реализации по ценам продавца (до соинвеста)» × 100.
adv_sum_brand_shelf / sum_before_spp_realized * 100
percent · %
ozon_advertising_after_bonus_sum Реклама Ozon после вычета бонусов
Сколько реально списано денег за рекламу — расходы за вычетом части, оплаченной бонусами.
currency · ₽
ozon_advertising_share_after_spp Реклама после соинвеста, %computed
Тот же ДРР, но от денег, которые реально заплатил покупатель: реализация с учётом соинвеста Ozon ниже вашей цены, поэтому доля рекламы получается выше, чем в соседней колонке до соинвеста. Формула: «Рекламные расходы» / «Сумма реализации с учетом соинвеста» × 100.
ozon_total_advertising_sum / sum_after_spp_realized * 100
percent · %
ozon_advertising_share_of_orders Реклама от заказов, %computed
Доля рекламных расходов в сумме заказов. В отличие от ДРР от реализации, считается от заказанного, а не от выкупленного. Формула: «Рекламные расходы» / «Сумма заказов» × 100.
ozon_total_advertising_sum / orders_sum * 100
percent · %
ozon_advertising_share Реклама, %computed
Доля рекламных расходов в реализации (ДРР) — сколько копеек рекламы приходится на рубль выручки. Формула: «Рекламные расходы» / «Сумма реализации по ценам продавца (до соинвеста)» × 100.
ozon_total_advertising_sum / sum_before_spp_realized * 100
percent · %
ozon_41_service_of_acquiring Эквайринг
Комиссия за приём оплаты от покупателя — стоимость эквайринга по тарифу банка-эквайера. Приходит из отчёта Ozon о начислениях.
currency · ₽
ozon_42_service_of_product_loss_by_ozon Брак, потеря товара по вине Ozon
Возмещение за товар, повреждённый или потерянный по вине Ozon.
currency · ₽
ozon_43_service_of_sales_goal_bonus Бонус за достижение цели продаж
Премия Ozon за выполнение согласованного плана продаж.
currency · ₽
ozon_44_service_of_claims_accruals Начисления по претензиям
Выплаты по претензиям, которые Ozon признал обоснованными.
currency · ₽
ozon_45_service_of_inventory_adjustment Инвентаризация взаиморасчетов
Корректировка взаиморасчётов по итогам инвентаризации.
currency · ₽
ozon_46_service_of_compensation_for_damaged_lost_goods Компенсация за поврежденный, утерянный на складе товар
Возмещение за товар, повреждённый или утерянный на складе Ozon.
currency · ₽
ozon_47_service_of_delivery_compensation Компенсация перечисления за доставку
Возврат ранее удержанной платы за доставку: Ozon признал списание ошибочным и вернул деньги. Приходит из отчёта Ozon о начислениях.
currency · ₽
ozon_48_service_of_shortage_deduction Удержание за недовложение товара
Удержание за недовложение: в отправлении оказалось меньше товара, чем заявлено.
currency · ₽
ozon_49_service_of_return_of_goods_to_stock Декомпенсации и возвращение товаров на сток
Отмена ранее выплаченной компенсации: товар нашёлся и вернулся на склад.
currency · ₽
ozon_50_adjustment_of_premium_act Корректировка суммы акта о премии
Уточнение суммы премии по акту за прошлый период — поправка задним числом к ранее закрытому отчёту. Приходит из отчёта Ozon о начислениях.
currency · ₽
ozon_51_service_of_other_compensation Прочие компенсации
Прочие компенсации Ozon, для которых нет отдельной строки в отчёте.
currency · ₽
ozon_52_service_of_compensation_for_destroyed_goods Компенсация за уничтоженный товар
Возмещение за товар, уничтоженный на складе Ozon. Приходит из отчёта Ozon о начислениях.
currency · ₽
ozon_compensations_total Компенсации и прочие начисления
Начисления в вашу пользу: компенсации за утерянный и повреждённый товар, возвраты ранее удержанных сумм, прочие поступления. Складывается из: «Эквайринг», «Брак, потеря товара по вине Ozon», «Бонус за достижение цели продаж», «Начисления по претензиям», «Инвентаризация взаиморасчетов», «Компенсация за поврежденный, утерянный на складе товар», «Компенсация перечисления за доставку», «Удержание за недовложение товара», «Декомпенсации и возвращение товаров на сток», «Корректировка суммы акта о премии», «Прочие компенсации», «Компенсация за уничтоженный товар».
currency · ₽
ozon_compensations_share Компенсации, %computed
Какую долю реализации возвращают вам компенсации и прочие начисления. Формула: «Компенсации и прочие начисления» / «Сумма реализации по ценам продавца (до соинвеста)» × 100.
-ozon_compensations_total / sum_before_spp_realized * 100
percent · %
ozon_all_services_sum Сумма всех услуг Ozon
Все удержания Ozon за период: комиссия (вместе с выкупным коэффициентом по продажам за пределы РФ), логистика, дополнительные услуги, реклама и компенсации.
currency · ₽
ozon_all_services_share Все услуги, %computed
Какую часть суммы реализации до соинвеста забирают все услуги Ozon. Формула: «Сумма всех услуг Ozon» / «Сумма реализации по ценам продавца (до соинвеста)» × 100.
-ozon_all_services_sum / sum_before_spp_realized * 100
percent · %
ozon_54_insurance_of_goods Страхование товаров
Плата за страхование товара: защита от массовых повреждений на складе Ozon и страхование отправлений в пути до покупателя. Списывается с продавца по тарифу площадки. Приходит из отчёта Ozon о начислениях.
currency · ₽
ozon_acquiring_share Эквайринг, %computed
Какую долю реализации по вашим ценам (до соинвеста Ozon) съедает эквайринг — комиссия за приём оплаты от покупателя. Формула: «Эквайринг» / «Сумма реализации по ценам продавца (до соинвеста)» × 100.
-ozon_41_service_of_acquiring / sum_before_spp_realized * 100
percent · %
ozon_insurance_share Страхование, %computed
Какую долю реализации по вашим ценам (до соинвеста Ozon) съедает страхование товара. Формула: «Страхование товаров» / «Сумма реализации по ценам продавца (до соинвеста)» × 100.
-ozon_54_insurance_of_goods / sum_before_spp_realized * 100
percent · %
Обработка и доставка · 8 колонок
ozon_1_assembly_order Сборка заказа
Плата за сборку заказа на складе: комплектация и упаковка товара перед отправкой покупателю.
currency · ₽
ozon_2_processing_shipment Обработка отправления
Плата за приём и обработку отправления в точке отгрузки.
currency · ₽
ozon_3_logistics Логистика
Плата за доставку заказа покупателю по тарифам Ozon.
currency · ₽
ozon_4_transportation Магистраль
Перевозка товара между регионами: от склада отгрузки до региона покупателя.
currency · ₽
ozon_5_last_mile Последняя миля
Доставка от сортировочного центра до пункта выдачи или курьером до двери.
currency · ₽
ozon_6_delivery_by_ozon Доставка партнером Ozon
Доставка силами Ozon, когда отгрузку со своего склада выполняет продавец.
currency · ₽
ozon_7_delivery_by_partners Услуги доставки партнерами Ozon по схеме realFBS
Доставка партнёрской службой при работе по схеме realFBS, когда товар хранится у продавца.
currency · ₽
ozon_processing_delivery_total Обработка и доставка
Сколько стоило довезти товар до покупателя: обработка отправления, магистраль до сортировочного центра и последняя миля. Складывается из: «Сборка заказа», «Обработка отправления», «Логистика», «Магистраль», «Последняя миля», «Доставка партнером Ozon», «Услуги доставки партнерами Ozon по схеме realFBS».
currency · ₽
Возвраты и отмены · 7 колонок
ozon_8_processing_return Обработка возврата
Приём и проверка товара, который вернул покупатель.
currency · ₽
ozon_9_processing_cancellation Обработка отмененного или невостребованного товара
Возврат на склад товара из отменённого или невостребованного заказа.
currency · ₽
ozon_10_processing_unpurchased Обработка невыкупленного товара
Обработка товара, который покупатель не выкупил в пункте выдачи.
currency · ₽
ozon_11_reverse_transportation Обратная магистраль
Перевозка возвращённого товара между регионами до склада хранения.
currency · ₽
ozon_12_reverse_logistics Обратная логистика
Доставка возврата от покупателя обратно на склад Ozon. Возникает, когда покупатель отказался от заказа или вернул товар после выкупа: дорогу в обратную сторону оплачивает продавец. Приходит из отчёта Ozon о начислениях.
currency · ₽
ozon_13_services_of_partners Услуги партнеров Ozon
Услуги партнёров Ozon, связанные с доставкой и обработкой заказов.
currency · ₽
ozon_returns_cancellations_total Возвраты и отмены
Во что обошлись несостоявшиеся продажи: обратная логистика, обработка возвратов и отмен. Складывается из: «Обработка возврата», «Обработка отмененного или невостребованного товара», «Обработка невыкупленного товара», «Обратная магистраль», «Обратная логистика», «Услуги партнеров Ozon».
currency · ₽
Подписки / Рассрочки / Выплаты · 3 колонок
ozon_14_premium_subscription Premium-подписка
Абонентская плата за подписку Premium — платный тариф Ozon с расширенной аналитикой и пониженными комиссиями на часть услуг. Приходит из отчёта Ozon о начислениях.
currency · ₽
ozon_15_installment_payments Рассрочка, досрочные выплаты
Комиссия за рассрочку для покупателя и за досрочную выплату продавцу.
currency · ₽
ozon_subscriptions_total Подписки / Рассрочки / Выплаты
Подписки и услуги выплат: абонентские платежи и досрочные выплаты. Складывается из: «Premium-подписка», «Рассрочка, досрочные выплаты».
currency · ₽
Кросс-докинг / Логистика · 4 колонок
ozon_16_transit_shipments Транзитные поставки (кросс-докинг)
Приём поставки на транзитном складе и её распределение по складам Ozon.
currency · ₽
ozon_17_additional_delivery_reward Дополнительное вознаграждение за доставку
Доплата Ozon за доставку по отдельным условиям и акциям.
currency · ₽
ozon_18_movement_of_goods_between_warehouses Перемещение товаров между складами Ozon
Перевозка ваших остатков между складами Ozon. Площадка перемещает товар ближе к спросу, стоимость перевозки удерживается с продавца. Приходит из отчёта Ozon о начислениях.
currency · ₽
ozon_crossdocking_total Кросс-докинг / Логистика
Доставка ваших поставок до складов Ozon силами площадки. Складывается из: «Транзитные поставки (кросс-докинг)», «Дополнительное вознаграждение за доставку», «Перемещение товаров между складами Ozon».
currency · ₽
Обработка / Хранение / Утилизация · 6 колонок
ozon_19_booking_of_warehouse_space Бронирование места на складе
Плата за зарезервированное место на складе под будущую поставку.
currency · ₽
ozon_53_temporary_placement_in_sc_pvz Размещение товаров на складе (хранение)
Временное размещение товара в сортировочном центре или пункте выдачи
currency · ₽
ozon_21_processing_of_defects_and_surpluses Обработка брака, излишков
Работа склада с браком и излишками, найденными при приёмке или инвентаризации.
currency · ₽
ozon_22_preparation_of_goods_for_return Подготовка товаров к возврату
Подготовка товара к вывозу продавцу: сбор, упаковка, оформление документов.
currency · ₽
ozon_23_disposal_of_goods Утилизация товара
Уничтожение товара по заявке продавца или по правилам площадки.
currency · ₽
ozon_storage_processing_total Обработка / Хранение / Утилизация
Плата за то, что товар лежит на складе Ozon и обрабатывается там: размещение, платное хранение, утилизация. Складывается из: «Бронирование места на складе», «Размещение товаров на складе (хранение)», «Обработка брака, излишков», «Подготовка товаров к возврату», «Утилизация товара».
currency · ₽
Продвижение · 9 колонок
ozon_24_service_of_goods_promotion Абонентское обслуживание по продвижению товаров
Абонентская плата за инструменты продвижения товаров.
currency · ₽
ozon_25_service_of_brand_promotion Услуга продвижения бренда
Оплата продвижения бренда: баннеры и брендовые полки на площадке. Приходит из отчёта Ozon о начислениях.
currency · ₽
ozon_26_service_of_premium_promotion Продвижение Premium
Продвижение товаров среди подписчиков Ozon Premium.
currency · ₽
ozon_27_service_of_seller_bonus_promotion Продвижение бонусы продавца
Продвижение, оплаченное бонусами продавца, — теми самыми баллами, которые Ozon начисляет за соинвестирование в скидки. Приходит из отчёта Ozon о начислениях.
currency · ₽
ozon_28_service_of_star_products_promotion Продвижение звездные товары
Участие в программе продвижения «Звёздные товары».
currency · ₽
ozon_29_service_of_video_cover_generation Генерация видеообложки
Изготовление видеообложки для карточки товара силами Ozon. Приходит из отчёта Ozon о начислениях.
currency · ₽
ozon_30_service_of_review_acquisition Приобретение отзывов
Оплата программы «Отзывы за баллы»: Ozon платит покупателям баллами за отзыв на ваш товар, стоимость списывает с продавца. Приходит из отчёта Ozon о начислениях.
currency · ₽
ozon_31_service_of_review_attachment Закрепление отзыва
Платное закрепление отзыва в карточке товара. Приходит из отчёта Ozon о начислениях.
currency · ₽
ozon_promotion_total Продвижение
Платное продвижение на площадке, кроме рекламных кампаний: продвижение бренда, работа с отзывами, оформление карточки. Складывается из: «Абонентское обслуживание по продвижению товаров», «Услуга продвижения бренда», «Продвижение Premium», «Продвижение бонусы продавца», «Продвижение звездные товары», «Генерация видеообложки», «Приобретение отзывов», «Закрепление отзыва».
currency · ₽
Прочее · 4 колонок
ozon_32_service_of_product_moderation Услуги модерации товаров
Проверка и модерация карточек товара по запросу продавца.
currency · ₽
ozon_33_service_of_seller_operational_errors Операционные ошибки продавца
Штрафы за операционные ошибки продавца: пересорт, недовложение, срыв отгрузки.
currency · ₽
ozon_34_service_of_other_services Прочие услуги
Прочие услуги Ozon, для которых нет отдельной строки в отчёте.
currency · ₽
ozon_other_services_total Прочее
Начисления, которые не попали ни в один из блоков услуг. Складывается из: «Услуги модерации товаров», «Операционные ошибки продавца», «Прочие услуги».
currency · ₽
Перечисление · 6 колонок
for_pay Сумма к перечислению
Сумма, которую Ozon перечисляет продавцу за период. Складывается из двух частей: перечисление по РФ (реализация за вычетом комиссии, услуг и рекламы, с учётом компенсаций) и цена выкупа товара, проданного за пределы РФ.
currency · ₽
ozon_for_pay_rf Сумма к перечислению, РФ
Часть суммы к перечислению за продажи внутри РФ. Именно она сравнивается с итогом, который присылает Ozon: продаж за пределы РФ в этом итоге нет вовсе.
currency · ₽
ozon_for_pay_cis Сумма к перечислению за продажи в другие страны
Часть суммы к перечислению за продажи за пределы РФ: ваша цена за вычетом выкупного коэффициента. Услуг и комиссии сверх неё по таким продажам не удерживают.
currency · ₽
ozon_for_pay_share К перечислению, %computed
Какая часть суммы реализации до соинвеста доходит до продавца. Формула: «Сумма к перечислению» / «Сумма реализации по ценам продавца (до соинвеста)» × 100.
for_pay / sum_before_spp_realized * 100
percent · %
ozon_for_pay_share_rf К перечислению РФ, %computed
Какая часть реализации внутри РФ доходит до продавца. Формула: «Сумма к перечислению, РФ» / «Сумма реализации до соинвеста, РФ» × 100.
ozon_for_pay_rf / ozon_sum_before_spp_realized_rf * 100
percent · %
ozon_for_pay_share_cis К перечислению другие страны, %computed
Какая часть реализации за пределами РФ доходит до продавца. Формула: «Сумма к перечислению за продажи в другие страны» / «Сумма реализации до соинвеста, другие страны» × 100.
ozon_for_pay_cis / ozon_sum_before_spp_realized_cis * 100
percent · %
Прямые расходы · 9 колонок
direct_cost_nalog_sum Налог
Налог с продаж. Система налогообложения и ставка задаются в ручной форме «Налоги».
currency · ₽
ozon_nalog_share Налог, %computed
Какую часть выручки забирает налог (форма «Налоги»). Формула: «Налог» / «Сумма реализации с учетом соинвеста» × 100.
-direct_cost_nalog_sum / sum_after_spp_realized * 100
percent · %
direct_cost_out_nalog_sum НДС (исходящий)
НДС, начисленный с реализации. Ставка задаётся в ручной форме «Налоги».
currency · ₽
direct_cost_in_nalog_sum НДС (входящий)
НДС к вычету: со стоимости товара и услуг площадки. Ставка задаётся в ручной форме «Налоги».
currency · ₽
direct_cost_in_and_out_nalog_sum Итого НДС
Итог по НДС за период: начисленный с реализации вместе с принимаемым к вычету. Ставки задаются в ручной форме «Налоги».
currency · ₽
direct_cost_sebes_sum Себестоимость реализованного товара
Себестоимость проданных единиц. Заполняется в ручной форме «Себестоимость».
currency · ₽
ozon_sebes_share Себестоимость, %computed
Какую часть выручки занимает себестоимость (форма «Себестоимость»). Формула: «Себестоимость реализованного товара» / «Сумма реализации по ценам продавца (до соинвеста)» × 100.
-direct_cost_sebes_sum / sum_before_spp_realized * 100
percent · %
ozon_sebes_sum_rf Себестоимость реализованного товара, РФ
Себестоимость товара, реализованного внутри РФ.
currency · ₽
ozon_sebes_sum_cis Себестоимость реализованного товара, другие страны
Себестоимость товара, реализованного за пределами РФ.
currency · ₽
Маркетинговые расходы · 5 колонок
direct_cost_self_sales_sebes_sum Себестоимость само-выкупов
Себестоимость товара, выкупленного вами самими: количество из ручной формы «Самовыкупы» по себестоимости из формы «Себестоимость».
currency · ₽
direct_cost_self_sales_sum Затраты на само-выкупы
Расходы на самовыкупы. Заполняются в ручной форме «Самовыкупы».
currency · ₽
direct_cost_distribution_sum Затраты на раздачи (сумма кэшбека)
Кэшбек, выплаченный покупателям по раздачам. Заполняется в ручной форме «Раздачи».
currency · ₽
direct_cost_external_marketing_sum Внешний маркетинг
Расходы на продвижение вне Ozon: блогеры, соцсети, внешняя реклама. Вносятся в ручной форме «Операционные расходы» с привязкой к артикулу.
currency · ₽
ozon_external_marketing_share Внешний маркетинг, %computed
Какую часть выручки занимает продвижение вне Ozon (форма «Операционные расходы»). Формула: «Внешний маркетинг» / «Сумма реализации по ценам продавца (до соинвеста)» × 100.
-direct_cost_external_marketing_sum / sum_before_spp_realized * 100
percent · %
Прибыль · 6 колонок
profit_sum Маржинальная прибыль
Прибыль от продаж (начисления минус расходы) на основе данных в разделе Финансы - Экономика магазина
currency · ₽
ozon_article_profit_share Вклад артикула в общую сумму маржинальной прибылиcomputed
Какую долю всей прибыли за период дал этот товар. У убыточных товаров доля отрицательная.
ozon_article_profit_share = profit_sum / сумма profit_sum по всем строкам * 100
percent · %
ozon_profit_share_before_spp Маржинальность до соинвестаcomputed
Какую долю выручки вы оставляете себе. Формула: «Маржинальная прибыль» / «Сумма реализации по ценам продавца (до соинвеста)» × 100.
profit_sum / sum_before_spp_realized * 100
percent · %
ozon_profit_share_after_spp Маржинальность после соинвестаcomputed
Доля прибыли в выручке с учётом соинвеста. Формула: «Маржинальная прибыль» / «Сумма реализации с учетом соинвеста» × 100.
profit_sum / sum_after_spp_realized * 100
percent · %
ozon_profit_share_of_sebes Рентабельность товараcomputed
Сколько прибыли приносит каждый рубль себестоимости (форма «Себестоимость»). Формула: «Маржинальная прибыль» / «Себестоимость реализованного товара» × 100.
profit_sum / -direct_cost_sebes_sum * 100
percent · %
ozon_markup_ratio Коэффициент наценкиcomputed
Во сколько раз выручка больше себестоимости (форма «Себестоимость»). Формула: «Сумма реализации по ценам продавца (до соинвеста)» / «Себестоимость реализованного товара».
sum_before_spp_realized / -direct_cost_sebes_sum
number
Показатели на единицу реализованного товара · 16 колонок
ozon_realized_units Итого реализовано штук
Итоговое количество реализованного товара — то, с чего Ozon считает вам выручку.
number · шт
ozon_avg_check_before_spp Средний чекcomputed
Средняя цена одной продажи по ВАШИМ ценам — до соинвестирования Ozon в скидку. Формула: «Сумма продаж» / «Продаж».
sum_before_spp_sales / count_sales
currency · ₽
ozon_avg_check_after_spp Средний чек продажи с учетом соинвестаcomputed
Средняя цена проданной единицы с учётом соинвеста Ozon. Формула: «Сумма реализации с учетом соинвеста» / «Итого реализовано товаров».
sum_after_spp_realized / count_realized
currency · ₽
ozon_commission_per_unit Комиссия на единицуcomputed
Комиссия площадки на одну проданную единицу. Формула: «Комиссия Ozon» / «Итого реализовано товаров».
ozon_commission_sum / count_realized
currency · ₽
ozon_logistics_per_unit Логистика на единицуcomputed
Сколько логистики приходится на одну реализованную единицу. Удобно сравнивать с ценой товара: у дешёвых позиций доставка часто съедает всю маржу. Формула: «Логистика Ozon» / «Итого реализовано товаров».
ozon_logistics_total / count_realized
currency · ₽
ozon_paid_storage_per_unit Платное хранение на единицуcomputed
Платное хранение на одну проданную единицу. Формула: «Размещение товаров на складе (платное хранение)» / «Итого реализовано товаров».
ozon_20_placement_of_goods_on_the_warehouse / count_realized
currency · ₽
ozon_additional_services_per_unit Дополнительные услуги на единицуcomputed
Сколько дополнительных услуг площадки приходится на единицу. Формула: «Дополнительные услуги Ozon» / «Итого реализовано товаров».
ozon_additional_services_total / count_realized
currency · ₽
ozon_advertising_per_unit Рекламные расходы на единицуcomputed
Сколько рекламных расходов приходится на одну реализованную единицу. Формула: «Рекламные расходы» / «Итого реализовано товаров».
ozon_total_advertising_sum / count_realized
currency · ₽
ozon_compensations_per_unit Компенсации и прочие начисления на единицуcomputed
Сколько компенсаций и прочих начислений приходится на единицу. Формула: «Компенсации и прочие начисления» / «Итого реализовано товаров».
ozon_compensations_total / count_realized
currency · ₽
ozon_all_services_per_unit Стоимость всех услуг Ozon на единицуcomputed
Во сколько обходятся услуги Ozon на одну проданную единицу. Формула: «Сумма всех услуг Ozon» / «Итого реализовано товаров».
ozon_all_services_sum / count_realized
currency · ₽
ozon_for_pay_per_unit Перечисление за единицуcomputed
Сколько перечисляют за одну проданную единицу. Формула: «Сумма к перечислению» / «Итого реализовано товаров».
for_pay / count_realized
currency · ₽
ozon_nalog_per_unit Налог на единицуcomputed
Налог на одну проданную единицу (ставка из формы «Налоги»). Формула: «Налог» / «Итого реализовано товаров».
direct_cost_nalog_sum / count_realized
currency · ₽
ozon_nds_per_unit НДС на единицуcomputed
НДС на одну проданную единицу (ставка из формы «Налоги»). Формула: «Итого НДС» / «Итого реализовано товаров».
direct_cost_in_and_out_nalog_sum / count_realized
currency · ₽
ozon_sebes_per_unit Затраты на себестоимость на единицуcomputed
Себестоимость одной проданной единицы (форма «Себестоимость»). Формула: «Себестоимость реализованного товара» / «Итого реализовано товаров».
direct_cost_sebes_sum / count_realized
currency · ₽
ozon_external_marketing_per_unit Внешний маркетинг на единицуcomputed
Внешний маркетинг на одну проданную единицу (форма «Операционные расходы»). Формула: «Внешний маркетинг» / «Итого реализовано товаров».
direct_cost_external_marketing_sum / count_realized
currency · ₽
ozon_profit_per_unit Прибыль на единицуcomputed
Сколько прибыли приносит одна проданная единица. Формула: «Маржинальная прибыль» / «Итого реализовано товаров».
profit_sum / count_realized
currency · ₽

Пример запроса

curl https://web.metriclab.ru/v1/ozon/unit-fact \
  -H "Authorization: Bearer ml_live_xxxxxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{
    "cabinets":  ["67890"],
    "date_from": "2026-08-31",
    "date_to":   "2026-09-13",
    "limit":     500
  }'
import requests

KEY  = "ml_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
HOST = "https://web.metriclab.ru"

resp = requests.post(
    f"{HOST}/v1/ozon/unit-fact",
    headers={"Authorization": f"Bearer {KEY}"},
    json={
        "cabinets":  ["67890"],
        "date_from": "2026-08-31",
        "date_to":   "2026-09-13",
        "limit":     500,
    },
    timeout=180,
)
body = resp.json()
for row in body["data"]["rows"][:5]:
    print(row["article_ozon"], row["profit_sum"])

Пример ответа · 200 OK

{
  "status": "success",
  "data": {
    "total": 412,
    "rows": [
      {
        "cabinet": "Юрлицо-456",
        "article_ozon": "1612345678",
        "article_supplier": "ART-001", "brand": "BrandX",
        "abc_realization": "A", "abc_profit": "B",
        "sum_before_spp_realized": 184300,
        "for_pay": 121870.5,
        "profit_sum": 38412.7,
        "ozon_profit_share_before_spp": 20.8,
        …остальные колонки листа…
      }
    ]
  },
  "meta": {
    "marketplace": "ozon", "dataset": "unit-fact",
    "stocks": {"latest": "2026-09-14", "in_period": "2026-09-13"},
    "count": 412, "total": 412, "limit": 500, "offset": 0
  }
}

POST /v1/yandex/unit-fact

Лист «Unit-факт» из виджета «Таблица» на сайте — строка на артикул продавца за период со всеми колонками листа: реализация, услуги площадки по статьям, себестоимость, налог и НДС, сумма к перечислению, прибыль, маржинальность, доли, показатели на единицу, ABC-классы и остатки. Считается тем же кодом, что и таблица на сайте, поэтому цифры совпадают с ней.

POST https://web.metriclab.ru/v1/yandex/unit-fact
Рекомендации и частые ошибки
  • Разреза по датам нет. Строка — товар за весь период целиком. Динамику по дням даёт /v1/yandex/metrics.
  • Колонки-формулы, доли и ABC приходят уже посчитанными (в отличие от metrics, где производные считает клиент). Формула каждой такой колонки показана в каталоге ниже.
  • Знаки как на листе: услуги Маркета, налог, НДС и себестоимость — отрицательные, чтобы рублёвые колонки складывались в маржинальную прибыль. Скидки Маркета баллами и компенсации — отдельными колонками.
  • Строка с пустым article_supplier — начисления Маркета, не привязанные к товару: они входят в итог кабинета.
  • Заметки по товару за период приходят в поле notes строки — массив {date, text}.
  • Остатки — снимок, а не сумма за период. В колонках остатков — значение на самую свежую дату (meta.stocks.latest); на последнюю дату внутри периода — те же колонки с суффиксом __in_period (есть, только когда даты различаются).
  • Ответ большой: до 5000 строк по 150–200 колонок. Ограничивайте выборку filters и листайте через offset; полное число строк — в data.total.
  • Метод тяжёлый: лимит 3 запроса/мин.

Тело запроса

cabinetsrequired
string[] Массив business_id кабинетов. Должны принадлежать владельцу ключа (GET /v1/cabinets). Пустой массив [] — все доступные.
date_fromrequired
string Начало периода YYYY-MM-DD, включительно.
date_torequired
string Конец периода YYYY-MM-DD, включительно.
filters
object Фильтры на товары — те же, что у /v1/yandex/metrics (articles, brands, subjects, article_suppliers, grouping_level_1..3, group_name, responsible).
limit
integer Сколько строк вернуть. По умолчанию и максимум — 5000. Строки идут по кабинету и товару (артикул продавца).
offset
integer Смещение для постраничной выборки. По умолчанию 0.

Структура ответа

status
string"success" при 200.
data
objectСтроки листа.
rows
object[]Строка на артикул продавца. Ключи — колонки листа из каталога ниже: cabinet, article_supplier (артикул продавца), article_yandex (SKU на Маркете), product_name, brand, subject, группы товаров и далее все показатели. Колонки-формулы, доли и ABC — уже посчитаны (null, если не считается: нет слагаемого или деление на ноль).
total
integerВсего строк (до limit/offset).
meta
objectЭхо параметров и служебные сведения.
stocks
objectlatest — дата снимка остатков в колонках остатков; in_period — дата снимка в колонках с суффиксом __in_period (null, если совпадает с latest или данных нет).
count, total, limit, offset
integerСтрок в ответе, всего, и параметры пагинации.

Каталог колонок · Яндекс Маркет

Ключи колонок в строках ответа. Блоки и порядок — как на листе «Unit-факт» в MetricLab. Колонки с тегом computed считаются из других (формула показана рядом) и приходят в ответе уже посчитанными. Актуальный список — GET /v1/yandex/unit-fact-catalog.

О товаре · 11 колонок
cabinet Кабинет
Кабинет, к которому относится строка.
text
subject Категория
Категория товара в каталоге Маркета.
text
brand Бренд
Производитель из карточки товара.
text
article_supplier Артикул
Ваш артикул (SKU) в Маркете.
text
article_yandex SKU на Маркете
Номер карточки товара на Маркете.
text
product_name Название
Название товара из карточки.
text
grouping_level_1 Уровень группировки 1 text
grouping_level_2 Уровень группировки 2 text
grouping_level_3 Уровень группировки 3 text
group_name Группа товаров text
responsible Ответственный text
ABC · 3 колонок
abc_realization ABC по сумме реализацииcomputed
Класс товара по накопленной доле в показателе «Сумма реализации по ценам продавца (до скидок Маркета)». Товары выстраиваются по убыванию значения: A - те, что дают верхнюю часть суммы, B - следующую, C - хвост. Отрицательное значение - класс D. Доли классов (по умолчанию 80 %, 15 % и 5 %) настраиваются в подписи блока.
ABC-класс по yandex_sales_sum (A/B/C = 80/15/5 %, убыток = D)
text
abc_profit ABC по маржинальной прибылиcomputed
Класс товара по накопленной доле в показателе «Маржинальная прибыль». Товары выстраиваются по убыванию значения: A - те, что дают верхнюю часть суммы, B - следующую, C - хвост. Отрицательное значение - класс D. Доли классов (по умолчанию 80 %, 15 % и 5 %) настраиваются в подписи блока.
ABC-класс по yandex_uf_profit (A/B/C = 80/15/5 %, убыток = D)
text
abc_for_pay ABC по сумме к перечислениюcomputed
Класс товара по накопленной доле в показателе «Сумма к перечислению». Товары выстраиваются по убыванию значения: A - те, что дают верхнюю часть суммы, B - следующую, C - хвост. Отрицательное значение - класс D. Доли классов (по умолчанию 80 %, 15 % и 5 %) настраиваются в подписи блока.
ABC-класс по yandex_uf_for_pay (A/B/C = 80/15/5 %, убыток = D)
text
Воронка продаж (движение товара в штуках) · 21 колонок
yandex_card_views Показов
Сколько раз карточку товара показали покупателям.
number · шт
yandex_card_clicks Кликов
Сколько раз покупатели открыли карточку товара.
number · шт
yandex_ctr CTRcomputed
Доля показов карточки, которые закончились переходом в неё.
yandex_card_clicks / yandex_card_views * 100
percent · %
yandex_add_to_basket Добавлений в корзину
Сколько раз товар положили в корзину.
number · шт
yandex_conversion_to_basket Конверсия в корзинуcomputed
Доля переходов в карточку, которые закончились добавлением в корзину.
yandex_add_to_basket / yandex_card_clicks * 100
percent · %
yandex_orders_amount Заказов
Сколько единиц товара заказали покупатели.
number · шт
yandex_conversion_to_order Конверсия в заказcomputed
Доля добавлений в корзину, которые закончились заказом.
yandex_orders_amount / yandex_add_to_basket * 100
percent · %
yandex_cancels_unredeemed Отмен и невыкупов
Заказы, которые покупатель отменил или не выкупил.
number · шт
yandex_uf_cancel_rate % отмен и невыкуповcomputed
Какая доля заказанных штук отменена или не выкуплена.
yandex_cancels_unredeemed / yandex_orders_amount * 100
percent · %
yandex_uf_sales_qty Продаж
Сколько штук доставлено покупателям - днём доставки.
number · шт
yandex_uf_self_buyouts_qty Самовыкупов
Штуки, которые выкупил сам продавец, - из формы самовыкупов.
number · шт
yandex_uf_distributions_qty Раздач
Штуки, выданные по раздачам, - из формы раздач.
number · шт
yandex_organic_sales_amount Продаж (без учёта самовыкупов и раздач)
Продажи за вычетом раздач и самовыкупов.
number · шт
yandex_uf_returns_qty Возвратов
Сколько штук вернули покупатели - днём возврата.
number · шт
yandex_uf_return_rate % возвратовcomputed
Возвраты в процентах от проданных штук.
yandex_uf_returns_qty / yandex_uf_sales_qty * 100
percent · %
yandex_sales_amount Итого реализовано товаров
Сколько единиц товара выкупили и не вернули.
number · шт
yandex_buyout_rate % выкупаcomputed
Доля выкупленных заказов: реализация к сумме реализации, отмен и невыкупов.
yandex_sales_amount / (yandex_sales_amount + yandex_cancels_unredeemed) * 100
percent · %
yandex_uf_cpm Стоимость 1000 показовcomputed
Расход на рекламу в Маркете в пересчёте на тысячу показов карточки.
-(yandex_uf_svc_boost + yandex_uf_svc_boost_shows + yandex_uf_svc_shelf + yandex_uf_svc_banners) / yandex_card_views * 1000
currency · ₽
yandex_uf_cpc Стоимость кликаcomputed
Расход на рекламу в Маркете на один переход в карточку.
-(yandex_uf_svc_boost + yandex_uf_svc_boost_shows + yandex_uf_svc_shelf + yandex_uf_svc_banners) / yandex_card_clicks
currency · ₽
yandex_uf_cost_per_basket Стоимость корзиныcomputed
Расход на рекламу в Маркете на одно добавление в корзину.
-(yandex_uf_svc_boost + yandex_uf_svc_boost_shows + yandex_uf_svc_shelf + yandex_uf_svc_banners) / yandex_add_to_basket
currency · ₽
yandex_uf_cost_per_order Стоимость заказаcomputed
Расход на рекламу в Маркете на одну заказанную штуку.
-(yandex_uf_svc_boost + yandex_uf_svc_boost_shows + yandex_uf_svc_shelf + yandex_uf_svc_banners) / yandex_orders_amount
currency · ₽
Остатки · 10 колонок
yandex_uf_stock_count Остаток к продаже
Сколько штук на складах Маркета можно заказать.
number · шт
yandex_uf_stock_reserved Зарезервировано под заказы
Штуки на складах Маркета, отложенные под оформленные заказы.
number · шт
yandex_uf_stock_quarantine На карантине
Товар на проверке на складе Маркета: пока его нельзя заказать.
number · шт
yandex_uf_stock_defect Брак
Бракованный товар на складе Маркета.
number · шт
yandex_uf_stock_expired С истекшим сроком годности
Товар на складе Маркета, у которого истёк срок годности.
number · шт
yandex_uf_stock_utilization К утилизации
Товар, который Маркет готовит к утилизации.
number · шт
yandex_uf_stock_unavailable Недоступно к продажеcomputed
Товар лежит на складе Маркета, но заказать его нельзя: карантин, брак, истёк срок годности, утилизация.
yandex_uf_stock_quarantine + yandex_uf_stock_defect + yandex_uf_stock_expired + yandex_uf_stock_utilization
number · шт
yandex_stock_sebes Себестоимость остатков
Остаток к продаже по себестоимости.
currency · ₽
yandex_stock_price Цена реализации остатков
Остаток к продаже по текущей цене.
currency · ₽
yandex_uf_stock_markup Коэффициент наценки на остатокcomputed
Во сколько раз цена остатка к продаже выше его себестоимости.
yandex_stock_price / yandex_stock_sebes
number
Рубли · 18 колонок
yandex_orders_sum Сумма заказов
На какую сумму заказали товар.
currency · ₽
yandex_uf_cancels_sum Сумма отмен и невыкуповcomputed
Оценка: отменённые и невыкупленные штуки по среднему чеку продажи.
yandex_cancels_unredeemed * yandex_uf_sales_sum / yandex_uf_sales_qty
currency · ₽
yandex_uf_sales_sum Сумма продаж
Цена продажи доставленных товаров: оплата покупателей плюс скидки за счёт Маркета.
currency · ₽
yandex_uf_returns_sum Сумма возвратов
Деньги и баллы, возвращённые покупателям, - днём возврата.
currency · ₽
yandex_sales_sum Сумма реализации по ценам продавца (до скидок Маркета)
Стоимость выкупленного и не вернувшегося товара.
currency · ₽
yandex_uf_realization_share Вклад артикула в общую сумму реализацииcomputed yandex_uf_realization_share = yandex_sales_sum / сумма yandex_sales_sum по всем строкам * 100 percent · %
yandex_uf_points_market Скидка Маркета баллами
Скидка покупателю, которую оплатил Маркет. Возвращается продавцу баллами - ими Маркет гасит услуги.
currency · ₽
yandex_uf_points_plus Оплачено баллами Плюса
Часть цены, которую покупатель оплатил баллами Яндекс Плюса. Возвращается продавцу баллами.
currency · ₽
yandex_uf_subsidy_money Скидка Маркета деньгами
До октября 2024 скидку Маркета компенсировали деньгами, а не баллами.
currency · ₽
yandex_uf_points_returns Возвраты баллов
Баллы Маркета и Плюса, которые Маркет забрал при возврате товара.
currency · ₽
yandex_uf_subsidy_returns Возвраты скидок деньгами
Скидки Маркета деньгами, которые Маркет забрал при возврате товара (до октября 2024).
currency · ₽
yandex_uf_discounts Итого скидки за счёт Маркетаcomputed
Часть цены продажи, которую за покупателя заплатил Маркет, за вычетом возвратов. Для Маркета это то же, что соинвест у Ozon и СПП у Wildberries.
yandex_uf_points_market + yandex_uf_points_plus + yandex_uf_subsidy_money + yandex_uf_points_returns + yandex_uf_subsidy_returns
currency · ₽
yandex_uf_discounts_share Скидки Маркета, %computed
Какую долю реализации оплатил Маркет своими скидками.
(yandex_uf_points_market + yandex_uf_points_plus + yandex_uf_subsidy_money + yandex_uf_points_returns + yandex_uf_subsidy_returns) / yandex_sales_sum * 100
percent · %
yandex_uf_buyer_payments Оплатили покупатели
Деньги покупателей за доставленные товары, без скидок Маркета.
currency · ₽
yandex_uf_payment_returns Возвращено покупателям
Деньги, которые вернули покупателям при возвратах.
currency · ₽
yandex_uf_realized_after Сумма реализации с учётом скидок Маркетаcomputed
Сколько заплатили сами покупатели за вычетом возвратов: реализация без скидок за счёт Маркета.
yandex_uf_buyer_payments + yandex_uf_payment_returns
currency · ₽
yandex_uf_compensations Компенсации Маркета
Компенсации за утерянные и повреждённые товары и их возвраты.
currency · ₽
yandex_uf_compensations_share Компенсации, %computed
Компенсации Маркета в процентах от суммы реализации.
yandex_uf_compensations / yandex_sales_sum * 100
percent · %
Услуги Маркета · 44 колонок
yandex_uf_svc_placement Размещение
Услуга Маркета «Размещение» по полной стоимости: деньгами и баллами.
currency · ₽
yandex_uf_share_placement Размещение, %computed
Статья «Размещение» в процентах от суммы реализации.
-yandex_uf_svc_placement / yandex_sales_sum * 100
percent · %
yandex_uf_svc_payment_accept Приём платежа
Услуга Маркета «Приём платежа» по полной стоимости: деньгами и баллами.
currency · ₽
yandex_uf_svc_payment_transfer Перевод платежа
Услуга Маркета «Перевод платежа» по полной стоимости: деньгами и баллами.
currency · ₽
yandex_uf_cat_payments Приём и перевод платежаcomputed
Сумма статьи «Приём и перевод платежа»: всё, что в неё входит, раскрывается стрелкой на заголовке.
yandex_uf_svc_payment_accept + yandex_uf_svc_payment_transfer
currency · ₽
yandex_uf_share_payments Приём и перевод платежа, %computed
Статья «Приём и перевод платежа» в процентах от суммы реализации.
-(yandex_uf_svc_payment_accept + yandex_uf_svc_payment_transfer) / yandex_sales_sum * 100
percent · %
yandex_uf_svc_returns_delivery Доставка невыкупов и возвратов
Услуга Маркета «Доставка невыкупов и возвратов» по полной стоимости: деньгами и баллами.
currency · ₽
yandex_uf_svc_middle_mile Средняя миля
Услуга Маркета «Средняя миля» по полной стоимости: деньгами и баллами.
currency · ₽
yandex_uf_svc_delivery Доставка покупателю
Услуга Маркета «Доставка покупателю» по полной стоимости: деньгами и баллами.
currency · ₽
yandex_uf_svc_warehouse Складская обработка
Услуга Маркета «Складская обработка» по полной стоимости: деньгами и баллами.
currency · ₽
yandex_uf_svc_order_processing Обработка заказов
Услуга Маркета «Обработка заказов» по полной стоимости: деньгами и баллами.
currency · ₽
yandex_uf_svc_transit Поставка через транзитный склад
Услуга Маркета «Поставка через транзитный склад» по полной стоимости: деньгами и баллами.
currency · ₽
yandex_uf_cat_logistics Логистикаcomputed
Сумма статьи «Логистика»: всё, что в неё входит, раскрывается стрелкой на заголовке.
yandex_uf_svc_returns_delivery + yandex_uf_svc_middle_mile + yandex_uf_svc_delivery + yandex_uf_svc_warehouse + yandex_uf_svc_order_processing + yandex_uf_svc_transit
currency · ₽
yandex_uf_share_logistics Логистика, %computed
Статья «Логистика» в процентах от суммы реализации.
-(yandex_uf_svc_returns_delivery + yandex_uf_svc_middle_mile + yandex_uf_svc_delivery + yandex_uf_svc_warehouse + yandex_uf_svc_order_processing + yandex_uf_svc_transit) / yandex_sales_sum * 100
percent · %
yandex_uf_svc_storage Хранение
Услуга Маркета «Хранение» по полной стоимости: деньгами и баллами.
currency · ₽
yandex_uf_share_storage Хранение, %computed
Статья «Хранение» в процентах от суммы реализации.
-yandex_uf_svc_storage / yandex_sales_sum * 100
percent · %
yandex_uf_svc_loyalty Программа лояльности и отзывы
Услуга Маркета «Программа лояльности и отзывы» по полной стоимости: деньгами и баллами.
currency · ₽
yandex_uf_svc_installment Рассрочка
Услуга Маркета «Рассрочка» по полной стоимости: деньгами и баллами.
currency · ₽
yandex_uf_svc_returns_storage Хранение невыкупов и возвратов
Услуга Маркета «Хранение невыкупов и возвратов» по полной стоимости: деньгами и баллами.
currency · ₽
yandex_uf_svc_utilization Вывоз и утилизация
Услуга Маркета «Вывоз и утилизация» по полной стоимости: деньгами и баллами.
currency · ₽
yandex_uf_svc_expropriation Вознаграждение за невыкупы
Услуга Маркета «Вознаграждение за невыкупы» по полной стоимости: деньгами и баллами.
currency · ₽
yandex_uf_svc_subscriptions Подписки и сервисы
Услуга Маркета «Подписки и сервисы» по полной стоимости: деньгами и баллами.
currency · ₽
yandex_uf_svc_other Прочие услуги
Услуга Маркета «Прочие услуги» по полной стоимости: деньгами и баллами.
currency · ₽
yandex_uf_svc_undetailed Услуги без детализации
Услуга Маркета «Услуги без детализации» по полной стоимости: деньгами и баллами.
currency · ₽
yandex_uf_points_back Возврат баллов за прочие услуги
Баллы за услугу, которые Маркет вернул при возврате товара, если услугу не удалось определить.
currency · ₽
yandex_uf_cat_additional Дополнительные услугиcomputed
Сумма статьи «Дополнительные услуги»: всё, что в неё входит, раскрывается стрелкой на заголовке.
yandex_uf_svc_loyalty + yandex_uf_svc_installment + yandex_uf_svc_returns_storage + yandex_uf_svc_utilization + yandex_uf_svc_expropriation + yandex_uf_svc_subscriptions + yandex_uf_svc_other + yandex_uf_svc_undetailed + yandex_uf_points_back
currency · ₽
yandex_uf_share_additional Дополнительные услуги, %computed
Статья «Дополнительные услуги» в процентах от суммы реализации.
-(yandex_uf_svc_loyalty + yandex_uf_svc_installment + yandex_uf_svc_returns_storage + yandex_uf_svc_utilization + yandex_uf_svc_expropriation + yandex_uf_svc_subscriptions + yandex_uf_svc_other + yandex_uf_svc_undetailed + yandex_uf_points_back) / yandex_sales_sum * 100
percent · %
yandex_uf_svc_boost Буст продаж
Услуга Маркета «Буст продаж» по полной стоимости: деньгами и баллами.
currency · ₽
yandex_uf_drr_boost ДРР Буст продажcomputed
Расход на «Буст продаж» в процентах от суммы реализации.
-yandex_uf_svc_boost / yandex_sales_sum * 100
percent · %
yandex_uf_svc_boost_shows Буст продаж с оплатой за показы
Услуга Маркета «Буст продаж с оплатой за показы» по полной стоимости: деньгами и баллами.
currency · ₽
yandex_uf_drr_boost_shows ДРР Буст продаж с оплатой за показыcomputed
Расход на «Буст продаж с оплатой за показы» в процентах от суммы реализации.
-yandex_uf_svc_boost_shows / yandex_sales_sum * 100
percent · %
yandex_uf_svc_shelf Полка
Услуга Маркета «Полка» по полной стоимости: деньгами и баллами.
currency · ₽
yandex_uf_drr_shelf ДРР Полкаcomputed
Расход на «Полка» в процентах от суммы реализации.
-yandex_uf_svc_shelf / yandex_sales_sum * 100
percent · %
yandex_uf_svc_banners Баннеры
Услуга Маркета «Баннеры» по полной стоимости: деньгами и баллами.
currency · ₽
yandex_uf_drr_banners ДРР Баннерыcomputed
Расход на «Баннеры» в процентах от суммы реализации.
-yandex_uf_svc_banners / yandex_sales_sum * 100
percent · %
yandex_uf_cat_advertising Рекламаcomputed
Сумма статьи «Реклама»: всё, что в неё входит, раскрывается стрелкой на заголовке.
yandex_uf_svc_boost + yandex_uf_svc_boost_shows + yandex_uf_svc_shelf + yandex_uf_svc_banners
currency · ₽
yandex_uf_ads_share_after Реклама после скидок Маркета, %computed
Расход на рекламу в процентах от того, что заплатили покупатели.
-(yandex_uf_svc_boost + yandex_uf_svc_boost_shows + yandex_uf_svc_shelf + yandex_uf_svc_banners) / (yandex_uf_buyer_payments + yandex_uf_payment_returns) * 100
percent · %
yandex_uf_ads_share_orders Реклама от заказов, %computed
Расход на рекламу в процентах от суммы заказов.
-(yandex_uf_svc_boost + yandex_uf_svc_boost_shows + yandex_uf_svc_shelf + yandex_uf_svc_banners) / yandex_orders_sum * 100
percent · %
yandex_uf_share_advertising Реклама, %computed
Статья «Реклама» в процентах от суммы реализации.
-(yandex_uf_svc_boost + yandex_uf_svc_boost_shows + yandex_uf_svc_shelf + yandex_uf_svc_banners) / yandex_sales_sum * 100
percent · %
yandex_uf_services_money Оплачено деньгами
Часть услуг, которую Маркет удержал из выплат.
currency · ₽
yandex_uf_services_points Оплачено баллами
Часть услуг, которую Маркет погасил баллами, за вычетом баллов, вернувшихся при возвратах.
currency · ₽
yandex_uf_services_prepaid Оплачено предоплатой
Продвижение, оплаченное со счёта маркетинга заранее.
currency · ₽
yandex_uf_services_total Сумма всех услуг Маркета
Все услуги Маркета по полной стоимости: оплаченные деньгами, баллами и предоплатой.
currency · ₽
yandex_uf_services_share Все услуги, %computed
Сколько процентов от реализации съедают услуги Маркета.
-yandex_uf_services_total / yandex_sales_sum * 100
percent · %
Перечисление · 4 колонок
yandex_uf_paid Уже пришло на счёт
Часть суммы к перечислению, которая уже на расчётном счёте: деньги Маркета за товары периода и премия за баллы. Каждая выплата видна на листе «Сверка выплат» и в банке.
currency · ₽
yandex_uf_pending Ещё придёт
Часть суммы к перечислению, которой ещё нет на счёте: деньги, которые Маркет переведёт по графику выплат, и баллы, которые он выплатит премией в конце месяца (с минусом - ещё удержит). За давний месяц, где всему уже положено было прийти, не ноль - это расхождение, его показывает лист «Сверка выплат».
currency · ₽
yandex_uf_for_pay Сумма к перечислению
Реализация плюс компенсации минус все услуги Маркета - столько продавец получает за товары периода. Баллы Маркета здесь как рубли: ими гасятся услуги, а остаток Маркет в конце месяца выплачивает премией. Раскрывается на «Уже пришло на счёт» и «Ещё придёт».
currency · ₽
yandex_uf_for_pay_share К перечислению, %computed
Сколько процентов реализации остаётся продавцу после услуг Маркета.
yandex_uf_for_pay / yandex_sales_sum * 100
percent · %
Прямые расходы · 7 колонок
yandex_uf_tax Налог
Налог по вашей системе налогообложения и ставке из настроек налогов. Считается с того, что заплатили покупатели: скидку за счёт Маркета он компенсирует баллами, а баллы идут в оплату его услуг.
currency · ₽
yandex_uf_tax_share Налог, %computed
Налог в процентах от того, что заплатили покупатели.
-yandex_uf_tax / (yandex_uf_buyer_payments + yandex_uf_payment_returns) * 100
percent · %
yandex_uf_vat_out НДС (исходящий)
НДС внутри того, что заплатили покупатели.
currency · ₽
yandex_uf_vat_in НДС (входящий)
НДС внутри услуг Маркета, оплаченных деньгами, который принимается к вычету.
currency · ₽
yandex_uf_vat_total Итого НДСcomputed
НДС к уплате: исходящий минус входящий.
yandex_uf_vat_out + yandex_uf_vat_in
currency · ₽
yandex_uf_sebes Себестоимость реализованного товара
Себестоимость проданных за вычетом возвращённых товаров - из справочника себестоимости.
currency · ₽
yandex_uf_sebes_share Себестоимость, %computed
Себестоимость в процентах от суммы реализации.
-yandex_uf_sebes / yandex_sales_sum * 100
percent · %
Маркетинговые расходы · 9 колонок
yandex_uf_self_buyouts_sebes Себестоимость самовыкупов
Себестоимость товаров, которые выкупил сам продавец: товар возвращается к нему.
currency · ₽
yandex_uf_self_buyouts_share Самовыкупы, %computed
Затраты на самовыкупы в процентах от суммы реализации.
-yandex_uf_self_buyouts / yandex_sales_sum * 100
percent · %
yandex_uf_self_buyouts_share_after Самовыкупы после скидок Маркета, %computed
Затраты на самовыкупы в процентах от того, что заплатили покупатели.
-yandex_uf_self_buyouts / (yandex_uf_buyer_payments + yandex_uf_payment_returns) * 100
percent · %
yandex_uf_self_buyouts Затраты на самовыкупы
Сколько продавец заплатил за выкуп своих товаров - из формы самовыкупов.
currency · ₽
yandex_uf_distributions_share Раздачи, %computed
Затраты на раздачи в процентах от суммы реализации.
-yandex_uf_distributions / yandex_sales_sum * 100
percent · %
yandex_uf_distributions_share_after Раздачи после скидок Маркета, %computed
Затраты на раздачи в процентах от того, что заплатили покупатели.
-yandex_uf_distributions / (yandex_uf_buyer_payments + yandex_uf_payment_returns) * 100
percent · %
yandex_uf_distributions Затраты на раздачи (сумма кэшбэка)
Кэшбэк покупателям по раздачам - из формы раздач.
currency · ₽
yandex_uf_marketing Внешний маркетинг
Реклама и продвижение вне Маркета - из формы внешнего маркетинга.
currency · ₽
yandex_uf_marketing_share Внешний маркетинг, %computed
Внешний маркетинг в процентах от суммы реализации.
-yandex_uf_marketing / yandex_sales_sum * 100
percent · %
Прибыль · 6 колонок
yandex_uf_profit Маржинальная прибыль
Сумма к перечислению минус себестоимость, налог, НДС и маркетинг вне Маркета.
currency · ₽
yandex_uf_article_profit_share Вклад артикула в общую сумму маржинальной прибылиcomputed yandex_uf_article_profit_share = yandex_uf_profit / сумма yandex_uf_profit по всем строкам * 100 percent · %
yandex_uf_margin Маржинальность до скидок Маркетаcomputed
Прибыль в процентах от суммы реализации по ценам продавца.
yandex_uf_profit / yandex_sales_sum * 100
percent · %
yandex_uf_margin_after Маржинальность после скидок Маркетаcomputed
Прибыль в процентах от того, что заплатили покупатели.
yandex_uf_profit / (yandex_uf_buyer_payments + yandex_uf_payment_returns) * 100
percent · %
yandex_uf_roi Рентабельность товараcomputed
Прибыль в процентах от себестоимости.
yandex_uf_profit / -yandex_uf_sebes * 100
percent · %
yandex_uf_markup Коэффициент наценкиcomputed
Во сколько раз сумма реализации больше себестоимости.
yandex_sales_sum / -yandex_uf_sebes
number
Показатели на единицу реализованного товара · 16 колонок
yandex_uf_avg_check Средний чек продажиcomputed
Сумма продаж на одну проданную штуку - по ценам продавца.
yandex_uf_sales_sum / yandex_uf_sales_qty
currency · ₽
yandex_uf_avg_check_after Средний чек с учётом скидок Маркетаcomputed
Сколько в среднем заплатил покупатель за одну штуку.
yandex_uf_buyer_payments / yandex_uf_sales_qty
currency · ₽
yandex_uf_per_unit_placement Размещение на единицуcomputed
Статья «Размещение» на одну реализованную штуку.
yandex_uf_svc_placement / yandex_sales_amount
currency · ₽
yandex_uf_per_unit_payments Приём и перевод платежа на единицуcomputed
Статья «Приём и перевод платежа» на одну реализованную штуку.
(yandex_uf_svc_payment_accept + yandex_uf_svc_payment_transfer) / yandex_sales_amount
currency · ₽
yandex_uf_per_unit_logistics Логистика на единицуcomputed
Статья «Логистика» на одну реализованную штуку.
(yandex_uf_svc_returns_delivery + yandex_uf_svc_middle_mile + yandex_uf_svc_delivery + yandex_uf_svc_warehouse + yandex_uf_svc_order_processing + yandex_uf_svc_transit) / yandex_sales_amount
currency · ₽
yandex_uf_per_unit_storage Хранение на единицуcomputed
Статья «Хранение» на одну реализованную штуку.
yandex_uf_svc_storage / yandex_sales_amount
currency · ₽
yandex_uf_per_unit_additional Дополнительные услуги на единицуcomputed
Статья «Дополнительные услуги» на одну реализованную штуку.
(yandex_uf_svc_loyalty + yandex_uf_svc_installment + yandex_uf_svc_returns_storage + yandex_uf_svc_utilization + yandex_uf_svc_expropriation + yandex_uf_svc_subscriptions + yandex_uf_svc_other + yandex_uf_svc_undetailed + yandex_uf_points_back) / yandex_sales_amount
currency · ₽
yandex_uf_per_unit_advertising Реклама на единицуcomputed
Статья «Реклама» на одну реализованную штуку.
(yandex_uf_svc_boost + yandex_uf_svc_boost_shows + yandex_uf_svc_shelf + yandex_uf_svc_banners) / yandex_sales_amount
currency · ₽
yandex_uf_per_unit_services Все услуги Маркета на единицуcomputed
Все услуги Маркета на одну реализованную штуку.
yandex_uf_services_total / yandex_sales_amount
currency · ₽
yandex_uf_per_unit_compensations Компенсации на единицуcomputed
Компенсации Маркета на одну реализованную штуку.
yandex_uf_compensations / yandex_sales_amount
currency · ₽
yandex_uf_per_unit_for_pay Перечисление на единицуcomputed
Сумма к перечислению на одну реализованную штуку.
yandex_uf_for_pay / yandex_sales_amount
currency · ₽
yandex_uf_per_unit_tax Налог на единицуcomputed
Налог на одну реализованную штуку.
yandex_uf_tax / yandex_sales_amount
currency · ₽
yandex_uf_per_unit_vat НДС на единицуcomputed
НДС на одну реализованную штуку.
(yandex_uf_vat_out + yandex_uf_vat_in) / yandex_sales_amount
currency · ₽
yandex_uf_per_unit_sebes Себестоимость на единицуcomputed
Себестоимость одной реализованной штуки.
yandex_uf_sebes / yandex_sales_amount
currency · ₽
yandex_uf_per_unit_marketing Внешний маркетинг на единицуcomputed
Внешний маркетинг на одну реализованную штуку.
yandex_uf_marketing / yandex_sales_amount
currency · ₽
yandex_uf_per_unit_profit Прибыль на единицуcomputed
Маржинальная прибыль на одну реализованную штуку.
yandex_uf_profit / yandex_sales_amount
currency · ₽

Пример запроса

curl https://web.metriclab.ru/v1/yandex/unit-fact \
  -H "Authorization: Bearer ml_live_xxxxxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{
    "cabinets":  ["11223344"],
    "date_from": "2026-08-31",
    "date_to":   "2026-09-13",
    "limit":     500
  }'
import requests

KEY  = "ml_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
HOST = "https://web.metriclab.ru"

resp = requests.post(
    f"{HOST}/v1/yandex/unit-fact",
    headers={"Authorization": f"Bearer {KEY}"},
    json={
        "cabinets":  ["11223344"],
        "date_from": "2026-08-31",
        "date_to":   "2026-09-13",
        "limit":     500,
    },
    timeout=180,
)
body = resp.json()
for row in body["data"]["rows"][:5]:
    print(row["article_supplier"], row["yandex_uf_profit"])

Пример ответа · 200 OK

{
  "status": "success",
  "data": {
    "total": 412,
    "rows": [
      {
        "cabinet": "Юрлицо-y789",
        "article_yandex": "103581024567",
        "article_supplier": "ART-001", "brand": "BrandX",
        "abc_realization": "A", "abc_profit": "B",
        "yandex_sales_sum": 184300,
        "yandex_uf_for_pay": 121870.5,
        "yandex_uf_profit": 38412.7,
        "yandex_uf_margin": 20.8,
        …остальные колонки листа…
      }
    ]
  },
  "meta": {
    "marketplace": "yandex", "dataset": "unit-fact",
    "stocks": {"latest": "2026-09-14", "in_period": "2026-09-13"},
    "count": 412, "total": 412, "limit": 500, "offset": 0
  }
}

Ручные формы: чтение и запись

Те же формы, что в разделе «Ручные формы» на сайте: группы товаров, планы, заметки, самовыкупы, раздачи, операционные расходы, налоги и себестоимость. Запись идёт тем же кодом, что и сохранение формы на сайте: изменения сразу видны в форме, а отчёты кабинета пересобираются сами в течение нескольких минут.

МетодЧто делает
GET /v1/{marketplace}/forms Полное описание всех форм площадки: поля, типы, допустимые значения, как задаётся товар, как работает запись, правила и пример запроса. Прочитайте до первой записи — особенно если запросы собирает ИИ.
POST /v1/{marketplace}/forms/{form} Чтение формы одного кабинета.
POST /v1/{marketplace}/forms/{form}/update Запись в форму одного кабинета.

Формы

formЧто это
cost-price Себестоимость. Себестоимость единицы товара по периодам. У этой формы отдельные методы: чтение POST /v1/{marketplace}/costs, запись POST /v1/{marketplace}/costs-update.
product-groups Группы товаров. Ответственный, название группы и уровни группировки товара. По ним фильтруются и группируются все отчёты и виджеты кабинета (фильтры group_name, responsible, grouping_level_1..3 в остальных методах API).
plans Планы. План по каждому товару на каждый день месяца, отдельно по каждой метрике. Из него считаются план-факт и % выполнения в РНП и плановые метрики метода /metrics (с тегом plan).
notes Заметки. Журнал продавца: текстовая заметка к товару на дату («поднял цену», «запустил акцию»). Показывается рядом с цифрами в РНП, «Тепловой карте», Unit-факте и в метрике-заметке метода /metrics.
self-purchases Самовыкупы. Выкупы собственных товаров (самовыкупы). В отчётах они вычитаются из продаж и выручки и учитываются отдельно, их себестоимость — тоже.
distributions Раздачи. Раздачи товара за отзывы (кэшбэк покупателям). В отчётах — отдельная статья расходов на продвижение.
expenses Операционные расходы. Операционные расходы и поступления вне маркетплейса: аренда, зарплаты, закупка, фулфилмент, кредиты и т.д. Попадают в ОПиУ (по date_period) и в ДДС (по date_payment).
taxes Налоги. Система налогообложения, ставка налога и НДС — помесячно. Из них считаются налог и НДС в ОПиУ, Unit-факте и прибыли.

Как задаётся товар

Wildberriesarticle — артикул WB (nmID), целое число
Ozonsku — SKU Ozon и/или article — артикул продавца (offer_id). Достаточно одного: сервер сам переведёт в то, чем хранит эта форма
Яндекс Маркетarticle — артикул продавца (SKU магазина, offer_id), строка

Правила для всех форм

  • Один кабинет на запрос: cabinets — список ровно из одного кабинета.
  • Сначала прочитайте форму (POST …/forms/{form}), потом пишите (POST …/forms/{form}/update): чтение показывает существующие товары, категории и значения в нужном формате.
  • Поля и значения — только из этого каталога. Незнакомое поле в запросе — ошибка 400, а не тихий пропуск.
  • Запись проверяется целиком: если хоть одна строка неверна, не записывается ничего, а в ответе перечислены все ошибки — исправьте и пришлите запрос снова. Товары, которых нет в кабинете, возвращаются в data.skipped (остальное записывается), у форм-списков — ошибкой.
  • Даты — "YYYY-MM-DD", месяцы — "YYYY-MM", числа — JSON-числа (строка "350,5" тоже принимается).
  • Изменения сразу видны в форме на сайте; отчёты кабинета пересобираются автоматически в течение нескольких минут.
  • Перед каждой записью форма сохраняется в её историю на сайте (как при «Сохранить»): ошибочную запись можно откатить там.
  • Перед записью покажите пользователю, что именно будет изменено, если он не просил записывать без подтверждения: запись меняет отчёты кабинета.
bash
# 1. Контракт всех форм площадки
curl https://web.metriclab.ru/v1/wb/forms \
  -H "Authorization: Bearer ml_live_xxxxxxxxxx"

# 2. Прочитать форму одного кабинета
curl https://web.metriclab.ru/v1/wb/forms/plans \
  -H "Authorization: Bearer ml_live_xxxxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{"cabinets": ["12345"], "month": "2026-10", "metric": "plan_orders_rub"}'

# 3. Записать
curl https://web.metriclab.ru/v1/wb/forms/plans/update \
  -H "Authorization: Bearer ml_live_xxxxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{"cabinets": ["12345"], "month": "2026-10", "metric": "plan_orders_rub",
       "items": [{"article": 210534867, "month_total": 310000}]}'

Себестоимость · cost-price

Себестоимость единицы товара по периодам. У этой формы отдельные методы: чтение POST /v1/{marketplace}/costs, запись POST /v1/{marketplace}/costs-update.

У себестоимости отдельные методы: /v1/wb/costs и /v1/wb/costs-update; /v1/ozon/costs и /v1/ozon/costs-update; /v1/yandex/costs и /v1/yandex/costs-update.

ПлощадкаГрейн
Wildberriesтовар (артикул × баркод) × неделя отчёта WB, ключ периода "2026_32"
OzonSKU × полмесяца, ключ периода "2026_август_1" (1–15) / "2026_август_2" (16–конец)
Яндекс Маркетартикул продавца × полмесяца, ключ периода "2026_август_1" (1–15) / "2026_август_2" (16–конец)

Группы товаров · product-groups

Ответственный, название группы и уровни группировки товара. По ним фильтруются и группируются все отчёты и виджеты кабинета (фильтры group_name, responsible, grouping_level_1..3 в остальных методах API).

POST https://web.metriclab.ru/v1/{marketplace}/forms/product-groups
POST https://web.metriclab.ru/v1/{marketplace}/forms/product-groups/update

Грейн: товар

Чтение

cabinetsобязателен, ровно ОДИН кабинет: ["<cabinet_id или имя кабинета из GET /v1/cabinets>"]

data.rows — все товары кабинета: поля товара и текущие значения полей формы (null — не заполнено).

Запись

upsert по товару: меняются только переданные поля, остальные поля товара остаются как были. null или "" очищает поле. Повтор того же запроса безопасен.

cabinetsобязателен, ровно ОДИН кабинет: ["<cabinet_id или имя кабинета из GET /v1/cabinets>"]
items[{товар, поле: значение, ...}] — до 5000 шт.; товар — поля из product

data.updated_products — сколько товаров записано, data.skipped — товары, которых нет в кабинете (они не записаны, остальные записаны).

Правила и частые ошибки
  • Набор полей у площадок разный: берите только поля из fields этой площадки.
  • Значения — произвольный текст; одинаковое написание = одна группа (регистр и пробелы важны), поэтому используйте уже существующие значения из чтения формы.
  • Строку из чтения можно вернуть целиком: описание товара (brand, subject, supplier_article) принимается и не меняется.
Wildberries · поля и пример

Товар: article — артикул WB (nmID), целое число

responsible Ответственный string
group_name Название группы string
grouping_level_1 Группировка 1 string
POST /v1/wb/forms/product-groups/update
{
  "cabinets": [
    "12345"
  ],
  "items": [
    {
      "article": 210534867,
      "responsible": "Иванов",
      "group_name": "Летняя коллекция"
    }
  ]
}
Ozon · поля и пример

Товар: sku — SKU Ozon (форма хранит SKU); можно article — артикул продавца: по article значение ляжет на все SKU артикула

responsible Ответственный string
group_name Название группы string
grouping_level_1 Группировка 1 string
grouping_level_2 Группировка 2 string
grouping_level_3 Группировка 3 string
POST /v1/ozon/forms/product-groups/update
{
  "cabinets": [
    "67890"
  ],
  "items": [
    {
      "sku": "1580142736",
      "responsible": "Иванов",
      "group_name": "Летняя коллекция"
    }
  ]
}
Яндекс Маркет · поля и пример

Товар: article — артикул продавца (SKU магазина, offer_id), строка

responsible Ответственный string
group_name Название группы string
grouping_level_1 Группировка 1 string
grouping_level_2 Группировка 2 string
grouping_level_3 Группировка 3 string
POST /v1/yandex/forms/product-groups/update
{
  "cabinets": [
    "11223344"
  ],
  "items": [
    {
      "article": "AKO-2201",
      "responsible": "Иванов",
      "group_name": "Летняя коллекция"
    }
  ]
}

Планы · plans

План по каждому товару на каждый день месяца, отдельно по каждой метрике. Из него считаются план-факт и % выполнения в РНП и плановые метрики метода /metrics (с тегом plan).

POST https://web.metriclab.ru/v1/{marketplace}/forms/plans
POST https://web.metriclab.ru/v1/{marketplace}/forms/plans/update

Грейн: товар × день × метрика

Чтение

cabinetsобязателен, ровно ОДИН кабинет: ["<cabinet_id или имя кабинета из GET /v1/cabinets>"]
monthобязателен, "YYYY-MM"
metricобязателен, ключ из metrics
only_filledопц., true — только товары, у которых есть план в этом месяце

data.rows — товары: month_total (сумма плана за месяц, у метрик с level — среднее дней с планом; null — плана нет) и days {"YYYY-MM-DD": план} — только дни, где план задан (не ноль).

Запись

upsert по (товар, день, метрика): присланные дни перезаписываются, остальные дни товара не трогаются. Повтор того же запроса безопасен.

cabinetsобязателен, ровно ОДИН кабинет: ["<cabinet_id или имя кабинета из GET /v1/cabinets>"]
monthобязателен, "YYYY-MM" — один месяц на запрос
metricобязателен, ключ из metrics — одна метрика на запрос
itemsдо 5000 шт., один элемент на товар: {товар, month_total} ИЛИ {товар, days: {"YYYY-MM-DD": число}}; товар — поля из product

data.saved_days, data.products, data.skipped (товары, которых нет в кабинете или в форме «Планы»).

Правила и частые ошибки
  • month_total — план на весь месяц целым числом: сервер раскладывает его поровну на ВСЕ дни месяца (остаток +1 на последние дни, как форма на сайте) и перезаписывает каждый день этого месяца у товара.
  • Метрики с level: true (целевой ДРР, маржинальность) — планка в процентах, а не количество: month_total (можно с дробью, 7.5 = 7,5 %) ставится в КАЖДЫЙ день месяца как есть и не делится. В РНП с планкой сравнивается доля факта: по группе товаров и за период планка — средняя, взвешенная по базе доли (заказам, продажам, реализации).
  • days — точечные значения по датам внутри month; null или 0 — плана на день нет. Дробные значения — только через days.
  • Деньги — в рублях, количества — в штуках, доли — в процентах (10 = 10 %). План прибыли может быть отрицательным.
  • Каждая метрика — отдельный запрос: план заказов в рублях и в штуках — разные метрики.
  • Строку из чтения можно вернуть целиком: описание товара (brand, subject, supplier_article) принимается и не меняется.
Wildberries · поля и пример

Товар: article — артикул WB (nmID), целое число

plan_views_qtyПлан показов, штmetric
plan_clicks_qtyПлан кликов, штmetric
plan_add_to_cart_qtyПлан добавлений в корзину, штmetric
plan_orders_qtyПлан заказов, штmetric
plan_orders_rubПлан заказов, рубmetric
plan_sales_qtyПлан продаж, штmetric
plan_sales_rubПлан продаж, рубmetric
plan_profit_rubПлан прибыли, рубmetric
plan_adv_rubПлан расходов на РК, рубmetric
plan_for_pay_rubПлан суммы к перечислению, рубmetric
plan_drr_orders_pctЦелевой ДРР от заказов, %metric
plan_drr_sales_pctЦелевой ДРР от продаж, %metric
plan_margin_pctЦелевая маржинальность до СПП, %metric
POST /v1/wb/forms/plans/update
{
  "cabinets": [
    "12345"
  ],
  "month": "2026-10",
  "metric": "plan_orders_rub",
  "items": [
    {
      "article": 210534867,
      "month_total": 310000
    },
    {
      "article": 210534868,
      "days": {
        "2026-10-01": 5000,
        "2026-10-02": 7500
      }
    }
  ]
}
Ozon · поля и пример

Товар: article — артикул продавца (форма хранит его); можно sku — сервер найдёт его артикул

plan_views_qtyПлан показов, штmetric
plan_clicks_qtyПлан кликов, штmetric
plan_add_to_cart_qtyПлан добавлений в корзину, штmetric
plan_orders_qtyПлан заказов, штmetric
plan_orders_rubПлан заказов, рубmetric
plan_sales_qtyПлан продаж, штmetric
plan_sales_rubПлан продаж, рубmetric
plan_profit_rubПлан прибыли, рубmetric
plan_adv_rubПлан расходов на РК, рубmetric
plan_for_pay_rubПлан суммы к перечислению, рубmetric
plan_drr_orders_pctЦелевой ДРР от заказов, %metric
plan_drr_sales_pctЦелевой ДРР от продаж, %metric
plan_margin_pctЦелевая маржинальность до СПП, %metric
POST /v1/ozon/forms/plans/update
{
  "cabinets": [
    "67890"
  ],
  "month": "2026-10",
  "metric": "plan_orders_rub",
  "items": [
    {
      "article": "AKO.2201.01",
      "month_total": 310000
    },
    {
      "sku": "1579471752",
      "days": {
        "2026-10-01": 5000,
        "2026-10-02": 7500
      }
    }
  ]
}
Яндекс Маркет · поля и пример

Товар: article — артикул продавца (SKU магазина, offer_id), строка

plan_views_qtyПлан показов, штmetric
plan_clicks_qtyПлан кликов, штmetric
plan_add_to_cart_qtyПлан добавлений в корзину, штmetric
plan_orders_qtyПлан заказов, штmetric
plan_orders_rubПлан заказов, рубmetric
plan_sales_qtyПлан продаж, штmetric
plan_sales_rubПлан продаж, рубmetric
plan_profit_rubПлан прибыли, рубmetric
plan_adv_rubПлан расходов на РК, рубmetric
plan_for_pay_rubПлан суммы к перечислению, рубmetric
plan_drr_orders_pctЦелевой ДРР от заказов, %metric
plan_drr_sales_pctЦелевой ДРР от реализации, %metric
plan_margin_pctЦелевая маржинальность до скидок Маркета, %metric
POST /v1/yandex/forms/plans/update
{
  "cabinets": [
    "11223344"
  ],
  "month": "2026-10",
  "metric": "plan_orders_rub",
  "items": [
    {
      "article": "AKO-2201",
      "month_total": 310000
    },
    {
      "article": "AKO-2202",
      "days": {
        "2026-10-01": 5000,
        "2026-10-02": 7500
      }
    }
  ]
}

Заметки · notes

Журнал продавца: текстовая заметка к товару на дату («поднял цену», «запустил акцию»). Показывается рядом с цифрами в РНП, «Тепловой карте», Unit-факте и в метрике-заметке метода /metrics.

POST https://web.metriclab.ru/v1/{marketplace}/forms/notes
POST https://web.metriclab.ru/v1/{marketplace}/forms/notes/update

Грейн: товар × день

Чтение

cabinetsобязателен, ровно ОДИН кабинет: ["<cabinet_id или имя кабинета из GET /v1/cabinets>"]
date_fromобязателен, "YYYY-MM-DD"
date_toобязателен, "YYYY-MM-DD", не дальше 366 дней от date_from

data.rows — только существующие заметки: {article, date, text}.

Запись

замена ячейки (товар, день): новый текст заменяет прежний, null или "" удаляет заметку. Другие дни и товары не трогаются. Повтор безопасен.

cabinetsобязателен, ровно ОДИН кабинет: ["<cabinet_id или имя кабинета из GET /v1/cabinets>"]
items[{товар, date: "YYYY-MM-DD", text}] — до 5000 шт., даты — не больше чем из 3 разных месяцев; товар — поля из product

data.saved — записано заметок, data.cleared — ячеек очищено (пустой text), data.skipped — товары, которых нет в кабинете.

Правила и частые ошибки
  • На одну ячейку (товар, день) — одна заметка: чтобы дописать, прочитайте текущий текст и пришлите его вместе с новым.
Wildberries · поля и пример

Товар: article — артикул WB (nmID), целое число

date Дата · обязательно date
text Заметка string
POST /v1/wb/forms/notes/update
{
  "cabinets": [
    "12345"
  ],
  "items": [
    {
      "article": 210534867,
      "date": "2026-10-05",
      "text": "Снизили цену на 10%"
    }
  ]
}
Ozon · поля и пример

Товар: article — артикул продавца (форма хранит его); можно sku — сервер найдёт его артикул

date Дата · обязательно date
text Заметка string
POST /v1/ozon/forms/notes/update
{
  "cabinets": [
    "67890"
  ],
  "items": [
    {
      "article": "AKO.2201.01",
      "date": "2026-10-05",
      "text": "Снизили цену на 10%"
    }
  ]
}
Яндекс Маркет · поля и пример

Товар: article — артикул продавца (SKU магазина, offer_id), строка

date Дата · обязательно date
text Заметка string
POST /v1/yandex/forms/notes/update
{
  "cabinets": [
    "11223344"
  ],
  "items": [
    {
      "article": "AKO-2201",
      "date": "2026-10-05",
      "text": "Снизили цену на 10%"
    }
  ]
}

Самовыкупы · self-purchases

Выкупы собственных товаров (самовыкупы). В отчётах они вычитаются из продаж и выручки и учитываются отдельно, их себестоимость — тоже.

POST https://web.metriclab.ru/v1/{marketplace}/forms/self-purchases
POST https://web.metriclab.ru/v1/{marketplace}/forms/self-purchases/update

Грейн: строка = одна запись; ключа у строки нет

Чтение

cabinetsобязателен, ровно ОДИН кабинет: ["<cabinet_id или имя кабинета из GET /v1/cabinets>"]

data.rows — ВСЕ строки формы кабинета (без фильтров и пагинации).

Запись

mode="append" — дописать rows к существующим (НЕ идемпотентно: повтор запроса задвоит строки). mode="replace" — заменить ВЕСЬ список формы на rows (как «Сохранить» на сайте): чтобы изменить или удалить строку, прочитайте форму целиком, поправьте список и пришлите его полностью. Строки, возвращённые ровно как в чтении, сохраняются как есть, даже если в них пусто обязательное поле или товара уже нет в каталоге; правила fields проверяются у новых и изменённых строк. Пустой rows при replace удаляет все строки и требует "allow_empty": true.

cabinetsобязателен, ровно ОДИН кабинет: ["<cabinet_id или имя кабинета из GET /v1/cabinets>"]
mode"append" | "replace"
rowsсписок строк: до 5000 для append, до 20000 для replace
allow_emptyопц., true — разрешить replace пустым списком (удалить всё)

data.written — сколько строк записано; при replace data.unchanged — сколько из них совпали со строками из чтения и сохранены как были.

Правила и частые ошибки
  • В отчёты строка попадает по date_pickup (дата выкупа/забора с ПВЗ): без неё строка ничего не меняет — поле обязательно.
  • quantity — штуки, целое > 0; sum — сколько заплачено за выкуп, ₽, > 0.
  • Даты — "YYYY-MM-DD". Ошибка в любой строке — ничего не записывается, в ответе перечислены все найденные ошибки.
  • После таймаута или ошибки сети НЕ повторяйте append вслепую: прочитайте форму и проверьте, записались ли строки.
Wildberries · поля и пример

Товар: обязателен: article — артикул WB (nmID), целое число; barcode — баркод размера: обязателен, если у артикула несколько баркодов, иначе подставится сам

date_order Дата заказа date
date_pickup Дата забора с ПВЗ · обязательно date
quantity Количество, шт · обязательно integer
sum Сумма, руб · обязательно number
uid ID заказа WB string
comment Комментарий string
POST /v1/wb/forms/self-purchases/update
{
  "cabinets": [
    "12345"
  ],
  "mode": "append",
  "rows": [
    {
      "article": 210534867,
      "barcode": "2037561234567",
      "date_order": "2026-10-01",
      "date_pickup": "2026-10-04",
      "quantity": 1,
      "sum": 1490
    }
  ]
}
Ozon · поля и пример

Товар: обязателен: sku — SKU Ozon (форма хранит SKU); можно article — артикул продавца: article подходит, только если у артикула один SKU

date_order Дата заказа date
date_pickup Дата забора с ПВЗ · обязательно date
quantity Количество, шт · обязательно integer
sum Сумма, руб · обязательно number
comment Комментарий string
POST /v1/ozon/forms/self-purchases/update
{
  "cabinets": [
    "67890"
  ],
  "mode": "append",
  "rows": [
    {
      "sku": "1580142736",
      "date_order": "2026-10-01",
      "date_pickup": "2026-10-04",
      "quantity": 1,
      "sum": 1490
    }
  ]
}
Яндекс Маркет · поля и пример

Товар: обязателен: article — артикул продавца (SKU магазина, offer_id), строка

date_order Дата заказа date
date_pickup Дата забора с ПВЗ · обязательно date
quantity Количество, шт · обязательно integer
sum Сумма, руб · обязательно number
comment Комментарий string
POST /v1/yandex/forms/self-purchases/update
{
  "cabinets": [
    "11223344"
  ],
  "mode": "append",
  "rows": [
    {
      "article": "AKO-2201",
      "date_order": "2026-10-01",
      "date_pickup": "2026-10-04",
      "quantity": 1,
      "sum": 1490
    }
  ]
}

Раздачи · distributions

Раздачи товара за отзывы (кэшбэк покупателям). В отчётах — отдельная статья расходов на продвижение.

POST https://web.metriclab.ru/v1/{marketplace}/forms/distributions
POST https://web.metriclab.ru/v1/{marketplace}/forms/distributions/update

Грейн: строка = одна запись; ключа у строки нет

Чтение

cabinetsобязателен, ровно ОДИН кабинет: ["<cabinet_id или имя кабинета из GET /v1/cabinets>"]

data.rows — ВСЕ строки формы кабинета (без фильтров и пагинации).

Запись

mode="append" — дописать rows к существующим (НЕ идемпотентно: повтор запроса задвоит строки). mode="replace" — заменить ВЕСЬ список формы на rows (как «Сохранить» на сайте): чтобы изменить или удалить строку, прочитайте форму целиком, поправьте список и пришлите его полностью. Строки, возвращённые ровно как в чтении, сохраняются как есть, даже если в них пусто обязательное поле или товара уже нет в каталоге; правила fields проверяются у новых и изменённых строк. Пустой rows при replace удаляет все строки и требует "allow_empty": true.

cabinetsобязателен, ровно ОДИН кабинет: ["<cabinet_id или имя кабинета из GET /v1/cabinets>"]
mode"append" | "replace"
rowsсписок строк: до 5000 для append, до 20000 для replace
allow_emptyопц., true — разрешить replace пустым списком (удалить всё)

data.written — сколько строк записано; при replace data.unchanged — сколько из них совпали со строками из чтения и сохранены как были.

Правила и частые ошибки
  • В отчёты строка попадает по date_pickup (дата забора с ПВЗ) — поле обязательно.
  • quantity — сколько штук раздано, целое > 0; sum — выплаченный кэшбэк, ₽, ≥ 0.
  • Даты — "YYYY-MM-DD". Ошибка в любой строке — ничего не записывается, в ответе перечислены все найденные ошибки.
  • После таймаута или ошибки сети НЕ повторяйте append вслепую: прочитайте форму и проверьте, записались ли строки.
Wildberries · поля и пример

Товар: обязателен: article — артикул WB (nmID), целое число; barcode — баркод размера: обязателен, если у артикула несколько баркодов, иначе подставится сам

date_order Дата заказа date
date_pickup Дата забора с ПВЗ · обязательно date
quantity Раздачи, шт · обязательно integer
sum Кэшбэк, руб · обязательно number
uid ID заказа WB string
comment Комментарий string
POST /v1/wb/forms/distributions/update
{
  "cabinets": [
    "12345"
  ],
  "mode": "append",
  "rows": [
    {
      "article": 210534867,
      "barcode": "2037561234567",
      "date_order": "2026-10-01",
      "date_pickup": "2026-10-04",
      "quantity": 1,
      "sum": 1490
    }
  ]
}
Ozon · поля и пример

Товар: обязателен: sku — SKU Ozon (форма хранит SKU); можно article — артикул продавца: article подходит, только если у артикула один SKU

date_order Дата заказа date
date_pickup Дата забора с ПВЗ · обязательно date
quantity Раздачи, шт · обязательно integer
sum Кэшбэк, руб · обязательно number
comment Комментарий string
POST /v1/ozon/forms/distributions/update
{
  "cabinets": [
    "67890"
  ],
  "mode": "append",
  "rows": [
    {
      "sku": "1580142736",
      "date_order": "2026-10-01",
      "date_pickup": "2026-10-04",
      "quantity": 1,
      "sum": 1490
    }
  ]
}
Яндекс Маркет · поля и пример

Товар: обязателен: article — артикул продавца (SKU магазина, offer_id), строка

date_order Дата заказа date
date_pickup Дата забора с ПВЗ · обязательно date
quantity Раздачи, шт · обязательно integer
sum Кэшбэк, руб · обязательно number
comment Комментарий string
POST /v1/yandex/forms/distributions/update
{
  "cabinets": [
    "11223344"
  ],
  "mode": "append",
  "rows": [
    {
      "article": "AKO-2201",
      "date_order": "2026-10-01",
      "date_pickup": "2026-10-04",
      "quantity": 1,
      "sum": 1490
    }
  ]
}

Операционные расходы · expenses

Операционные расходы и поступления вне маркетплейса: аренда, зарплаты, закупка, фулфилмент, кредиты и т.д. Попадают в ОПиУ (по date_period) и в ДДС (по date_payment).

POST https://web.metriclab.ru/v1/{marketplace}/forms/expenses
POST https://web.metriclab.ru/v1/{marketplace}/forms/expenses/update

Грейн: строка = одна запись; ключа у строки нет

Чтение

cabinetsобязателен, ровно ОДИН кабинет: ["<cabinet_id или имя кабинета из GET /v1/cabinets>"]

data.rows — ВСЕ строки формы кабинета (без фильтров и пагинации).

Запись

mode="append" — дописать rows к существующим (НЕ идемпотентно: повтор запроса задвоит строки). mode="replace" — заменить ВЕСЬ список формы на rows (как «Сохранить» на сайте): чтобы изменить или удалить строку, прочитайте форму целиком, поправьте список и пришлите его полностью. Строки, возвращённые ровно как в чтении, сохраняются как есть, даже если в них пусто обязательное поле или товара уже нет в каталоге; правила fields проверяются у новых и изменённых строк. Пустой rows при replace удаляет все строки и требует "allow_empty": true.

cabinetsобязателен, ровно ОДИН кабинет: ["<cabinet_id или имя кабинета из GET /v1/cabinets>"]
mode"append" | "replace"
rowsсписок строк: до 5000 для append, до 20000 для replace
allow_emptyопц., true — разрешить replace пустым списком (удалить всё)

data.written — сколько строк записано; при replace data.unchanged — сколько из них совпали со строками из чтения и сохранены как были.

Правила и частые ошибки
  • sum — всегда ПОЛОЖИТЕЛЬНОЕ число; знак задаёт operation_type: «Расход» вычитается, «Приход» прибавляется.
  • operation_type и category — только из options (регистр не важен, записывается написание из options). Статьи сверяются с отчётом ОПиУ: строка с выдуманной статьёй в отчёт не попадёт, поэтому API её не примет.
  • date_period — к какому месяцу/дню расход относится в ОПиУ; date_payment — когда деньги ушли/пришли (ДДС). Если не уверены — одинаковая дата в обоих полях.
  • Товар (article/sku) необязателен — для расхода, относящегося к конкретному товару.
  • Даты — "YYYY-MM-DD". Ошибка в любой строке — ничего не записывается, в ответе перечислены все найденные ошибки.
  • После таймаута или ошибки сети НЕ повторяйте append вслепую: прочитайте форму и проверьте, записались ли строки.
Wildberries · поля и пример

Товар: необязателен: article — артикул WB (nmID), целое число

date_payment Дата платежа (ДДС) · обязательно date
date_period Дата периода (ОПиУ) · обязательно date
operation_type Тип операции · обязательноДопустимые значения: Расход, Приход select
category Статья · обязательноДопустимые значения: Аренда, Внешний маркетинг, Выплата дивидендов, Закупка товара, Логистика внутри РФ, Логистика из других стран, Налог с продаж на маркетплейсах, Основные средства, Погашение процентов по долгу (займы, кредиты), Погашение тела долга (займы, кредиты), Поиск и подбор персонала (HR), Получение кредита, займа, Поступления от Wildberries, Представительские расходы, Привлечение инвестиций, Прочие, Прочие налоги и пошлины, Прочие поступления, Расходные материалы, Расходы на ведение бухгалтерии, Расчетно-кассовое обслуживание (РКО), Регистрация ИП, Регистрация торговых марок, Сертификация товаров, Создание контента, Услуги байера, Услуги сервисов, Услуги связи, Услуги сторонних подрядчиков, Фонд оплаты труда, Фулфилмент, Честный знак select
sum Сумма, руб · обязательно number
comment Комментарий string
POST /v1/wb/forms/expenses/update
{
  "cabinets": [
    "12345"
  ],
  "mode": "append",
  "rows": [
    {
      "date_payment": "2026-10-05",
      "date_period": "2026-10-01",
      "operation_type": "Расход",
      "category": "Аренда",
      "sum": 85000,
      "comment": "Аренда склада за октябрь"
    }
  ]
}
Ozon · поля и пример

Товар: необязателен: sku — SKU Ozon (форма хранит SKU); можно article — артикул продавца: article подходит, только если у артикула один SKU

date_payment Дата платежа (ДДС) · обязательно date
date_period Дата периода (ОПиУ) · обязательно date
operation_type Тип операции · обязательноДопустимые значения: Расход, Приход select
category Статья · обязательноДопустимые значения: Аренда, Внешний маркетинг, Выплата дивидендов, Закупка товара, Логистика внутри РФ, Логистика из других стран, Налог с продаж на маркетплейсах, Основные средства, Погашение процентов по долгу (займы, кредиты), Погашение тела долга (займы, кредиты), Поиск и подбор персонала (HR), Получение кредита, займа, Поступления от Ozon, Представительские расходы, Привлечение инвестиций, Прочие, Прочие налоги и пошлины, Прочие поступления, Расходные материалы, Расходы на ведение бухгалтерии, Расчетно-кассовое обслуживание (РКО), Регистрация ИП, Регистрация торговых марок, Сертификация товаров, Создание контента, Услуги байера, Услуги сервисов, Услуги связи, Услуги сторонних подрядчиков, Фонд оплаты труда, Фулфилмент, Честный знак select
sum Сумма, руб · обязательно number
comment Комментарий string
POST /v1/ozon/forms/expenses/update
{
  "cabinets": [
    "67890"
  ],
  "mode": "append",
  "rows": [
    {
      "date_payment": "2026-10-05",
      "date_period": "2026-10-01",
      "operation_type": "Расход",
      "category": "Аренда",
      "sum": 85000,
      "comment": "Аренда склада за октябрь"
    }
  ]
}
Яндекс Маркет · поля и пример

Товар: необязателен: article — артикул продавца (SKU магазина, offer_id), строка

date_payment Дата платежа (ДДС) · обязательно date
date_period Дата периода (ОПиУ) · обязательно date
operation_type Тип операции · обязательноДопустимые значения: Расход, Приход select
category Статья · обязательноДопустимые значения: Аренда, Внешний маркетинг, Выплата дивидендов, Закупка товара, Логистика внутри РФ, Логистика из других стран, Налог с продаж на маркетплейсах, Основные средства, Погашение процентов по долгу (займы, кредиты), Погашение тела долга (займы, кредиты), Поиск и подбор персонала (HR), Получение кредита, займа, Поступления от Яндекс Маркета, Представительские расходы, Привлечение инвестиций, Прочие, Прочие налоги и пошлины, Прочие поступления, Расходные материалы, Расходы на ведение бухгалтерии, Расчетно-кассовое обслуживание (РКО), Регистрация ИП, Регистрация торговых марок, Сертификация товаров, Создание контента, Услуги байера, Услуги сервисов, Услуги связи, Услуги сторонних подрядчиков, Фонд оплаты труда, Фулфилмент, Честный знак select
sum Сумма, руб · обязательно number
comment Комментарий string
POST /v1/yandex/forms/expenses/update
{
  "cabinets": [
    "11223344"
  ],
  "mode": "append",
  "rows": [
    {
      "date_payment": "2026-10-05",
      "date_period": "2026-10-01",
      "operation_type": "Расход",
      "category": "Аренда",
      "sum": 85000,
      "comment": "Аренда склада за октябрь"
    }
  ]
}

Налоги · taxes

Система налогообложения, ставка налога и НДС — помесячно. Из них считаются налог и НДС в ОПиУ, Unit-факте и прибыли.

POST https://web.metriclab.ru/v1/{marketplace}/forms/taxes
POST https://web.metriclab.ru/v1/{marketplace}/forms/taxes/update

Грейн · Wildberries: месяц × уровень: «Налог по умолчанию» → предмет → товар

Грейн · Ozon: месяц × уровень: «Налог по умолчанию» → коммерческая категория → товар

Грейн · Яндекс Маркет: месяц × уровень: «Налог по умолчанию» → категория → товар

Чтение

cabinetsобязателен, ровно ОДИН кабинет: ["<cabinet_id или имя кабинета из GET /v1/cabinets>"]
monthопц., "YYYY-MM" (по умолчанию — текущий месяц)
month_from / month_toопц., диапазон "YYYY-MM" до 60 месяцев
productsопц., "overrides" (по умолчанию: только товары, у которых налог отличается от их категории), "all" — все товары, "none" — без товаров

data.rows — {level, category, [товар], months: {"YYYY-MM": {tax_type, tax_rate, vat}}}: ДЕЙСТВУЮЩИЕ значения с учётом наследования.

Запись

upsert по (уровень, категория/товар, месяц): меняются только переданные поля из tax_type/tax_rate/vat, остальные остаются. Повтор безопасен.

cabinetsобязателен, ровно ОДИН кабинет: ["<cabinet_id или имя кабинета из GET /v1/cabinets>"]
itemsдо 5000 шт.: {level, category (для level="category"), товар (для level="product"), month ИЛИ month_from+month_to, tax_type?, tax_rate?, vat?}

data.written — сколько записей изменено, data.skipped — товары, которых нет в кабинете.

Уровни

Wildberries

default«Налог по умолчанию» — действует на все товары, у которых нет своей ставки
categoryпредмет — имя ровно как в чтении формы (поле category)
productтовар — перекрывает категорию

Ozon

default«Налог по умолчанию» — действует на все товары, у которых нет своей ставки
categoryкоммерческая категория — имя ровно как в чтении формы (поле category)
productтовар — перекрывает категорию

Яндекс Маркет

default«Налог по умолчанию» — действует на все товары, у которых нет своей ставки
categoryкатегория — имя ровно как в чтении формы (поле category)
productтовар — перекрывает категорию
Правила и частые ошибки
  • Наследование: товар > категория > «Налог по умолчанию» за месяц > налог кабинета. Ставьте на самом общем уровне, который подходит: чаще всего достаточно level="default".
  • Ставка и НДС — проценты числом: 6 значит 6 %, НДС 0 — без НДС.
  • Месяцы — с 2023-01 по текущий; будущие месяцы форма не хранит.
  • Товарная ставка, совпавшая со ставкой категории, не хранится отдельно — это нормально.
Wildberries · поля и пример

Товар: для level="product": article — nmID, целое; barcode — опц., баркод размера (без него значение ляжет на все баркоды артикула)

tax_type Тип налогообложенияДопустимые значения: АУСН, УСН Доход, УСН Доход-Расход, ОСНО select
tax_rate Налоговая ставка, %0..100 number
vat НДС, %0..100 number
POST /v1/wb/forms/taxes/update
{
  "cabinets": [
    "12345"
  ],
  "items": [
    {
      "level": "default",
      "month_from": "2026-01",
      "month_to": "2026-10",
      "tax_type": "УСН Доход",
      "tax_rate": 6,
      "vat": 0
    }
  ]
}
Ozon · поля и пример

Товар: для level="product": sku — SKU Ozon, или article — артикул продавца (значение ляжет на все его SKU)

tax_type Тип налогообложенияДопустимые значения: АУСН, УСН Доход, УСН Доход-Расход, ОСНО select
tax_rate Налоговая ставка, %0..100 number
vat НДС, %0..100 number
POST /v1/ozon/forms/taxes/update
{
  "cabinets": [
    "67890"
  ],
  "items": [
    {
      "level": "default",
      "month_from": "2026-01",
      "month_to": "2026-10",
      "tax_type": "УСН Доход",
      "tax_rate": 6,
      "vat": 0
    }
  ]
}
Яндекс Маркет · поля и пример

Товар: для level="product": article — артикул продавца

tax_type Тип налогообложенияДопустимые значения: АУСН, УСН Доход, УСН Доход-Расход, ОСНО select
tax_rate Налоговая ставка, %0..100 number
vat НДС, %0..100 number
POST /v1/yandex/forms/taxes/update
{
  "cabinets": [
    "11223344"
  ],
  "items": [
    {
      "level": "default",
      "month_from": "2026-01",
      "month_to": "2026-10",
      "tax_type": "УСН Доход",
      "tax_rate": 6,
      "vat": 0
    }
  ]
}

Что нового

Список изменений публичного API — от новых к старым. Каждая запись имеет тип (added, changed, deprecated, removed, fixed), дату и краткое описание. Следите за этим разделом перед обновлением своей интеграции.

  • added

    Планы: к перечислению, целевой ДРР и маржинальность

    В форме plans (POST /v1/{wb,ozon,yandex}/forms/plans и …/plans/update) четыре новые метрики: plan_for_pay_rub — план суммы к перечислению, руб; plan_drr_orders_pct и plan_drr_sales_pct — целевой ДРР от заказов и от продаж, %; plan_margin_pct — целевая маржинальность, %. У целевых метрик в списке metrics стоит level: true: это планка в процентах, month_total ставится в каждый день месяца как есть (можно с дробью) и не делится по дням, а при чтении month_total — среднее дней с планом. В POST /v1/{wb,ozon,yandex}/metrics — план суммы к перечислению ({mp}_rnp_for_pay_plan) и процент его выполнения ({mp}_for_pay_plan_pct, computed).

  • added

    Яндекс Маркет

    Маркетплейс yandex: POST /v1/yandex/metrics, /advertising, /unit-fact, /costs и /costs-update — тот же расчёт, что в отчётах на сайте. Кабинет ЯМ — бизнес-аккаунт; его id и имя отдаёт GET /v1/cabinets (marketplace: "yandex"). Товар — артикул продавца. Себестоимость у ЯМ, как у Ozon, по полумесяцам: ключ периода "2026_август_1" (1–15) или "2026_август_2" (16–конец месяца). Расчёта поставок и остатков по складам для ЯМ пока нет — как и на сайте.

  • added

    Ручные формы: чтение и запись

    POST /v1/{wb,ozon,yandex}/forms/{form} читает, POST …/forms/{form}/update записывает ручные формы кабинета: product-groups (группы товаров), plans (планы по дням), notes (заметки), self-purchases (самовыкупы), distributions (раздачи), expenses (операционные расходы), taxes (налоги). Пишется тем же кодом, что форма на сайте: изменения сразу видны в форме, отчёты пересобираются сами. GET /v1/{marketplace}/forms — полное описание каждой формы: поля, допустимые значения, правила и примеры (его стоит прочитать до первой записи, особенно ИИ-ассистенту). Запись проверяется целиком: при ошибке ничего не записывается, а в ответе перечислены все ошибки.

  • added

    Каталоги метрик и колонок доступны по ключу

    GET /v1/{marketplace}/metrics-catalog, /advertising-catalog и /unit-fact-catalog теперь отвечают и внешнему клиенту с API-ключом (раньше их видела только эта страница документации): ИИ-ассистент может сам взять ключи метрик, не разбирая HTML.

  • changed

    Себестоимость — по доступу к «Ручным формам»

    POST /v1/{marketplace}/costs и /costs-update теперь работают так же, как остальные ручные формы: если для аккаунта отключена вкладка «Ручные формы», они отвечают 403. Себестоимость — тоже ручная форма, и API не открывает её в обход сайта. Если формы в аккаунте включены, ничего не меняется.

  • added

    Планы в метриках: сам план, а не только факт и % выполнения

    В POST /v1/{wb,ozon}/metrics можно запросить планы, которые вы занесли в форму «Планы» на сайте: показы, клики, корзина, заказы (шт и руб), продажи (шт и руб), расходы на рекламу и прибыль (у Wildberries прибыль появилась вместе с планом по ней). В каталоге метрик у них тег plan и поле plan_for — ключ метрики факта, к которой относится план. План среза равен сумме дневных планов внутри него: в totals — за весь период, в by_date — за дату, в by_article — по товару, в by_article_date — ровно на грани товар×дата. Товар, на который план стоит, а продаж не было, в разрезах тоже появится. Процент выполнения считается как факт ÷ план × 100 — ровно та формула, что теперь указана у строк «% ВЫПОЛНЕНИЯ» в каталоге (раньше в ней стояло служебное имя, которого снаружи нет). С group_by ["campaign"] планы не отдаются: они ставятся на товар, а не на кампанию.

  • added

    Ссылка на документацию и подсказка в каждом ответе

    Во всех успешных ответах появились поля docs (ссылка на раздел документации вызванного метода) и hint (короткая подсказка, какой метод для какой задачи и где брать имена метрик). Это для ИИ-агентов, которым дали ключ без документации: по подсказке они найдут описание методов сами. Формат остальных полей не изменился. В документации добавлен раздел «Какой метод выбрать».

  • added

    Unit-факт: лист отчёта по артикулам через API

    POST /v1/{wb,ozon}/unit-fact — лист «Unit-факт» из виджета «Таблица» на сайте, строка на товар (Wildberries — артикул и размер, Ozon — SKU) за период: реализация, все услуги площадки по статьям, себестоимость, налог и НДС, сумма к перечислению, прибыль, маржинальность, доли, показатели на единицу, ABC-классы и остатки. Считается тем же кодом, что и таблица на сайте: колонки-формулы и ABC приходят уже посчитанными. Список колонок с описаниями и формулами — GET /v1/{wb,ozon}/unit-fact-catalog, он же в документации. Остатки — снимок на самую свежую дату (meta.stocks.latest); значения на последнюю дату внутри периода лежат в тех же колонках с суффиксом __in_period. У Wildberries в meta.cabinets по каждому кабинету ровно одна заметка: с какой даты доступен ежедневный Unit-факт и какие недели периода вошли по дням, какие одной строкой за неделю целиком, а какие не вошли (закрыты только недельным отчётом и задеты периодом не целиком) — как на сайте. Пагинация limit/offset (по умолчанию и максимум 5000 строк), фильтры по товарам — как в остальных методах. Лимит 3 запроса/мин.

  • changed

    Ошибки: ссылка на документацию в каждом ответе с ошибкой

    В ответах с ошибкой формы {"status":"error"} (400, 500) текст в поле error теперь заканчивается рекомендацией свериться с документацией и ссылкой на раздел нужного эндпоинта, например https://web.metriclab.ru/api-doc/#ep-wb-stocks. Та же ссылка отдельно приходит в новом поле docs. При ошибках сервера (500) в error больше нет технических деталей — только общий текст, что делать; подробности остаются в наших логах. Формат остальных ответов не изменился.

  • added

    Каталог метрик: как метрику сворачивать (aggregation / time_aggregation)

    В каждой записи каталога (/v1/{wb,ozon}/{metrics,advertising}-catalog) у метрик, которые приходят данными, появились два поля: aggregation — как сворачивать значения по товарам внутри одного дня, и time_aggregation — как сворачивать по дням внутри периода. У подавляющего большинства метрик там sum, и ничего не меняется. Но часть метрик — это состояние на день, а не поток за день: остатки (stocks_amount, stocks_amount_fbs, stocks_amount_total, stocks_in_transit) сворачиваются по дням как last, цены и СПП (price_before_spp, price_after_spp, price_after_spp_and_card, spp_percent) — среднее по товарам и last по дням, позиция в поиске (search_position) — минимум. Ответ эндпоинтов не изменился: data.current.totals по-прежнему приходит суммой по всем строкам, поэтому для таких метрик итог за период нужно считать самому — запросите group_by ['date'] (и 'article', если нужны цифры по товарам) и сверните ряд так, как говорят эти поля. Именно так считает виджет на сайте, и только так цифра совпадёт с тем, что видит клиент в личном кабинете.

  • changed

    Wildberries: расходы на рекламу теперь по всем источникам оплаты

    Продвижение на Wildberries оплачивается двумя разными вещами: деньгами продавца (баланс и счёт) и бонусами, промо-бонусами и кэшбэком самой площадки. Раньше расход отдавался одним числом, в котором часть бонусных списаний учитывалась, а промо-бонусы не учитывались вовсе. Теперь логика единая: расход — это всё, чем оплачено продвижение. Значения вырастут на сумму промо-бонусов, у кабинетов без них не изменятся. Это касается метрики adv_sum в POST /v1/wb/metrics и поля expenses в POST /v1/wb/advertising; производные, которые вы считаете сами (CPM, CPC, ДРР), изменятся вместе с расходом. Чтобы видеть, из чего он сложился, в POST /v1/wb/metrics добавлены две метрики: adv_sum_money — оплаченное вашими деньгами, adv_sum_bonus — оплаченное бонусами и кэшбэком площадки; их сумма всегда равна adv_sum. Считать «сколько я реально заплатил за рекламу» нужно по adv_sum_money — именно эта часть уменьшает выплату. В POST /v1/wb/advertising разбивки нет: там расход по кампаниям приходит одним числом по всем источникам.

  • added

    Себестоимость: просмотр и редактирование

    POST /v1/{wb,ozon}/costs — себестоимость товаров, та же, что в форме «Себестоимость» на сайте. Без параметров отдаётся последняя известная себестоимость по каждому товару вместе с периодом, к которому она относится (period, period_label с датами, period_start/period_end); товары без себестоимости приходят с cost = null. Справочный список доступных периодов — в meta.periods: у Ozon периоды полумесячные (2026_август_1 = 01.08–15.08), у WB — недельные (2026_32 = 03.08–09.08). Параметр period отдаёт значения ровно за указанный период. POST /v1/{wb,ozon}/costs-update — запись себестоимости за один указанный период сразу по массиву товаров: WB — артикул (+ баркод, необязательно: без него значение проставляется на все размеры артикула), Ozon — SKU или артикул продавца; cost = null очищает значение. После сохранения себестоимость протягивается в периоды, где значения ещё нет, уже заполненные не перезаписываются — как при сохранении формы. Лимиты: 5 запросов/мин на каждый из методов, до 5000 позиций в запросе.

  • added

    Остатки по складам (FBO + FBS)

    POST /v1/{wb,ozon}/stocks — остатки построчно в разрезе товар × склад × дата: характеристики товара, склад, остаток шт, себестоимость единицы и остатка, цена единицы и остатка. Параметр type: fbo (по умолчанию), fbs или both. Период задаётся date_from/date_to; если их не передать — отдаются остатки за всё время. Себестоимость и цена единицы — актуальные (последние известные), стоимость остатка = кол-во × актуальную единицу. Пагинация limit/offset (для больших/all-time выборок), фильтры по товарам — как в виджетах.

  • added

    Заметки по товарам

    Заметки (текст по артикулу за дату, как в виджетах РНП / РНП-реклама) теперь доступны через публичное API как отдельная метрика — добавьте её ключ (см. флаг notes в catalog) в массив metrics. В ответе заметка лежит рядом с числовыми метриками: в by_article_date[артикул][дата] — текст ровно за этот день; при огрублении группировки (только по дате / только по артикулу / итоги) все попавшие в срез заметки объединяются через перенос строки. Разрез по кампаниям (group_by=['campaign']) с заметками не поддерживается.

  • added

    Расчёт поставок

    POST /v1/{wb,ozon}/supplies — потребность в поставках по той же методике, что и виджет «Расчёт поставок» на сайте: для каждого SKU (Ozon) или артикула+размера (WB) в разрезе по кластерам (Ozon) / федеральным округам (WB) считаются потребность, остаток, среднесуточные продажи и заказы, прогноз выкупов и оборачиваемость. Параметры расчёта: глубина планирования, плечо доставки, метод расчёта (продажи / заказы / заказы×%выкупа), прирост спроса, кратность поставки. Товары отсортированы по убыванию потребности; поддерживается пагинация (limit / offset), полный размер — в data.total.

  • added

    Рекламная статистика

    POST /v1/{wb,ozon}/advertising — расходы, показы, клики, заказы по рекламным кампаниям в разрезе по датам/артикулам. Производные метрики (CPM, CTR, CPC, CPA, ДРР) считаются на стороне клиента из сырых компонент по стандартным формулам.

  • added

    Публичный API v1

    Запуск публичного API: GET /v1/cabinets, POST /v1/wb/metrics, POST /v1/ozon/metrics. Bearer-авторизация по API-ключу. Whitelist метрик повторяет виджет RNP. Per-endpoint rate-limit (3 req/min для metrics, 10 для cabinets) + overall 60 req/min на ключ.