wildberries-api
Version:
Typescript API для Wildberries, сгенерированное из Swagger. Без внешних зависимостей.
1,815 lines (1,757 loc) • 106 kB
text/typescript
/* eslint-disable */
/* tslint:disable */
/*
* ---------------------------------------------------------------
* ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ##
* ## ##
* ## AUTHOR: acacode ##
* ## SOURCE: https://github.com/acacode/swagger-typescript-api ##
* ---------------------------------------------------------------
*/
/** @example {"countries":["AM","RU"]} */
export interface ExciseReportRequest {
/** Код стран по стандарту ISO 3166-2. Чтобы получить данные по всем странам, оставьте параметр пустым */
countries?: ("AM" | "BY" | "KG" | "KZ" | "RU" | "UZ")[];
}
export interface ExciseReportResponse {
response?: ModelsExciseReportResponse;
}
export interface ModelsExciseReportResponse {
data?: ModelsExciseReportResponseData;
}
export type ModelsExciseReportResponseData = {
/**
* Страна покупателя
* @example "Россия"
*/
name?: string;
/**
* Цена товара, с НДС
* @example 100
*/
price?: number;
/**
* Валюта
* @example "руб"
*/
currency_name_short?: string;
/**
* Код маркировки
* @example "0102900254680370215_Re/=lSbNiGD"
*/
excise_short?: string;
/**
* Баркод
* @example 2038893425820
*/
barcode?: string;
/**
* Артикул Wildberries
* @example 169085355
*/
nm_id?: number;
/**
* Тип операции, если есть:
*
* * `1` — вывод из оборота
* * `2` — возврат в оборот
* @example 1
*/
operation_type_id?: number;
/**
* Номер фискального документа (чека полного расчёта), если есть
* @example 12345678
*/
fiscal_doc_number?: number;
/**
* Дата фискализации (дата в чеке), если есть, `ГГГГ-ММ-ДД`
* @example "2024-01-01T00:00:00.000Z"
*/
fiscal_dt?: string;
/** Номер фискального накопителя, если есть */
fiscal_drive_number?: string;
/**
* `Rid`
* @example 606217433440
*/
rid?: number;
/**
* `Srid`
* @example "7513432034713632943.1.0"
*/
srid?: string;
}[];
/** @example [{"date":"2023-10-01","logWarehouseCoef":0,"officeId":507,"warehouse":"Коледино","warehouseCoef":1.7,"giId":123456,"chrt_id":1234567,"size":"0","barcode":"","subject":"Маски одноразовые","brand":"1000 Каталог","vendorCode":"Артикул_продавца","nmId":1234567,"volume":12,"calcType":"короба: без габаритов","warehousePrice":7.65,"barcodesCount":1,"palletPlaceCode":0,"palletCount":0,"originalDate":"2023-10-01","loyaltyDiscount":10,"tariffFixDate":"2023-10-01","tariffLowerDate":"2023-11-01"}] */
export type ResponsePaidStorage = {
/** Дата, за которую был расчёт или перерасчёт */
date?: string;
/** Коэффициент логистики и хранения */
logWarehouseCoef?: number;
/** ID склада */
officeId?: number;
/** Название склада */
warehouse?: string;
/** Коэффициент склада */
warehouseCoef?: number;
/** ID поставки */
giId?: number;
/** Идентификатор размера для этого артикула Wildberries */
chrtId?: number;
/** Размер (`techSize` в карточке товара) */
size?: string;
/** Баркод */
barcode?: string;
/** Предмет */
subject?: string;
/** Бренд */
brand?: string;
/** Артикул продавца */
vendorCode?: string;
/** Артикул Wildberries */
nmId?: number;
/** Объём товара */
volume?: number;
/** Способ расчёта */
calcType?: string;
/** Сумма хранения */
warehousePrice?: number;
/** Количество единиц товара (штук), подлежащих тарифицированию за расчётные сутки */
barcodesCount?: number;
/** Код паллетоместа */
palletPlaceCode?: number;
/** Количество паллет */
palletCount?: number;
/** Если был перерасчёт, это дата первоначального расчёта. Если перерасчёта не было, совпадает с `date` */
originalDate?: string;
/** Скидка программы лояльности, ₽ */
loyaltyDiscount?: number;
/** Дата фиксации тарифа */
tariffFixDate?: string;
/** Дата понижения тарифа */
tariffLowerDate?: string;
}[];
export interface GetTasksResponse {
data?: GetTasksResponseData;
}
export interface GetTasksResponseData {
/** ID задания */
id?: string;
/**
* Статус задания:
*
* * `new` — новое
* * `processing` — обрабатывается
* * `done` — отчёт готов
* * `purged` — отчёт удалён
* * `canceled` — отклонено
*/
status?: string;
}
export interface CreateTaskResponse {
data?: CreateTaskResponseData;
}
export interface CreateTaskResponseData {
/** ID задания на генерацию */
taskId?: string;
}
export interface ErrorResponse {
errors: string[];
}
export interface ResponseError {
/** @example null */
data?: object[];
/**
* Флаг ошибки
* @example true
*/
error?: boolean;
/**
* Описание ошибки
* @example "Текст ошибки"
*/
errorText?: string;
/** Дополнительные ошибки */
additionalErrors?: {
/** Структура, где допущена ошибка */
field?: string;
/** Описание */
description?: string;
}[];
}
/**
* Слишком много запросов
* @example {"title":"too many requests","detail":"limited by c122a060-a7fb-4bb4-abb0-32fd4e18d489","code":"07e4668e-ac2242c5c8c5-[UK-4dx7JUdskGZ]","requestId":"9d3c02cc698f8b041c661a7c28bed293","origin":"s2s-api-auth-stat","status":429,"statusText":"Too Many Requests"}
*/
export interface Response429 {
/** Заголовок ошибки */
title?: string;
/** Детали ошибки */
detail?: string;
/** Внутренний код ошибки */
code?: string;
/** Уникальный ID запроса */
requestId?: string;
/** ID внутреннего сервиса WB */
origin?: string;
/** HTTP статус-код */
status?: number;
/** Расшифровка HTTP статус-кода */
statusText?: string;
}
export interface Response429Daily {
/** @example null */
data?: object[];
/**
* Флаг ошибки
* @example true
*/
error?: boolean;
/**
* Описание ошибки
* @example "Превышен лимит отчётов в сутки. Максимальное количество отчётов - 20"
*/
errorText?: string;
/**
* Дополнительные ошибки
* @example null
*/
additionalErrors?: {
/** Структура, где допущена ошибка */
field?: string;
/** Описание */
description?: string;
}[];
}
export interface NmReportDetailRequest {
/** Название бренда */
brandNames?: string[];
/** Идентификатор предмета */
objectIDs?: number[];
/** Идентификатор тега */
tagIDs?: number[];
/** Артикул WB */
nmIDs?: number[];
/**
* Временная зона.<br> Если не указано, то по умолчанию используется Europe/Moscow.
* @example "Europe/Moscow"
*/
timezone?: string;
/** Период */
period: {
/**
* Начало периода
* @format time-date
* @example "2023-06-01T20:05:32.000Z"
*/
begin?: string;
/**
* Конец периода
* @format time-date
* @example "2024-03-01T20:05:32.000Z"
*/
end?: string;
};
/**
* Параметры сортировки.
* Если не указано, то по умолчанию используется значение "openCard" и сортировка по убыванию.
* <dl>
* <dt>Все виды сортировки <code>field</code>:</dt>
* <dd><code>openCard </code> — по открытию карточки (переход на страницу товара)</dd>
* <dd><code>addToCart </code> — по добавлениям в корзину</dd>
* <dd><code>orders </code> — по кол-ву заказов</dd>
* <dd><code>avgRubPrice </code> — по средней цене в рублях</dd>
* <dd><code>ordersSumRub </code> — по сумме заказов в рублях</dd>
* <dd><code>stockMpQty </code> — по кол-ву остатков маркетплейса шт.</dd>
* <dd><code>stockWbQty </code> — по кол-ву остатков на складе шт.</dd>
* <dd><code>cancelSumRub </code> — сумме возвратов в рублях</dd>
* <dd><code>cancelCount </code> — по кол-ву возвратов</dd>
* <dd><code>buyoutCount </code> — по кол-ву выкупов</dd>
* <dd><code>buyoutSumRub </code> — по сумме выкупов</dd>
* </dl>
*/
orderBy?: {
/**
* Вид сортировки
* @example "ordersSumRub"
*/
field?: string;
/**
* `asc` — по возрастанию, `desc` — по убыванию
* @example "asc"
*/
mode?: string;
};
/**
* Страница
* @format int32
* @example 1
*/
page: number;
}
export interface NmReportGroupedRequest {
/** Идентификатор предмета */
objectIDs?: number[];
/** Название бренда */
brandNames?: string[];
/** Идентификатор тега */
tagIDs?: number[];
/**
* Временная зона.<br> Если не указано, то по умолчанию используется Europe/Moscow.
* @example "Europe/Moscow"
*/
timezone?: string;
/** Период */
period: {
/**
* Начало периода
* @example "2023-10-04T20:05:32.000Z"
*/
begin?: string;
/**
* Конец периода
* @example "2024-03-01T20:05:32.000Z"
*/
end?: string;
};
/**
* Параметры сортировки.
* Если не указано, то по умолчанию используется значение "openCard" и сортировка по убыванию.
* <dl>
* <dt>Все виды сортировки <code>field</code>:</dt>
* <dd><code>openCard </code> — по открытию карточки (переход на страницу товара)</dd>
* <dd><code>addToCart </code> — по добавлениям в корзину</dd>
* <dd><code>orders </code> — по кол-ву заказов</dd>
* <dd><code>avgRubPrice </code> — по средней цене в рублях</dd>
* <dd><code>ordersSumRub </code> — по сумме заказов в рублях</dd>
* <dd><code>stockMpQty </code> — по кол-ву остатков маркетплейса шт.</dd>
* <dd><code>stockWbQty </code> — по кол-ву остатков на складе шт.</dd>
* </dl>
*/
orderBy?: {
/**
* Вид сортировки
* @example "ordersSumRub"
*/
field?: string;
/**
* `asc` — по возрастанию, `desc` — по убыванию
* @example "asc"
*/
mode?: string;
};
/**
* Страница
* @format int32
* @example 1
*/
page: number;
}
export interface NmReportDetailHistoryRequest {
/** Артикул Wildberries (максимум 20) */
nmIDs: number[];
/** Период */
period: {
/**
* Начало периода
* @format date
* @example "2023-06-20T00:00:00.000Z"
*/
begin?: string;
/**
* Конец периода
* @format date
* @example "2023-06-22T00:00:00.000Z"
*/
end?: string;
};
/**
* Временная зона.<br> Если не указано, то по умолчанию используется Europe/Moscow.
* @example "Europe/Moscow"
*/
timezone?: string;
/**
* Тип агрегации. Если не указано, то по умолчанию используется агрегация по дням. <br> Доступные уровни агрегации `day`, `week`
* @example "day"
*/
aggregationLevel?: string;
}
export interface NmReportGroupedHistoryRequest {
/** Идентификатор предмета */
objectIDs?: number[];
/** Название бренда */
brandNames?: string[];
/** Идентификатор тега */
tagIDs?: number[];
/** Период */
period: {
/**
* Начало периода
* @format date
* @example "2023-06-21T00:00:00.000Z"
*/
begin?: string;
/**
* Конец периода
* @format date
* @example "2023-06-23T00:00:00.000Z"
*/
end?: string;
};
/**
* Временная зона.<br> Если не указано, то по умолчанию используется Europe/Moscow.
* @example "Europe/Moscow"
*/
timezone?: string;
/**
* Тип агрегации. Если не указано, то по умолчанию используется агрегация по дням. <br> Доступные уровни агрегации `day`, `week`
* @example "day"
*/
aggregationLevel?: string;
}
export interface NmReportDetailResponse {
data?: {
/**
* Страница
* @format int32
* @example 1
*/
page?: number;
/** Есть ли следующая страница (false - нет, true - есть) */
isNextPage?: boolean;
cards?: {
/**
* Артикул WB
* @format int32
* @example 1234567
*/
nmID?: number;
/**
* Артикул продавца
* @example "supplierVendor"
*/
vendorCode?: string;
/**
* Название бренд
* @example "Some"
*/
brandName?: string;
/** Теги */
tags?: {
/**
* Идентификатор тега
* @format int32
* @example 123
*/
id?: number;
/**
* Название тега
* @example "Sale"
*/
name?: string;
}[];
/** Предмет */
object?: {
/**
* Идентификатор предмета
* @format int32
* @example 447
*/
id?: number;
/**
* Название предмета
* @example "Кондиционеры для волос"
*/
name?: string;
};
/** Статистика */
statistics?: {
/** Запрашиваемый период */
selectedPeriod?: {
/**
* Начало периода
* @example "2023-06-01T20:05:32.000Z"
*/
begin?: string;
/**
* Конец периода
* @example "2024-03-01T20:05:32.000Z"
*/
end?: string;
/**
* Количество переходов в карточку товара
* @format int32
* @example 0
*/
openCardCount?: number;
/**
* Положили в корзину, штук
* @format int32
* @example 0
*/
addToCartCount?: number;
/**
* Заказали товаров, шт
* @format int32
* @example 0
*/
ordersCount?: number;
/**
* Заказали на сумму, руб.
* @format int32
* @example 0
*/
ordersSumRub?: number;
/**
* Выкупили товаров, шт.
* @format int32
* @example 0
*/
buyoutsCount?: number;
/**
* Выкупили на сумму, руб.
* @format int32
* @example 0
*/
buyoutsSumRub?: number;
/**
* Отменили товаров, шт.
* @format int32
* @example 0
*/
cancelCount?: number;
/**
* Отменили на сумму, руб.
* @format int32
* @example 0
*/
cancelSumRub?: number;
/**
* Средняя цена, руб.
* @format int32
* @example 0
*/
avgPriceRub?: number;
/**
* Среднее количество заказов в день, шт.
* @format int32
* @example 0
*/
avgOrdersCountPerDay?: number;
/** Конверсии */
conversions?: {
/**
* Конверсия в корзину, % (Какой процент посетителей, открывших карточку товара, добавили товар в корзину)
* @format int32
* @example 0
*/
addToCartPercent?: number;
/**
* Конверсия в заказ, % (Какой процент посетителей, добавивших товар в корзину, сделали заказ)
* @format int32
* @example 0
*/
cartToOrderPercent?: number;
/**
* Процент выкупа, % (Какой процент посетителей, заказавших товар, его выкупили. Без учёта товаров, которые еще доставляются покупателю.)
* @format int32
* @example 0
*/
buyoutsPercent?: number;
};
};
/** Статистика за предыдущие 30 дней */
previousPeriod?: {
/**
* Начало периода
* @example "2023-05-07T20:05:31.000Z"
*/
begin?: string;
/**
* Конец периода
* @example "2023-06-01T20:05:31.000Z"
*/
end?: string;
/**
* Количество переходов в карточку товара
* @format int32
* @example 0
*/
openCardCount?: number;
/**
* Положили в корзину, штук
* @format int32
* @example 0
*/
addToCartCount?: number;
/**
* Заказали товаров, штук
* @format int32
* @example 1
*/
ordersCount?: number;
/**
* Заказали на сумму, руб.
* @format int32
* @example 1262
*/
ordersSumRub?: number;
/**
* Выкупили товаров, шт.
* @format int32
* @example 1
*/
buyoutsCount?: number;
/**
* Выкупили на сумму, руб.
* @format int32
* @example 1262
*/
buyoutsSumRub?: number;
/**
* Отменили товаров, штук
* @format int32
* @example 0
*/
cancelCount?: number;
/**
* Отменили на сумму, руб.
* @format int32
* @example 0
*/
cancelSumRub?: number;
/**
* Средняя цена, руб.
* @format int32
* @example 1262
*/
avgPriceRub?: number;
/**
* Среднее количество заказов в день, шт.
* @example 0.04
*/
avgOrdersCountPerDay?: number;
/** Конверсии */
conversions?: {
/**
* Конверсия в корзину, % (Какой процент посетителей, открывших карточку товара, добавили товар в корзину)
* @format int32
* @example 0
*/
addToCartPercent?: number;
/**
* Конверсия в заказ, % (Какой процент посетителей, добавивших товар в корзину, сделали заказ)
* @format int32
* @example 0
*/
cartToOrderPercent?: number;
/**
* Процент выкупа, % (Какой процент посетителей, заказавших товар, его выкупили. Без учёта товаров, которые еще доставляются покупателю.)
* @format int32
* @example 100
*/
buyoutsPercent?: number;
};
};
/** Сравнение двух периодов, в процентах */
periodComparison?: {
/**
* Динамика переходов в карточку товара
* @format int32
* @example 0
*/
openCardDynamics?: number;
/**
* Динамика добавлений в корзину
* @format int32
* @example 0
*/
addToCartDynamics?: number;
/**
* Динамика количества заказов
* @format int32
* @example -100
*/
ordersCountDynamics?: number;
/**
* Динамика суммы заказов, рублей
* @format int32
* @example -100
*/
ordersSumRubDynamics?: number;
/**
* Динамика выкупов, штук
* @format int32
* @example -100
*/
buyoutsCountDynamics?: number;
/**
* Динамика суммы выкупов, рублей
* @format int32
* @example -100
*/
buyoutsSumRubDynamics?: number;
/**
* Динамика отмен товаров, штук
* @format int32
* @example 0
*/
cancelCountDynamics?: number;
/**
* Динамика сумм отмен товаров, рублей
* @format int32
* @example 0
*/
cancelSumRubDynamics?: number;
/**
* Динамика среднего количества заказов в день
* @format int32
* @example 0
*/
avgOrdersCountPerDayDynamics?: number;
/**
* Динамика средней цены на товары. Учитываются скидки для акций и WB скидка.
* @format int32
* @example -100
*/
avgPriceRubDynamics?: number;
/** Конверсии */
conversions?: {
/**
* Конверсия в корзину, % (Какой процент посетителей, открывших карточку товара, добавили товар в корзину)
* @format int32
* @example 0
*/
addToCartPercent?: number;
/**
* Конверсия в заказ, % (Какой процент посетителей, добавивших товар в корзину, сделали заказ)
* @format int32
* @example 0
*/
cartToOrderPercent?: number;
/**
* Процент выкупа, % (Какой процент посетителей, заказавших товар, его выкупили. Без учёта товаров, которые еще доставляются покупателю.)
* @format int32
* @example -100
*/
buyoutsPercent?: number;
};
};
};
/** Остатки */
stocks?: {
/**
* Остатки МП, шт. (Общее количество остатков на складе продавца)
* @format int32
* @example 0
*/
stocksMp?: number;
/**
* Остатки на складах Wildberries (Общее количество остатков на складах Wildberries)
* @format int32
* @example 0
*/
stocksWb?: number;
};
}[];
};
/** Флаг ошибки */
error?: boolean;
/**
* Описание ошибки
* @example ""
*/
errorText?: string;
/** Дополнительные ошибки */
additionalErrors?: {
/** Структура, где допущена ошибка */
field?: string;
/** Описание */
description?: string;
}[];
}
export interface NmReportGroupedResponse {
data?: {
/**
* Страница
* @format int32
* @example 1
*/
page?: number;
/** Есть ли следующая страница (false - нет, true - есть) */
isNextPage?: boolean;
groups?: {
/**
* Название бренда
* @example "Some"
*/
brandName?: string;
tags?: {
/**
* Идентификатор тега
* @format int32
* @example 123
*/
id?: number;
/**
* Название тега
* @example "Sale"
*/
name?: string;
}[];
/** Предмет */
object?: {
/**
* Идентификатор предмета
* @format int32
* @example 1668
*/
id?: number;
/**
* Название предмета
* @example "Воски для волос"
*/
name?: string;
};
statistics?: {
/** Запрашиваемый период */
selectedPeriod?: {
/**
* Начало периода
* @example "2023-10-04T20:05:32.000Z"
*/
begin?: string;
/**
* Конец периода
* @example "2024-03-01T20:05:32.000Z"
*/
end?: string;
/**
* Количество переходов в КТ
* @format int32
* @example 0
*/
openCardCount?: number;
/**
* Положили в корзину, штук
* @format int32
* @example 0
*/
addToCartCount?: number;
/**
* Заказали товаров, штук
* @format int32
* @example 0
*/
ordersCount?: number;
/**
* Заказали на сумму, руб.
* @format int32
* @example 0
*/
ordersSumRub?: number;
/**
* Выкупили товаров, штук
* @format int32
* @example 0
*/
buyoutsCount?: number;
/**
* Выкупили на сумму, руб.
* @format int32
* @example 0
*/
buyoutsSumRub?: number;
/**
* Отменили товаров, штук
* @format int32
* @example 0
*/
cancelCount?: number;
/**
* Отменили на сумму, руб
* @format int32
* @example 0
*/
cancelSumRub?: number;
/**
* Средняя цена, руб.
* @format int32
* @example 0
*/
avgPriceRub?: number;
/**
* Среднее количество заказов в день, шт.
* @format int32
* @example 0
*/
avgOrdersCountPerDay?: number;
/** Конверсии */
conversions?: {
/**
* Конверсия в корзину, % (Какой процент посетителей, открывших карточку товара, добавили товар в корзину)
* @format int32
* @example 0
*/
addToCartPercent?: number;
/**
* Конверсия в заказ, % (Какой процент посетителей, добавивших товар в корзину, сделали заказ)
* @format int32
* @example 0
*/
cartToOrderPercent?: number;
/**
* Процент выкупа, % (Какой процент посетителей, заказавших товар, его выкупили. Без учёта товаров, которые еще доставляются покупателю.)
* @format int32
* @example 0
*/
buyoutsPercent?: number;
};
};
/** Статистика за предыдущие 30 дней */
previousPeriod?: {
/**
* Начало периода
* @example "2023-11-04T20:05:31.000Z"
*/
begin?: string;
/**
* Конец периода
* @example "2024-03-01T20:05:31.000Z"
*/
end?: string;
/**
* Количество переходов в КТ
* @format int32
* @example 466
*/
openCardCount?: number;
/**
* Положили в корзину, штук
* @format int32
* @example 72
*/
addToCartCount?: number;
/**
* Заказали товаров, штук
* @format int32
* @example 84
*/
ordersCount?: number;
/**
* Заказали на сумму, руб.
* @example 127060.42
*/
ordersSumRub?: number;
/**
* Выкупили товаров, штук
* @format int32
* @example 69
*/
buyoutsCount?: number;
/**
* Выкупили на сумму, руб.
* @example 104898.42
*/
buyoutsSumRub?: number;
/**
* Отменили товаров, штук
* @format int32
* @example 13
*/
cancelCount?: number;
/**
* Отменили на сумму, руб
* @format int32
* @example 0
*/
cancelSumRub?: number;
/**
* Средняя цена, руб.
* @example 1562.65
*/
avgPriceRub?: number;
/**
* Среднее количество заказов в день, шт.
* @example 0.72
*/
avgOrdersCountPerDay?: number;
/** Конверсии */
conversions?: {
/**
* Конверсия в корзину, % (Какой процент посетителей, открывших карточку товара, добавили товар в корзину)
* @example 15.5
*/
addToCartPercent?: number;
/**
* Конверсия в заказ, % (Какой процент посетителей, добавивших товар в корзину, сделали заказ)
* @example 116.7
*/
cartToOrderPercent?: number;
/**
* Процент выкупа, % (Какой процент посетителей, заказавших товар, его выкупили. Без учёта товаров, которые еще доставляются покупателю.)
* @example 84.1
*/
buyoutsPercent?: number;
};
};
/** Сравнение двух периодов, в процентах */
periodComparison?: {
/**
* Динамика переходов в карточку товара
* @format int32
* @example -100
*/
openCardDynamics?: number;
/**
* Динамика добавлений в корзину
* @format int32
* @example -100
*/
addToCartDynamics?: number;
/**
* Динамика количества заказов
* @format int32
* @example -100
*/
ordersCountDynamics?: number;
/**
* Динамика суммы заказов, рублей
* @format int32
* @example -100
*/
ordersSumRubDynamics?: number;
/**
* Динамика выкупов, штук
* @format int32
* @example -100
*/
buyoutsCountDynamics?: number;
/**
* Динамика суммы выкупов, рублей
* @format int32
* @example -100
*/
buyoutsSumRubDynamics?: number;
/**
* Динамика отмен товаров, штук
* @format int32
* @example 0
*/
cancelCountDynamics?: number;
/**
* Динамика сумм отмен товаров, рублей
* @format int32
* @example 0
*/
cancelSumRubDynamics?: number;
/**
* Динамика среднего количества заказов в день
* @format int32
* @example 0
*/
avgOrdersCountPerDayDynamics?: number;
/**
* Динамика средней цены на товары. Учитываются скидки для акций и WB скидка.
* @format int32
* @example -100
*/
avgPriceRubDynamics?: number;
/** Конверсии */
conversions?: {
/**
* Конверсия в корзину, % (Какой процент посетителей, открывших карточку товара, добавили товар в корзину)
* @format int32
* @example -100
*/
addToCartPercent?: number;
/**
* Конверсия в заказ, % (Какой процент посетителей, добавивших товар в корзину, сделали заказ)
* @format int32
* @example -100
*/
cartToOrderPercent?: number;
/**
* Процент выкупа, % (Какой процент посетителей, заказавших товар, его выкупили. Без учёта товаров, которые еще доставляются покупателю.)
* @format int32
* @example -100
*/
buyoutsPercent?: number;
};
};
};
}[];
};
/** Флаг ошибки */
error?: boolean;
/**
* Описание ошибки
* @example ""
*/
errorText?: string;
/** Дополнительные ошибки */
additionalErrors?: {
/** Структура, где допущена ошибка */
field?: string;
/** Описание */
description?: string;
}[];
}
export interface NmReportDetailHistoryResponse {
data?: {
/**
* Артикул WB
* @format int32
* @example 1234567
*/
nmID?: number;
/**
* Наименование КТ
* @example "Наименование КТ"
*/
imtName?: string;
/**
* Артикул продавца
* @example "supplierVendor"
*/
vendorCode?: string;
history?: {
/**
* Дата
* @format date
* @example "2023-06-20T00:00:00.000Z"
*/
dt?: string;
/**
* Количество переходов в карточку товара
* @format int32
* @example 26
*/
openCardCount?: number;
/**
* Положили в корзину, штук
* @format int32
* @example 1
*/
addToCartCount?: number;
/**
* Заказали товаров, шт
* @format int32
* @example 0
*/
ordersCount?: number;
/**
* Заказали на сумму, руб.
* @format int32
* @example 0
*/
ordersSumRub?: number;
/**
* Выкупили товаров, шт.
* @format int32
* @example 0
*/
buyoutsCount?: number;
/**
* Выкупили на сумму, руб.
* @format int32
* @example 0
*/
buyoutsSumRub?: number;
/**
* Процент выкупа, % (Какой процент посетителей, заказавших товар, его выкупили. Без учёта товаров, которые еще доставляются покупателю.)
* @format int32
* @example 0
*/
buyoutPercent?: number;
/**
* Конверсия в корзину, % (Какой процент посетителей, открывших карточку товара, добавили товар в корзину)
* @example 3.8
*/
addToCartConversion?: number;
/**
* Конверсия в заказ, % (Какой процент посетителей, добавивших товар в корзину, сделали заказ)
* @format int32
* @example 0
*/
cartToOrderConversion?: number;
}[];
}[];
/** Флаг ошибки */
error?: boolean;
/**
* Описание ошибки
* @example ""
*/
errorText?: string;
/** Дополнительные ошибки */
additionalErrors?: {
/** Структура, где допущена ошибка */
field?: string;
/** Описание */
description?: string;
}[];
}
export interface NmReportGroupedHistoryResponse {
data?: {
/** Предмет */
object?: {
/**
* Идентификатор предмета
* @format int32
* @example 358
*/
id?: number;
/**
* Название предмета
* @example "Шампуни"
*/
name?: string;
};
/**
* Название бренда
* @example "Some"
*/
brandName?: string;
/** Тег */
tag?: {
/**
* Идентификатор тега
* @format int32
* @example 123
*/
id?: number;
/**
* Название тега
* @example "Sale"
*/
name?: string;
};
history?: {
/**
* @format date
* @example "2023-06-21T00:00:00.000Z"
*/
dt?: string;
/**
* Количество переходов в карточку товара
* @format int32
* @example 0
*/
openCardCount?: number;
/**
* Положили в корзину, штук
* @format int32
* @example 0
*/
addToCartCount?: number;
/**
* Заказали товаров, шт
* @format int32
* @example 0
*/
ordersCount?: number;
/**
* Заказали на сумму, руб.
* @format int32
* @example 0
*/
ordersSumRub?: number;
/**
* Выкупили товаров, шт.
* @format int32
* @example 0
*/
buyoutsCount?: number;
/**
* Выкупили на сумму, руб.
* @format int32
* @example 0
*/
buyoutsSumRub?: number;
/**
* Процент выкупа, % (Какой процент посетителей, заказавших товар, его выкупили. Без учёта товаров, которые еще доставляются покупателю.)
* @format int32
* @example 0
*/
buyoutPercent?: number;
/**
* Конверсия в корзину, % (Какой процент посетителей, открывших карточку товара, добавили товар в корзину)
* @format int32
* @example 0
*/
addToCartConversion?: number;
/**
* Конверсия в заказ, % (Какой процент посетителей, добавивших товар в корзину, сделали заказ)
* @format int32
* @example 0
*/
cartToOrderConversion?: number;
}[];
}[];
/** Флаг ошибки */
error?: boolean;
/**
* Описание ошибки
* @example ""
*/
errorText?: string;
/** Дополнительные ошибки */
additionalErrors?: {
/** Структура, где допущена ошибка */
field?: string;
/** Описание */
description?: string;
}[];
}
export interface BySelectedNmIDReq {
/**
* Идентификатор отчёта в UUID-формате. Генерируется продавцом самостоятельно
* @format uuid
*/
id: string;
/** Тип отчёта — `DETAIL_HISTORY_REPORT` */
reportType: string;
/** Название отчёта (если не указано, сформируется автоматически) */
userReportName?: string;
/** Параметры отчёта */
params?: {
/**
* `nmID `, по которым составить отчёт. Оставьте пустым, чтобы получить отчёт по всем товарам
* @maxItems 1000
* @minItems 0
*/
nmIDs?: number[];
/** Идентификаторы предметов */
subjectIDs?: number[];
/** Бренды */
brandNames?: string[];
/** Идентификаторы тегов */
tagIDs?: number[];
/**
* Начало периода
* @format date
*/
startDate: string;
/**
* Конец периода
* @format date
*/
endDate: string;
/** Временная зона, по умолчанию Europe/Moscow */
timezone?: string;
/**
* Как сгруппировать данные (по умолчанию по дням):
*
* * `day` — по дням
* * `week` — по неделям
* * `month` — по месяцам
*/
aggregationLevel?: "day" | "week" | "month";
/** Скрыть удалённые номенклатуры */
skipDeletedNm?: boolean;
};
}
export interface GroupedByObjectsBrandsAndTagsReq {
/**
* Идентификатор отчёта в UUID-формате. Генерируется продавцом самостоятельно
* @format uuid
*/
id: string;
/** Тип отчёта — `GROUPED_HISTORY_REPORT` */
reportType: string;
/** Название отчёта (если не указано, сформируется автоматически) */
userReportName?: string;
/** Параметры отчёта */
params?: {
/** Идентификаторы предметов */
subjectIDs?: number[];
/** Бренды */
brandNames?: string[];
/** Идентификаторы тегов */
tagIDs?: number[];
/**
* Начало периода
* @format date
*/
startDate: string;
/**
* Конец периода
* @format date
*/
endDate: string;
/** Временная зона, по умолчанию Europe/Moscow */
timezone?: string;
/**
* Как сгруппировать данные (по умолчанию по дням):
*
* * `day` — по дням
* * `week` — по неделям
* * `month` — по месяцам
*/
aggregationLevel?: string;
/** Скрыть удалённые `nmID` */
skipDeletedNm?: boolean;
};
}
export interface NmReportRetryReportRequest {
/**
* ID отчёта
* @format uuid
* @example "06eea887-9d9f-491f-b16a-bb1766fcb8d2"
*/
downloadId?: string;
}
export interface NmReportCreateReportResponse {
/**
* Уведомление, что началась генерация отчёта
* @example "Началось формирование файла/отчета"
*/
data?: string;
/**
* Флаг ошибки
* @example false
*/
error?: boolean;
/**
* Описание ошибки
* @example ""
*/
errorText?: string;
/**
* Дополнительные ошибки
* @example null
*/
additionalErrors?: {
/** Структура, где допущена ошибка */
field?: string;
/** Описание */
description?: string;
}[];
}
export interface NmReportGetReportsResponse {
data?: {
/**
* Идентификатор отчёта
* @format uuid
* @example "06eae887-9d9f-491f-b16a-bb1766fcb8d2"
*/
id?: string;
/**
* Дата и время завершения генерации
* @format date-time
* @example "2023-06-26T20:05:32.000Z"
*/
createdAt?: string;
/**
* Статус отчёта:
*
* * `WAITING` — в очереди на обработку
* * `PROCESSING` — генерируется
* * `SUCCESS —` готов
* * `RETRY` — ожидает повторной обработки
* * `FAILED` — не получилось сгенерировать, сгенерируйте повторно
* @example "SUCCESS"
*/
status?: string;
/**
* Название отчёта
* @example "Card report"
*/
name?: string;
/**
* Размер отчёта, Б
* @example 123
*/
size?: number;
/**
* Начало периода
* @format date
* @example "2023-06-21T00:00:00.000Z"
*/
startDate?: string;
/**
* Конец периода
* @format date
* @example "2023-06-23T00:00:00.000Z"
*/
endDate?: string;
}[];
/**
* Флаг ошибки
* @example false
*/
error?: boolean;
/** Текст ошибки */
errorText?: string;
/** @example null */
additionalErrors?: {
/** Структура, где допущена ошибка */
field?: string;
/** Описание */
description?: string;
}[];
}
export interface NmReportRetryReportResponse {
/**
* Уведомление, что началась повторная генерация отчёта
* @example "Началось переформирование файла/отчета"
*/
data?: string;
/**
* Флаг ошибки
* @example false
*/
error?: boolean;
/**
* Описание ошибки
* @example ""
*/
errorText?: string;
/**
* Дополнительные ошибки
* @example null
*/
additionalErrors?: {
/** Структура, где допущена ошибка */
field?: string;
/** Описание */
description?: string;
}[];
}
/** Прочие ошибки */
export interface ErrorInternalResponse {
error?: boolean;
/** @example "Internal server error" */
errorText?: string;
}
export type QueryParamsType = Record<string | number, any>;
export type ResponseFormat = keyof Omit<Body, "body" | "bodyUsed">;
export interface FullRequestParams extends Omit<RequestInit, "body"> {
/** set parameter to `true` for call `securityWorker` for this request */
secure?: boolean;
/** request path */
path: string;
/** content type of request body */
type?: ContentType;
/** query params */
query?: QueryParamsType;
/** format of response (i.e. response.json() -> format: "json") */
format?: ResponseFormat;
/** request body */
body?: unknown;
/** base url */
baseUrl?: string;
/** request cancellation token */
cancelToken?: CancelToken;
}
export type RequestParams = Omit<FullRequestParams, "body" | "method" | "query" | "path">;
export interface ApiConfig<SecurityDataType = unknown> {
baseUrl?: string;
baseApiParams?: Omit<RequestParams, "baseUrl" | "cancelToken" | "signal">;
securityWorker?: (securityData: SecurityDataType | null) => Promise<RequestParams | void> | RequestParams | void;
customFetch?: typeof fetch;
}
export interface HttpResponse<D extends unknown, E extends unknown = unknown> extends Response {
data: D;
error: E;
}
type CancelToken = Symbol | string | number;
export enum ContentType {
Json = "application/json",
FormData = "multipart/form-data",
UrlEncoded = "application/x-www-form-urlencoded",
Text = "text/plain",
}
export class HttpClient<SecurityDataType = unknown> {
public baseUrl: string = "";
private securityData: SecurityDataType | null = null;
private securityWorker?: ApiConfig<SecurityDataType>["securityWorker"];
private abortControllers = new Map<CancelToken, AbortController>();
private customFetch = (...fetchParams: Parameters<typeof fetch>) => fetch(...fetchParams);
private baseApiParams: RequestParams = {
credentials: "same-origin",
headers: {},
redirect: "follow",
referrerPolicy: "no-referrer",
};
constructor(apiConfig: ApiConfig<SecurityDataType> = {}) {
Object.assign(this, apiConfig);
}
public setSecurityData = (data: SecurityDataType | null) => {
this.securityData = data;
};
protected encodeQueryParam(key: string, value: any) {
const encodedKey = encodeURIComponent(key);
return `${encodedKey}=${encodeURIComponent(typeof value === "number" ? value : `${value}`)}`;
}
protected addQueryParam(query: QueryParamsType, key: string) {
return this.encodeQueryParam(key, query[key]);
}
protected addArrayQueryParam(query: QueryParamsType, key: string) {
const value = query[key];
return value.map((v: any) => this.encodeQueryParam(key, v)).join("&");
}
protected toQueryString(rawQuery?: QueryParamsType): string {
const query = rawQuery || {};
const keys = Object.keys(query).filter((key) => "undefined" !== typeof query[key]);
return keys
.map((key) => (Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key)))
.join("&");
}
protected addQueryParams(rawQuery?: QueryParamsType): string {
const queryString = this.toQueryString(rawQuery);
return queryString ? `?${queryString}` : "";
}
private contentFormatters: Record<ContentType, (input: any) => any> = {
[ContentType.Json]: (input: any) =>
input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input,
[ContentType.Text]: (input: any) => (input !== null && typeof input !== "string" ? JSON.stringify(input) : input),
[ContentType.FormData]: (input: any) =>
Object.keys(input || {}).reduce((formData, key) => {
const property = input[key];
formData.append(
key,
property instanceof Blob
? property
: typeof property === "object" && property !== null
? JSON.stringify(property)
: `${property}`,
);
return formData;
}, new FormData()),
[ContentType.UrlEncoded]: (input: any) => this.toQueryString(input),
};
protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams {
return {
...this.baseApiParams,
...params1,
...(params2 || {}),
headers: {
...(this.baseApiParams.headers || {}),
...(params1.headers || {}),
...((params2 && params2.headers) || {}),
},
};
}
protected createAbortSignal = (cancelToken: CancelToken): AbortSignal | undefined => {
if (this.abortControllers.has(cancelToken)) {
const abortController = this.abortControllers.get(cancelToken);
if (abortController) {
return abortController.signal;
}
return void 0;
}
const abortController = new AbortController();
this.abortControllers.set(cancelToken, abortController);
return abortController.signal;
};
public abortRequest = (cancelToken: CancelToken) => {
const abortController = this.abortControllers.get(cancelToken);
if (abortController) {
abortController.abort();
this.abortControllers.delete(cancelToken);
}
};
public request = async <T = any, E = any>({
body,
secure,
path,
type,
query,
format,
baseUrl,
cancelToken,
...params
}: FullRequestParams): Promise<HttpResponse<T, E>> => {
const secureParams =
((typeof secure === "boolean" ? secure : this.baseApiParams.secure) &&
this.securityWorker &&
(await this.securityWorker(this.securityData))) ||
{};
const requestParams = this.mergeRequestParams(params, secureParams);
const queryString = query && this.toQueryString(query);
const payloadFormatter = this.contentFormatters[type || ContentType.Json];
const responseFormat = format || requestParams.format;
return this.customFetch(`${baseUrl || this.baseUrl || ""}${path}${queryString ? `?${queryString}` : ""}`, {
...requestParams,
headers: {
...(requestParams.headers || {}),
...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}),
},
signal: (cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal) || null,
body: typeof body === "undefined" || body === null ? null : payloadFormatter(body),
}).then(async (response) => {
const r = response.clone() as HttpResponse<T, E>;
r.data = null as unknown as T;
r.error = null as unknown as E;
const data = !responseFormat
? r
: await response[responseFormat]()
.then((data) => {
if (r.ok) {
r.data = data;
} else {
r.error = data;
}
return r;
})
.catch((e) => {
r.error = e;
return r;
});
if (cancelToken) {
this.abortControllers.delete(cancelToken);
}
if (!response.ok) throw data;
return data;
});
};
}
/**
* @title Описание API Аналитика
*
* Сервис предоставляет публичный API для получения аналитических данных.
* С помощью этих методов вы можете получать аналитические отчёты. [Часть методов](./#tag/Voronka-prodazh-(Dzhem)) доступна только с [подпиской на расширенную аналитику Джем](https://seller.wildberries.ru/dynamic-product-categories/jam).
*/
export class Api<SecurityDataType extends unknown> extends HttpClient<SecurityDataType> {
api = {
/**
* @description Получение статистики КТ за выбранный период, по nmID/предметам/брендам/тегам.<br> Поля `brandNames`,`objectIDs`, `tagIDs`, `nmIDs` могут быть пустыми, тогда в ответе идут все карточки продавца.<br> При выборе нескольких полей в ответ приходят данные по карточкам, у которых есть все выбранные поля. Работает с пагинацией.<br> Можно получить отчёт максимум за последний год (365 дней).<br> Также в данных, где предоставляется информация по предыдущему периоду: * В `previousPeriod` данные за такой же период, что и в `selectedPeriod`. * Если дата начала `previousPeriod` раньше, чем год назад от текущей даты, она будет приведена к виду: `previousPeriod.start = текущая дата - 365 дней.` <br> <b>Максимум 3 запроса в минуту.</b>
*
* @tags Воронка продаж
* @name V2NmReportDetailCreate
* @summary Получение статистики КТ за выбранный период, по nmID/предметам/брендам/тегам
* @request POST:/api/v2/nm-report/detail
* @secure
*/
v2NmReportDetailCreate: (data: NmReportDetailRequest, params: RequestParams = {}) =>
this.request<NmReportDetailResponse, ResponseError | void>({
path: `/api/v2/nm-report/detail`,
method: "POST",
body: data,
secure: true,
type: ContentType.Json,
format: "json",
...params,
}),
/**
* @description Получение статистики КТ за период, сгруппированный по предметам, брендам и тегам.<br> Поля `brandNames`, `objectIDs`, `tagIDs` могут быть пустыми, тогда группировка происходит по всем карточкам продавца.<br> Можно получить отчёт максимум за последний год (365 дней). <br> Также в данных, где предоставляется информация по предыдущему периоду: * В `previousPeriod` данные за такой же период, что и в `selectedPeriod`. * Если дата начала `previousPeriod` раньше, чем год назад от текущей даты, она будет приведена к виду: `previousPeriod.start = текущая дата - 365 дней.` <br> <b>Максимум 3 запроса в минуту.</b>
*
* @tags Воронка продаж
* @name V2NmReportGroupedCreate
* @summary Получение статистики КТ за период, сгруппированный по предметам, брендам и тегам
* @request POST:/api/v2/nm-report/grouped
* @secure
*/
v2NmReportGroupedCreate: (data: NmReportGroupedRequest, params: RequestParams = {}) =>
this.request<NmReportGroupedResponse, ResponseError | void>({
path: `/api/v2/nm-report/grouped`,
method: "POST",
body: data,
secure: true,
type: ContentType.Json,
format: "json",
...params,
}),
/**
* @description Получение статистики КТ по дням по выбранным `nmID`. Можно получить отчёт максимум за последнюю неделю. Чтобы получать отчёты за период до года, подпишитесь на [расширенную аналитику Джем](https://seller.wildberries.ru/dynamic-product-categories/jam). <br> <b>Мак