UNPKG

wildberries-api

Version:

Typescript API для Wildberries, сгенерированное из Swagger. Без внешних зависимостей.

1,815 lines (1,757 loc) 106 kB
/* 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>Мак