wildberries-api
Version:
Typescript API для Wildberries, сгенерированное из Swagger. Без внешних зависимостей.
1,745 lines (1,690 loc) • 63.3 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 ##
* ---------------------------------------------------------------
*/
export interface Response200 {
data?: {
templates?: {
/** Идентификатор шаблона */
id?: string;
/** Название шаблона */
name?: string;
/** Текст шаблона */
text?: string;
}[];
};
/** Есть ли ошибка */
error?: boolean;
/** Описание ошибки */
errorText?: string;
/** Дополнительные ошибки */
additionalErrors?: string[] | null;
}
export interface PostTemplateOK {
data?: {
/** Идентификатор шаблона */
id?: string;
};
/** Есть ли ошибка */
error?: boolean;
/** Описание ошибки */
errorText?: string;
/** Дополнительные ошибки */
additionalErrors?: string[] | null;
}
export interface PatchDelRespOK {
data?: boolean | null;
/** Есть ли ошибка */
error?: boolean;
/** Описание ошибки */
errorText?: string;
/** Дополнительные ошибки */
additionalErrors?: string[] | null;
}
export interface ResponseErrorTemplate {
data?: object | null;
/** Есть ли ошибка */
error?: boolean;
/** Описание ошибки */
errorText?: string;
/** Дополнительные ошибки */
additionalErrors?: string[] | null;
}
export interface ResponsefeedbackErr {
data?: object | null;
/** Есть ли ошибка */
error?: boolean;
/** Описание ошибки */
errorText?: string;
/** Дополнительные ошибки */
additionalErrors?: string[] | null;
requestId?: string;
}
export interface ProductRating {
/** Артикул WB */
nmId?: number;
/** Идентификатор карточки товара */
imtId?: number;
/** Сумма оценок */
valuationsSum?: number;
/** Количество отзывов */
feedbacksCount?: number;
/** Средняя оценка */
valuation?: number;
/** Название товара */
productName?: string | null;
/** Артикул продавца */
supplierArticle?: string;
/** Бренд товара */
brandName?: string;
}
/** Массив структур отзывов */
export type ResponseFeedback = {
/** Id отзыва */
id?: string;
/** Имя автора отзыва */
userName?: string;
/**
* Соответствие заявленного размера реальному.
* <br>Возможные значения:
* - ` ` - для безразмерных товаров
* - `ок` - соответствует размеру
* - `smaller` - маломерит
* - `bigger` - большемерит
*/
matchingSize?: string;
/** Текст отзыва */
text?: string;
/** Оценка товара от покупателя */
productValuation?: number;
/**
* Дата и время создания отзыва
* @format date-time
*/
createdDate?: string;
/**
* Статус отзыва:
* - `none` - не обработан (новый)
* - `wbRu` - обработан
*/
state?: string;
/** Структура ответа */
answer?: {
/** Текст ответа */
text?: string;
/**
* Статус:
* - `none` - новый
* - `wbRu` - отображается на сайте
* - `reviewRequired` - ответ проходит проверку
* - `rejected` - ответ отклонён
*/
state?: string;
};
/** Структура товара */
productDetails?: {
/** Артикул WB */
nmId?: number;
/** Идентификатор карточки товара */
imtId?: number;
/** Название товара */
productName?: string;
/** Артикул продавца */
supplierArticle?: string | null;
/** Имя продавца */
supplierName?: string | null;
/** Бренд товара */
brandName?: string | null;
/** Размер товара (`techSize` в КТ) */
size?: string;
};
/** Массив структур фотографий */
photoLinks?: {
/** Адрес фотографии полного размера */
fullSize?: string;
/** Адрес фотографии маленького размера */
miniSize?: string;
}[];
/** Структура видео */
video?: {
/** Ссылка на обложку видео */
previewImage?: string;
/** Ссылка на файл плейлиста видео (доступно по протоколу hls) */
link?: string;
/** Общая продолжительность видео */
duration_sec?: number;
};
/** Просмотрен ли отзыв */
wasViewed?: boolean;
/** Доступна ли продавцу оценка отзыва (`true` - доступна, `false` - не доступна) */
isAbleSupplierFeedbackValuation?: boolean;
/** Оценка отзыва, оставленная продавцом */
supplierFeedbackValuation?: number;
/** Доступна ли продавцу оценка товара (`true` - доступна, `false` - не доступна) */
isAbleSupplierProductValuation?: boolean;
/** Оценка товара, оставленная продавцом */
supplierProductValuation?: number;
/** Доступна ли товару опция возврата (`false` - нет, `true` - да) */
isAbleReturnProductOrders?: boolean;
/** Дата и время, когда на запрос возврата был получен ответ со статус-кодом 200. */
returnProductOrdersDate?: string;
/** Список тегов покупателя */
bables?: 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 Вопросов и Отзывов
*
* Допускается 1 запрос в секунду на методы вопросов и отзывов в целом. При превышении лимита до 3 запросов в секунду последует блокировка на 60 секунд.
*/
export class Api<SecurityDataType extends unknown> extends HttpClient<SecurityDataType> {
api = {
/**
* @description Метод позволяет получить количество неотвеченных вопросов за сегодня и за всё время.
*
* @tags Вопросы
* @name V1QuestionsCountUnansweredList
* @summary Неотвеченные вопросы
* @request GET:/api/v1/questions/count-unanswered
* @secure
*/
v1QuestionsCountUnansweredList: (params: RequestParams = {}) =>
this.request<
{
data?: {
/**
* Количество неотвеченных вопросов
* @example 24
*/
countUnanswered?: number;
/**
* Количество неотвеченных вопросов за сегодня
* @example 0
*/
countUnansweredToday?: number;
};
/**
* Есть ли ошибка
* @example false
*/
error?: boolean;
/**
* Описание ошибки
* @example ""
*/
errorText?: string;
/**
* Дополнительные ошибки
* @example null
*/
additionalErrors?: string[] | null;
},
ResponsefeedbackErr | void
>({
path: `/api/v1/questions/count-unanswered`,
method: "GET",
secure: true,
format: "json",
...params,
}),
/**
* @description Метод отображает информацию о наличии у продавца непросмотренных отзывов и вопросов.
*
* @tags Вопросы
* @name V1NewFeedbacksQuestionsList
* @summary Непросмотренные отзывы и вопросы
* @request GET:/api/v1/new-feedbacks-questions
* @secure
*/
v1NewFeedbacksQuestionsList: (params: RequestParams = {}) =>
this.request<
{
data?: {
/**
* Есть ли непросмотренные вопросы (`true` есть, `false` нет)
* @example true
*/
hasNewQuestions?: boolean;
/**
* Есть ли непросмотренные отзывы (`true` есть, `false` нет)
* @example false
*/
hasNewFeedbacks?: boolean;
};
/**
* Есть ли ошибка
* @example false
*/
error?: boolean;
/**
* Описание ошибки
* @example ""
*/
errorText?: string;
/**
* Дополнительные ошибки
* @example null
*/
additionalErrors?: string[] | null;
},
void | ResponsefeedbackErr
>({
path: `/api/v1/new-feedbacks-questions`,
method: "GET",
secure: true,
format: "json",
...params,
}),
/**
* @description Метод позволяет получить товары, про которые чаще всего спрашивают.
*
* @tags Вопросы
* @name V1QuestionsProductsRatingList
* @summary Часто спрашиваемые товары
* @request GET:/api/v1/questions/products/rating
* @secure
*/
v1QuestionsProductsRatingList: (
query: {
/**
* Количество запрашиваемых товаров (max. 100)
* @example 1
*/
size: number;
},
params: RequestParams = {},
) =>
this.request<
{
data?: {
/** Массив структур товаров */
products?: {
/**
* Артикул WB
* @example 21573649
*/
nmId?: number;
/**
* Идентификатор карточки товара
* @example 15384080
*/
imtId?: number;
/**
* Название товара
* @example "Чехол для телефона iPhone 11"
*/
productName?: string;
/**
* Бренд товара
* @example "Case"
*/
brandName?: string;
/**
* Количество вопросов
* @example 11
*/
questionsCount?: string;
}[];
};
/**
* Есть ли ошибка
* @example false
*/
error?: boolean;
/**
* Описание ошибки
* @example ""
*/
errorText?: string;
/**
* Дополнительные ошибки
* @example null
*/
additionalErrors?: string[] | null;
},
ResponsefeedbackErr | void
>({
path: `/api/v1/questions/products/rating`,
method: "GET",
query: query,
secure: true,
format: "json",
...params,
}),
/**
* @description Метод позволяет получить список вопросов по заданным параметрам с пагинацией и сортировкой.<br> За один запрос можно получить 10 000 вопросов, максимум.
*
* @tags Вопросы
* @name V1QuestionsList
* @summary Список вопросов
* @request GET:/api/v1/questions
* @secure
*/
v1QuestionsList: (
query: {
/** Отвеченные вопросы (`true`) или неотвеченные вопросы(`false`) */
isAnswered: boolean;
/** Артикул WB */
nmId?: number;
/** Количество запрашиваемых вопросов (максимально допустимое значение для параметра - 10 000, при этом сумма значений параметров `take` и `skip` не должна превышать 10 000) */
take: number;
/** Количество вопросов для пропуска (максимально допустимое значение для параметра - 10 000, при этом сумма значений параметров `take` и `skip` не должна превышать 10 000) */
skip: number;
/** Сортировка вопросов по дате (`dateAsc`/`dateDesc`) */
order?: string;
/**
* Дата начала периода в формате Unix timestamp
* @example 1688465092
*/
dateFrom?: number;
/**
* Дата конца периода в формате Unix timestamp
* @example 1688465092
*/
dateTo?: number;
},
params: RequestParams = {},
) =>
this.request<
{
data?: {
/** Количество необработанных вопросов */
countUnanswered?: number;
/** Количество обработанных вопросов */
countArchive?: number;
/** Массив структур вопросов */
questions?: {
/** id вопроса */
id?: string;
/** Текст вопроса */
text?: string;
/**
* Дата и время создания вопроса
* @format date-time
*/
createdDate?: string;
/**
* Статус вопроса:
* - `none` - вопрос отклонён продавцом (такой вопрос не отображается на портале покупателей)
* - `wbRu` - ответ предоставлен, вопрос отображается на сайте покупателей
* - `suppliersPortalSynch` - новый вопрос
*/
state?: string;
/** Структура ответа */
answer?: {
/** Текст ответа */
text?: string;
/** Можно ли отредактировать ответ (`false` - нельзя, `true` - можно) */
editable?: boolean;
/**
* Дата и время создания ответа
* @format date-time
*/
createDate?: string;
};
/** Структура товара */
productDetails?: {
/** Артикул WB */
nmId?: number;
/** Идентификатор карточки товара */
imtId?: number;
/** Название товара */
productName?: string;
/** Артикул продавца */
supplierArticle?: string;
/** Имя продавца */
supplierName?: string;
/** Название бренда */
brandName?: string;
};
/** Просмотрен ли вопрос */
wasViewed?: boolean;
}[];
};
/**
* Есть ли ошибка
* @example false
*/
error?: boolean;
/**
* Описание ошибки
* @example ""
*/
errorText?: string;
/** Дополнительные ошибки */
additionalErrors?: string[] | null;
},
ResponsefeedbackErr | void
>({
path: `/api/v1/questions`,
method: "GET",
query: query,
secure: true,
format: "json",
...params,
}),
/**
* @description В зависимости от тела запроса можно: - Просмотреть вопрос. - Отклонить вопрос. - Ответить на вопрос или отредактировать ответ. Отредактировать ответ на вопрос можно в течение 2 месяцев (60 дней), после предоставления ответа и только 1 раз.
*
* @tags Вопросы
* @name V1QuestionsPartialUpdate
* @summary Работа с вопросами
* @request PATCH:/api/v1/questions
* @secure
*/
v1QuestionsPartialUpdate: (
data:
| {
/**
* Id вопроса
* @example "n5um6IUBQOOSTxXoo0gV"
*/
id: string;
/**
* Просмотрен (`true`), не просмотрен (`false`)
* @example true
*/
wasViewed: boolean;
}
| {
/**
* Id вопроса
* @example "n5um6IUBQOOSTxXoo0gV"
*/
id: string;
answer: {
/**
* Текст ответа
* @example "текст ответа"
*/
text: string;
};
/**
* Статус вопроса:
* - `none` - вопрос отклонён продавцом (такой вопрос не отображается на портале покупателей)
* - `wbRu` - ответ предоставлен, вопрос отображается на сайте покупателей.
*/
state: string;
},
params: RequestParams = {},
) =>
this.request<
{
data?: object | null;
/** Есть ли ошибка */
error?: boolean;
/** Описание ошибки */
errorText?: string;
/** Дополнительные ошибки */
additionalErrors?: string[] | null;
},
ResponsefeedbackErr | void
>({
path: `/api/v1/questions`,
method: "PATCH",
body: data,
secure: true,
type: ContentType.Json,
format: "json",
...params,
}),
/**
* @description Метод позволяет получить XLSX файл с вопросами в кодировке BASE64.
*
* @tags Вопросы
* @name V1QuestionsReportList
* @summary Получение вопросов в формате XLSX
* @request GET:/api/v1/questions/report
* @secure
*/
v1QuestionsReportList: (
query: {
/**
* Обработанные вопросы (`true`) или необработанные вопросы(`false`)
* @example false
*/
isAnswered: boolean;
},
params: RequestParams = {},
) =>
this.request<
{
data?: {
/**
* Имя файла
* @example "report.xlsx"
*/
fileName?: string;
/**
* Файл
* @format binary
* @example "UEsDBBQAC ... CAADMdQAAAAA="
*/
file?: File;
/**
* Тип контента
* @example "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
*/
contentType?: string;
};
/**
* Есть ли ошибка
* @example false
*/
error?: boolean;
/**
* Описание ошибки
* @example ""
*/
errorText?: string;
/**
* Дополнительные ошибки
* @example null
*/
additionalErrors?: string[] | null;
},
ResponsefeedbackErr | void
>({
path: `/api/v1/questions/report`,
method: "GET",
query: query,
secure: true,
format: "json",
...params,
}),
/**
* @description Метод позволяет получить количество вопросов.
*
* @tags Вопросы
* @name V1QuestionsCountList
* @summary Количество вопросов
* @request GET:/api/v1/questions/count
* @secure
*/
v1QuestionsCountList: (
query?: {
/**
* Дата начала периода в формате Unix timestamp
* @example 1688465092
*/
dateFrom?: number;
/**
* Дата конца периода в формате Unix timestamp
* @example 1688465092
*/
dateTo?: number;
/**
* Обработанные вопросы (`true`) или необработанные вопросы (`false`).<br> Если не указать, вернутся обработанные вопросы.
* @example false
*/
isAnswered?: boolean;
},
params: RequestParams = {},
) =>
this.request<
{
/**
* Количество вопросов
* @example 77
*/
data?: number;
/**
* Есть ли ошибка
* @example false
*/
error?: boolean;
/**
* Описание ошибки
* @example ""
*/
errorText?: string;
/**
* Дополнительные ошибки
* @example null
*/
additionalErrors?: string[] | null;
},
void | ResponsefeedbackErr
>({
path: `/api/v1/questions/count`,
method: "GET",
query: query,
secure: true,
format: "json",
...params,
}),
/**
* @description Метод позволяет получить вопрос по его Id. <br>
*
* @tags Вопросы
* @name V1QuestionList
* @summary Получить вопрос по Id
* @request GET:/api/v1/question
* @secure
*/
v1QuestionList: (
query: {
/**
* Идентификатор вопроса
* @example "ljAVapEBL38RyMdRln61"
*/
id: string;
},
params: RequestParams = {},
) =>
this.request<
{
data?: {
/** id вопроса */
id?: string;
/** Текст вопроса */
text?: string;
/**
* Дата и время создания вопроса
* @format date-time
*/
createdDate?: string;
/**
* Статус вопроса:
* - `none` - вопрос отклонён продавцом (такой вопрос не отображается на портале покупателей)
* - `wbRu` - ответ предоставлен, вопрос отображается на сайте покупателей
* - `suppliersPortalSynch` - новый вопрос
*/
state?: string;
/** Структура ответа */
answer?: {
/** Текст ответа */
text?: string;
/** Можно ли отредактировать ответ (`false` - нельзя, `true` - можно) */
editable?: boolean;
/**
* Дата и время создания ответа
* @format date-time
*/
createDate?: string;
};
/** Структура товара */
productDetails?: {
/** Артикул WB */
nmId?: number;
/** Идентификатор карточки товара */
imtId?: number;
/** Название товара */
productName?: string;
/** Артикул продавца */
supplierArticle?: string;
/** Имя продавца */
supplierName?: string;
/** Название бренда */
brandName?: string;
};
/** Просмотрен ли вопрос */
wasViewed?: boolean;
};
/**
* Есть ли ошибка
* @example false
*/
error?: boolean;
/**
* Описание ошибки
* @example ""
*/
errorText?: string;
/**
* Дополнительные ошибки
* @example null
*/
additionalErrors?: string[] | null;
},
void
>({
path: `/api/v1/question`,
method: "GET",
query: query,
secure: true,
format: "json",
...params,
}),
/**
* @description Метод позволяет получить количество необработанных отзывов за сегодня, за всё время, и среднюю оценку всех отзывов.
*
* @tags Отзывы
* @name V1FeedbacksCountUnansweredList
* @summary Необработанные отзывы
* @request GET:/api/v1/feedbacks/count-unanswered
* @secure
*/
v1FeedbacksCountUnansweredList: (params: RequestParams = {}) =>
this.request<
{
data?: {
/**
* Количество необработанных отзывов
* @example 1
*/
countUnanswered?: number;
/**
* Количество необработанных отзывов за сегодня
* @example 0
*/
countUnansweredToday?: number;
/**
* Средняя оценка всех отзывов
* @example "4.7"
*/
valuation?: string;
};
/**
* Есть ли ошибка
* @example false
*/
error?: boolean;
/**
* Описание ошибки
* @example ""
*/
errorText?: string;
/**
* Дополнительные ошибки
* @example null
*/
additionalErrors?: string[] | null;
},
ResponsefeedbackErr | void
>({
path: `/api/v1/feedbacks/count-unanswered`,
method: "GET",
secure: true,
format: "json",
...params,
}),
/**
* @description Метод позволяет получить список родительских категорий товаров, которые есть у продавца.
*
* @tags Отзывы
* @name V1ParentSubjectsList
* @summary Родительские категории товаров
* @request GET:/api/v1/parent-subjects
* @secure
*/
v1ParentSubjectsList: (params: RequestParams = {}) =>
this.request<
{
data?: {
/**
* Id категории товара
* @example 1162
*/
subjectId?: number;
/**
* Название категории товара
* @example "Строительные инструменты"
*/
subjectName?: string;
}[];
/**
* Есть ли ошибка
* @example false
*/
error?: boolean;
/**
* Описание ошибки
* @example ""
*/
errorText?: string;
/**
* Дополнительные ошибки
* @example null
*/
additionalErrors?: string[] | null;
},
ResponsefeedbackErr | void
>({
path: `/api/v1/parent-subjects`,
method: "GET",
secure: true,
format: "json",
...params,
}),
/**
* @description Метод позволяет получить среднюю оценку товаров по родительской категории.
*
* @tags Отзывы
* @name V1FeedbacksProductsRatingList
* @summary Средняя оценка товаров по родительской категории
* @request GET:/api/v1/feedbacks/products/rating
* @secure
*/
v1FeedbacksProductsRatingList: (
query: {
/**
* id категории товара
* @example 3109
*/
subjectId: number;
},
params: RequestParams = {},
) =>
this.request<
{
data?: {
/**
* Средняя оценка товаров
* @example "4.8"
*/
valuation?: string;
/**
* Количество отзывов по запрашиваемой категории
* @example 277
*/
feedbacksCount?: number;
};
/**
* Есть ли ошибка
* @example false
*/
error?: boolean;
/**
* Описание ошибки
* @example ""
*/
errorText?: string;
/**
* Дополнительные ошибки
* @example null
*/
additionalErrors?: string[] | null;
},
ResponsefeedbackErr | void
>({
path: `/api/v1/feedbacks/products/rating`,
method: "GET",
query: query,
secure: true,
format: "json",
...params,
}),
/**
* @description Метод позволяет получить список из двух товаров, с наибольшей и наименьшей средней оценкой, по родительской категории.
*
* @tags Отзывы
* @name V1FeedbacksProductsRatingTopList
* @summary Товары с наибольшей и наименьшей средней оценкой по родительской категории
* @request GET:/api/v1/feedbacks/products/rating/top
* @secure
*/
v1FeedbacksProductsRatingTopList: (
query: {
/**
* id категории товара
* @example 3109
*/
subjectId: number;
},
params: RequestParams = {},
) =>
this.request<
{
data?: {
productMaxRating?: ProductRating;
productMinRating?: ProductRating;
}[];
/** Есть ли ошибка */
error?: boolean;
/** Описание ошибки */
errorText?: string;
/** Дополнительные ошибки */
additionalErrors?: string[] | null;
},
ResponsefeedbackErr | void
>({
path: `/api/v1/feedbacks/products/rating/top`,
method: "GET",
query: query,
secure: true,
format: "json",
...params,
}),
/**
* @description Метод позволяет получить список отзывов по заданным параметрам с пагинацией и сортировкой.
*
* @tags Отзывы
* @name V1FeedbacksList
* @summary Список отзывов
* @request GET:/api/v1/feedbacks
* @secure
*/
v1FeedbacksList: (
query: {
/**
* Обработанные отзывы (`true`) или необработанные отзывы(`false`)
* @example false
*/
isAnswered: boolean;
/**
* Артикул WB
* @example 5870243
*/
nmId?: number;
/**
* Количество отзывов (max. 5 000)
* @example 1
*/
take: number;
/**
* Количество отзывов для пропуска (max. 199990)
* @example 0
*/
skip: number;
/** Сортировка отзывов по дате (dateAsc/dateDesc) */
order?: "dateAsc" | "dateDesc";
/**
* Дата начала периода в формате Unix timestamp
* @example 1688465092
*/
dateFrom?: number;
/**
* Дата конца периода в формате Unix timestamp
* @example 1688465092
*/
dateTo?: number;
},
params: RequestParams = {},
) =>
this.request<
{
data?: {
/** Количество необработанных отзывов */
countUnanswered?: number;
/** Количество обработанных отзывов */
countArchive?: number;
/** Массив структур отзывов */
feedbacks?: ResponseFeedback;
};
/** Есть ли ошибка */
error?: boolean;
/** Описание ошибки */
errorText?: string;
/** Дополнительные ошибки */
additionalErrors?: string[] | null;
},
ResponsefeedbackErr | void
>({
path: `/api/v1/feedbacks`,
method: "GET",
query: query,
secure: true,
format: "json",
...params,
}),
/**
* @description В зависимости от тела запроса можно: - Просмотреть отзыв. - Ответить на отзыв, или отредактировать ответ. - Оценить отзыв и/или товар. Отредактировать ответ на отзыв можно в течение 2 месяцев (60 дней), после предоставления ответа и только 1 раз.
*
* @tags Отзывы
* @name V1FeedbacksPartialUpdate
* @summary Работа с отзывом
* @request PATCH:/api/v1/feedbacks
* @secure
*/
v1FeedbacksPartialUpdate: (
data:
| {
/**
* Id отзыва
* @example "n5um6IUBQOOSTxXoo0gV"
*/
id: string;
/**
* Просмотрен (`true`) или не просмотрен (`false`)
* @example true
*/
wasViewed: boolean;
}
| {
/**
* Id отзыва
* @example "n5um6IUBQOOSTxXoo0gV"
*/
id: string;
/**
* Текст ответа (max. 1000 символов)
* @example "текст ответа"
*/
text: string;
}
| {
/** Идентификатор отзыва */
id: string;
/** Оценка отзыва. Можно получить методом <b>Получить список оценок</b> */
supplierFeedbackValuation?: number;
/** Оценка товара. Можно получить методом <b>Получить список оценок</b> */
supplierProductValuation?: number;
},
params: RequestParams = {},
) =>
this.request<void, ResponsefeedbackErr | void>({
path: `/api/v1/feedbacks`,
method: "PATCH",
body: data,
secure: true,
type: ContentType.Json,
...params,
}),
/**
* @description Метод позволяет получать список значений для оценки отзыва/товара.
*
* @tags Отзывы
* @name V1SupplierValuationsList
* @summary Получить список оценок
* @request GET:/api/v1/supplier-valuations
* @secure
*/
v1SupplierValuationsList: (params: RequestParams = {}) =>
this.request<
{
/** Данные */
data?: {
/** Оценки для отзыва. См. Response samples */
feedbackValuations?: {
"1"?: string;
"2"?: string;
"3"?: string;
"4"?: string;
"5"?: string;
"6"?: string;
"7"?: string;
};
/** Оценки для товара См. Response samples */
productValuations?: {
"1"?: string;
"2"?: string;
"3"?: string;
"4"?: string;
};
};
/** Есть ли ошибка */
error?: boolean;
/** Описание ошибки */
errorText?: string;
/** Дополнительные ошибки */
additionalErrors?: string[] | null;
},
void
>({
path: `/api/v1/supplier-valuations`,
method: "GET",
secure: true,
format: "json",
...params,
}),
/**
* @description Метод позволяет запросить на возврат товар, по которому оставлен отзыв. <br> Возврат доступен для отзывов с `"isAbleReturnProductOrders": true`
*
* @tags Отзывы
* @name V1FeedbacksOrderReturnCreate
* @summary Возврат товара по ID отзыва
* @request POST:/api/v1/feedbacks/order/return
* @secure
*/
v1FeedbacksOrderReturnCreate: (
data: {
/** Идентификатор отзыва */
feedbackId?: string;
},
params: RequestParams = {},
) =>
this.request<
{
data?: object | null;
/** Есть ли ошибка */
error?: boolean;
/** Описание ошибки */
errorText?: string;
/** Дополнительные ошибки */
additionalErrors?: string[] | null;
},
ResponsefeedbackErr | void
>({
path: `/api/v1/feedbacks/order/return`,
method: "POST",
body: data,
secure: true,
type: ContentType.Json,
format: "json",
...params,
}),
/**
* @description Метод позволяет получить XLSX файл с отзывами в кодировке BASE64. <br> За один запрос можно получить 5000 отзывов. <br>
*
* @tags Отзывы
* @name V1FeedbacksReportList
* @summary Получение отзывов в формате XLSX
* @request GET:/api/v1/feedbacks/report
* @secure
*/
v1FeedbacksReportList: (
query: {
/** Необработанный(`false`) или в архиве(`true`) */
isAnswered: true | false;
/**
* Параметр пагинации, указывает сколько отзывов пропустить (max. 20 000)
* @example 1
*/
skip?: number;
/**
* Дата начала периода в формате Unix timestamp <br>
* @example 1696226971
*/
dateFrom?: number;
/**
* Дата конца периода в формате Unix timestamp <br>
* @example 1698916171
*/
dateTo?: number;
/**
* Сортировка отзывов по дате (dateAsc/dateDesc) <br>
* @example "dateDesc"
*/
order?: string;
},
params: RequestParams = {},
) =>
this.request<
{
data?: {
/** Имя файла */
fileName?: string;
/**
* Файл
* @format binary
*/
file?: File;
/** Тип контента */
contentType?: string;
};
/** Есть ли ошибка */
error?: boolean;
/** Описание ошибки */
errorText?: string;
/** Дополнительные ошибки */
additionalErrors?: string[] | null;
},
ResponsefeedbackErr | void
>({
path: `/api/v1/feedbacks/report`,
method: "GET",
query: query,
secure: true,
format: "json",
...params,
}),
/**
* @description Метод позволяет получить список архивных отзывов. <br> Отзыв становится архивным, если: - На отзыв получен ответ. - Ответ на отзыв не получен в течение 30 дней. - В отзыве нет текста и фото.
*
* @tags Отзывы
* @name V1FeedbacksArchiveList
* @summary Список архивных отзывов
* @request GET:/api/v1/feedbacks/archive
* @secure
*/
v1FeedbacksArchiveList: (
query: {
/**
* Артикул WB
* @example 14917842
*/
nmId?: number;
/**
* Количество отзывов (max. 5 000)
* @example 1
*/
take: number;
/**
* Количество отзывов для пропуска
* @example 0
*/
skip: number;
/** Сортировка отзывов по дате (dateAsc/dateDesc) */
order?: "dateAsc" | "dateDesc";
},
params: RequestParams = {},
) =>
this.request<
{
data?: {
/** Массив структур отзывов */
feedbacks?: ResponseFeedback;
};
/** Есть ли ошибка */
error?: boolean;
/** Описание ошибки */
errorText?: string;
/** Дополнительные ошибки */
additionalErrors?: string[] | null;
},
ResponsefeedbackErr | void
>({
path: `/api/v1/feedbacks/archive`,
method: "GET",
query: query,
secure: true,
format: "json",
...params,
}),
/**
* @description Метод позволяет получить среднюю оценку товара по его артикулу WB.
*
* @tags Отзывы
* @name V1FeedbacksProductsRatingNmidList
* @summary Средняя оценка товара по артикулу WB
* @request GET:/api/v1/feedbacks/products/rating/nmid
* @secure
*/
v1FeedbacksProductsRatingNmidList: (
query: {
/**
* Артикул WB
* @example 14917842
*/
nmId: number;
},
params: RequestParams = {},
) =>
this.request<
{
data?: {
/**
* Средняя оценка товара
* @example "4.3"
*/
valuation?: string;
/**
* Количество отзывов на данный товар
* @example 16
*/
feedbacksCount?: number;
};
/**
* Есть ли ошибка
* @example false
*/
error?: boolean;
/**
* Описание ошибки
* @example ""
*/
errorText?: string;
/**
* Дополнительные ошибки
* @example null
*/
additionalErrors?: string[] | null;
},
ResponsefeedbackErr | void
>({
path: `/api/v1/feedbacks/products/rating/nmid`,
method: "GET",
query: query,
secure: true,
format: "json",
...params,
}),
/**
* @description Метод позволяет получить количество отзывов.
*
* @tags Отзывы
* @name V1FeedbacksCountList
* @summary Количество отзывов
* @request GET:/api/v1/feedbacks/count
* @secure
*/
v1FeedbacksCountList: (
query?: {
/**
* Дата начала периода в формате Unix timestamp
* @example 1688465092
*/
dateFrom?: number;
/**
* Дата конца периода в формате Unix timestamp
* @example 1688465092
*/
dateTo?: number;
/**
* Обработанные отзывы(`true`) или необработанные отзывы(`false`).<br> Если не указать, вернутся обработанные отзывы.
* @example false
*/
isAnswered?: boolean;
},
params: RequestParams = {},
) =>
this.request<
{
/**
* Количество отзывов
* @example 724583
*/
data?: number;
/**
* Есть ли ошибка
* @example false
*/
error?: boolean;
/**
* Описание ошибки
* @example ""
*/
errorText?: string;
/**
* Дополнительные ошибки
* @example null
*/
additionalErrors?: string[] | null;
},
void | ResponsefeedbackErr
>({
path: `/api/v1/feedbacks/count`,
method: "GET",
query: query,
secure: true,
format: "json",
...params,
}),
/**
* @description Метод позволяет получить отзыв по его Id.
*
* @tags Отзывы
* @name V1FeedbackList
* @summary Получить отзыв по Id
* @request GET:/api/v1/feedback
* @secure
*/
v1FeedbackList: (
query: {
/**
* Идентификатор отзыва
* @example "G7Y9Y1kBAtKOitoBT_lV"
*/
id: string;
},
params: RequestParams = {},
) =>
this.request<
{
data?: {
/** Идентификатор отзыва */
id?: number;
/** Имя автора отзыва */
userName?: string;
/**
* Соответствие заявленного размера реальному.
* <br>Возможные значения:
* - ` ` - для безразмерных товаров
* - `ок` - соответствует размеру
* - `smaller` - маломерит
* - `bigger` - большемерит
*/
matchingSize?: string;
/** Текст отзыва */
text?: string;
/** Оценка товара */
productValuation?: number;
/**
* Дата и время создания отзыва
* @format date-time
*/
createdDate?: string;
/**
* Статус отзыва:
* - `none` - не обработан (новый)
* - `wbRu` - обработан
*/
state?: string;
/** Структура ответа */
answer?: {
/** Текст ответа */
text?: string;
/**
* Статус:
* - `none` - новый
* - `wbRu`- отображается на сайте
* - `reviewRequired` - ответ проходит проверку
* - `rejected` - ответ отклонён
*/
state?: string;
};
/** Структура товара */
productDetails?: {
/** Артикул WB */
nmId?: number;
/** Идентификатор карточки товара */
imtId?: number;
/** Название товара */
productName?: string;
/** Артикул продавца */
supplierArticle?: string | null;
/** Имя продавца */
supplierName?: string | null;
/** Бренд товара */
brandName?: string | null;
/** Размер товара (`techSize` в КТ) */
size?: string;
};
/** Массив структур фотографий */
photoLinks?: {
/** Адрес фотографии полного размера */
fullSize?: string;
/** Адрес фотографии маленького размера */
miniSize?: string;
}[];
/** Структура видео */
video?: {
/** Ссылка на обложку видео */
previewImage?: string;
/** Ссылка на файл плейлиста видео (доступно по протоколу hls) */
link?: string;
/** Общая продолжительность видео */
duration_sec?: number;
};
/** Просмотрен ли отзыв */
wasViewed?: boolean;
/** Доступна ли продавцу оценка отзыва (`true` - доступна, `false` - не доступна) */
isAbleSupplierFeedbackValuation?: boolean;
/** Оценка отзыва, оставленная продавцом */
supplierFeedbackValuation?: number;
/** Доступна ли продавцу оценка товара (`true` - доступна, `false` - не доступна) */
isAbleSupplierProductValuation?: boolean;
/** Оценка товара, оставленная продавцом */
supplierProductValuation?: number;
/** Доступна ли товару опция возврата (`false` - нет, `true` - да) */
isAbleReturnProductOrders?: boolean;
/** Дата и время, ког