Wildberries API TypeScript SDK / PromotionModule
Class: PromotionModule
Defined in: modules/promotion/index.ts:63
Constructors
Constructor
new PromotionModule(client: BaseClient): PromotionModule;Defined in: modules/promotion/index.ts:64
Parameters
| Parameter | Type |
|---|---|
client | BaseClient |
Returns
PromotionModule
Methods
getAdvDelete()
getAdvDelete(options?: {
id: number;
}): Promise<void>;Defined in: modules/promotion/index.ts:81
Удаление кампании
Метод удаляет кампании в статусе 4 — готова к запуску.<br><br> После удаления кампания некоторое время будет находиться в статусе -1 — кампания в процессе удаления. Полное удаление кампании занимает от 3 до 10 минут. <div class="description_limit"> <a href="/openapi/api-information#tag/Vvedenie/Limity-zaprosov">Лимит запросов</a> на один аккаунт продавца: | Период | Лимит | Интервал | Всплеск | | --- | --- | --- | --- | | 1 секунда | 5 запросов | 200 миллисекунд | 5 запросов | </div>
Parameters
| Parameter | Type | Description |
|---|---|---|
options? | { id: number; } | Query parameters |
options.id? | number | - |
Returns
Promise<void>
Успешно
Throws
When API key is invalid (401/403)
Throws
When rate limit exceeded (429)
Throws
When request data is invalid (400/422)
Throws
When network request fails or times out
Example
const result = await sdk.promotion.getAdvDelete({});
console.log(result);createAdvRename()
createAdvRename(data?: {
advertId: number;
name: string;
}): Promise<void>;Defined in: modules/promotion/index.ts:103
Переименование кампании
Метод меняет название кампании. Это можно сделать в любой момент существования кампании. <div class="description_limit"> <a href="/openapi/api-information#tag/Vvedenie/Limity-zaprosov">Лимит запросов</a> на один аккаунт продавца: | Период | Лимит | Интервал | Всплеск | | --- | --- | --- | --- | | 1 секунда | 5 запросов | 200 миллисекунд | 5 запросов | </div>
Parameters
| Parameter | Type | Description |
|---|---|---|
data? | { advertId: number; name: string; } | Request body data |
data.advertId? | number | - |
data.name? | string | - |
Returns
Promise<void>
Успешно
Throws
When API key is invalid (401/403)
Throws
When rate limit exceeded (429)
Throws
When request data is invalid (400/422)
Throws
When network request fails or times out
Example
const result = await sdk.promotion.createAdvRename({});
console.log(result);getAdvStop()
getAdvStop(options?: {
id: number;
}): Promise<void>;Defined in: modules/promotion/index.ts:124
Завершение кампании
Метод завершает кампании в статусах: - 4 — готово к запуску - 9 — активна - 11 — пауза <div class="description_limit"> <a href="/openapi/api-information#tag/Vvedenie/Limity-zaprosov">Лимит запросов</a> на один аккаунт продавца: | Период | Лимит | Интервал | Всплеск | | --- | --- | --- | --- | | 1 секунда | 5 запросов | 200 миллисекунд | 5 запросов | </div>
Parameters
| Parameter | Type | Description |
|---|---|---|
options? | { id: number; } | Query parameters |
options.id? | number | - |
Returns
Promise<void>
Успешно
Throws
When API key is invalid (401/403)
Throws
When rate limit exceeded (429)
Throws
When request data is invalid (400/422)
Throws
When network request fails or times out
Example
const result = await sdk.promotion.getAdvStop({});
console.log(result);updateAuctionPlacement()
updateAuctionPlacement(data: {
placements: {
advert_id: number;
placements: {
search: boolean;
recommendations: boolean;
};
}[];
}): Promise<void>;Defined in: modules/promotion/index.ts:145
Изменение мест размещения в кампаниях с ручной ставкой
Метод меняет места размещения в кампаниях с ручной ставкой. <br><br> Для кампаний в статусах 4, 9 и 11. <div class="description_limit"> <a href="/openapi/api-information#tag/Vvedenie/Limity-zaprosov">Лимит запросов</a> на один аккаунт продавца: | Период | Лимит | Интервал | Всплеск | | --- | --- | --- | --- | | 1 секунда | 1 запрос | 1 секунда | 1 запрос | </div>
Parameters
| Parameter | Type | Description |
|---|---|---|
data | { placements: { advert_id: number; placements: { search: boolean; recommendations: boolean; }; }[]; } | Request body data |
data.placements | { advert_id: number; placements: { search: boolean; recommendations: boolean; }; }[] | - |
Returns
Promise<void>
Response data
Throws
When API key is invalid (401/403)
Throws
When rate limit exceeded (429)
Throws
When request data is invalid (400/422)
Throws
When network request fails or times out
Example
const result = await sdk.promotion.updateAuctionPlacement({});getAdvBalance()
getAdvBalance(): Promise<{
balance?: number;
net?: number;
bonus?: number;
currency?: string;
cashbacks?: {
sum?: number;
percent?: number;
expiration_date?: string;
}[];
}>;Defined in: modules/promotion/index.ts:167
Баланс
Метод возвращает информацию о: - счёте кабинета Продвижения WB. Его пополняет продавец. - балансе — максимальной сумме для оплаты камапнии по взаиморасчету: удержании средств из будущих продаж. Баланс пополнить нельзя, он рассчитывается автоматически на основе отчётов по продвижению. - бонусных начислениях WB. Информацию о бюджете кампаний можно получить в отдельном методе. <div class="description_limit"> <a href="/openapi/api-information#tag/Vvedenie/Limity-zaprosov">Лимит запросов</a> на один аккаунт продавца: | Период | Лимит | Интервал | Всплеск | | --- | --- | --- | --- | | 1 секунда | 1 запрос | 1 секунда | 5 запросов | </div>
Returns
Promise<{ balance?: number; net?: number; bonus?: number; currency?: string; cashbacks?: { sum?: number; percent?: number; expiration_date?: string; }[]; }>
Успешно
Throws
When API key is invalid (401/403)
Throws
When rate limit exceeded (429)
Throws
When request data is invalid (400/422)
Throws
When network request fails or times out
Example
const result = await sdk.promotion.getAdvBalance();
console.log(result);getAdvBudget()
getAdvBudget(options?: {
id: number;
}): Promise<{
cash?: number;
netting?: number;
total?: number;
currency?: string;
}>;Defined in: modules/promotion/index.ts:208
Бюджет кампании (устарело)
Метод возвращает информацию о бюджете кампании — максимальной сумме затрат на кампанию. Бюджет кампании можно пополнить.
WB отключает этот метод 16 ноября 2026 года (релиз-нот). Используйте PromotionModule.postV2Budget — он возвращает бюджеты сразу нескольких кампаний за один запрос.
<div class="description_limit"> <a href="/openapi/api-information#tag/Vvedenie/Limity-zaprosov">Лимит запросов</a> на один аккаунт продавца: | Период | Лимит | Интервал | Всплеск | | --- | --- | --- | --- | | 1 секунда | 4 запроса | 250 миллисекунд | 4 запроса | </div>
Parameters
| Parameter | Type | Description |
|---|---|---|
options? | { id: number; } | Query parameters |
options.id? | number | - |
Returns
Promise<{ cash?: number; netting?: number; total?: number; currency?: string; }>
Успешно
Throws
When API key is invalid (401/403)
Throws
When rate limit exceeded (429)
Throws
When request data is invalid (400/422)
Throws
When network request fails or times out
Deprecated
WB отключает GET /adv/v1/budget 16 ноября 2026 года. Используйте PromotionModule.postV2Budget. Метод будет удалён в v5.
Example
const result = await sdk.promotion.getAdvBudget({});
console.log(result);postV2Budget()
postV2Budget(data: V2BudgetRequest): Promise<V2BudgetResponse>;Defined in: modules/promotion/index.ts:263
Бюджеты кампаний (V2)
Метод возвращает информацию о бюджетах сразу нескольких кампаний — максимальной сумме затрат на кампанию.
Бюджет возвращается только для кампаний в статусах:
4— готова к запуску9— активна11— на паузе
Поле total указывается в БАЗОВЫХ единицах валюты кабинета продавца — НЕ в минорных (не в копейках). Если по кампании нет данных, соответствующий элемент adverts — null.
Заменяет метод PromotionModule.getAdvBudget (GET /adv/v1/budget), который WB отключит 16 ноября 2026 года.
Rate limit: 20 requests per minute, 3s interval, burst 4 (Personal/Service tokens)
Parameters
| Parameter | Type | Description |
|---|---|---|
data | V2BudgetRequest | ID кампаний (от 1 до 50 элементов) |
Returns
Promise<V2BudgetResponse>
Бюджеты запрошенных кампаний
Throws
When API key is invalid (401/403)
Throws
When rate limit exceeded (429)
Throws
When request data is invalid (400/422)
Throws
When network request fails or times out
Since
task-191
See
https://dev.wildberries.ru/docs/openapi/promotion#tag/finances/operation/postV2Budget
Example
const result = await sdk.promotion.postV2Budget({
advertIds: [1234567, 63453471]
});
for (const advert of result.adverts) {
if (advert) console.log(advert.advertId, advert.total, advert.currency);
}createBudgetDeposit()
createBudgetDeposit(data: {
sum?: number;
cashback_sum?: number;
cashback_percent?: number;
type?: number;
return?: boolean;
}, options?: {
id: number;
}): Promise<ResponseWithReturn>;Defined in: modules/promotion/index.ts:287
Пополнение бюджета кампании
Метод пополняет бюджет кампании в статусе 11 — на паузе. <br> Чтобы запустить кампанию после пополнения бюджета, используйте метод Запуск кампании. <div class="description_limit"> <a href="/openapi/api-information#tag/Vvedenie/Limity-zaprosov">Лимит запросов</a> на один аккаунт продавца: | Период | Лимит | Интервал | Всплеск | | --- | --- | --- | --- | | 1 секунда | 1 запрос | 1 секунда | 5 запросов | </div>
Parameters
| Parameter | Type | Description |
|---|---|---|
data | { sum?: number; cashback_sum?: number; cashback_percent?: number; type?: number; return?: boolean; } | Request body data |
data.sum? | number | - |
data.cashback_sum? | number | - |
data.cashback_percent? | number | - |
data.type? | number | - |
data.return? | boolean | - |
options? | { id: number; } | Query parameters |
options.id? | number | - |
Returns
Promise<ResponseWithReturn>
Успешно
Throws
When API key is invalid (401/403)
Throws
When rate limit exceeded (429)
Throws
When request data is invalid (400/422)
Throws
When network request fails or times out
Example
const result = await sdk.promotion.createBudgetDeposit({}, {});
console.log(result);getAdvUpd()
getAdvUpd(options?: {
from: string;
to: string;
}): Promise<{
updNum?: number;
updTime?: string;
updSum?: number;
advertId?: number;
campName?: string;
advertType?: number;
paymentType?: string;
advertStatus?: number;
}[]>;Defined in: modules/promotion/index.ts:319
Получение истории затрат
Метод формирует список фактических затрат на рекламные кампании за заданный период. <div class="description_limit"> <a href="/openapi/api-information#tag/Vvedenie/Limity-zaprosov">Лимит запросов</a> на один аккаунт продавца: | Период | Лимит | Интервал | Всплеск | | --- | --- | --- | --- | | 1 секунда | 1 запрос | 1 секунда | 5 запросов | </div>
Parameters
| Parameter | Type | Description |
|---|---|---|
options? | { from: string; to: string; } | Query parameters |
options.from? | string | - |
options.to? | string | - |
Returns
Promise<{ updNum?: number; updTime?: string; updSum?: number; advertId?: number; campName?: string; advertType?: number; paymentType?: string; advertStatus?: number; }[]>
Успешно
Throws
When API key is invalid (401/403)
Throws
When rate limit exceeded (429)
Throws
When request data is invalid (400/422)
Throws
When network request fails or times out
Example
const result = await sdk.promotion.getAdvUpd({});
console.log(result);getAdvPayments()
getAdvPayments(options?: {
from?: string;
to?: string;
}): Promise<{
id?: number;
date?: string;
sum?: number;
type?: number;
statusId?: number;
cardStatus?: string;
currency?: string;
}[]>;Defined in: modules/promotion/index.ts:363
Получение истории пополнений счёта
Метод возвращает историю пополнений счёта WB Продвижение за заданный период. <div class="description_limit"> <a href="/openapi/api-information#tag/Vvedenie/Limity-zaprosov">Лимит запросов</a> на один аккаунт продавца: | Период | Лимит | Интервал | Всплеск | | --- | --- | --- | --- | | 1 секунда | 1 запрос | 1 секунда | 5 запросов | </div>
Parameters
| Parameter | Type | Description |
|---|---|---|
options? | { from?: string; to?: string; } | Query parameters |
options.from? | string | - |
options.to? | string | - |
Returns
Promise<{ id?: number; date?: string; sum?: number; type?: number; statusId?: number; cardStatus?: string; currency?: string; }[]>
Успешно
Throws
When API key is invalid (401/403)
Throws
When rate limit exceeded (429)
Throws
When request data is invalid (400/422)
Throws
When network request fails or times out
Example
const result = await sdk.promotion.getAdvPayments({});
console.log(result);updateAuctionNm()
updateAuctionNm(data: {
nms: {
advert_id: number;
nms: {
add?: unknown;
delete?: number[];
};
}[];
}): Promise<{
nms: {
advert_id: number;
nms: {
added: number[];
deleted: number[];
};
}[];
}>;Defined in: modules/promotion/index.ts:405
Изменение списка карточек товаров в кампаниях
Метод добавляет и удаляет карточки товаров в кампаниях. <br><br> Для кампаний в статусах 4, 9 и 11. <br><br> Для добавляемых товаров устанавливается текущая минимальная ставка. <div class="description_limit"> <a href="/openapi/api-information#tag/Vvedenie/Limity-zaprosov">Лимит запросов</a> на один аккаунт продавца: | Период | Лимит | Интервал | Всплеск | | --- | --- | --- | --- | | 1 секунда | 1 запрос | 1 секунда | 1 запрос | </div>
Parameters
| Parameter | Type | Description |
|---|---|---|
data | { nms: { advert_id: number; nms: { add?: unknown; delete?: number[]; }; }[]; } | Request body data |
data.nms | { advert_id: number; nms: { add?: unknown; delete?: number[]; }; }[] | - |
Returns
Promise<{ nms: { advert_id: number; nms: { added: number[]; deleted: number[]; }; }[]; }>
Успешно
Throws
When API key is invalid (401/403)
Throws
When rate limit exceeded (429)
Throws
When request data is invalid (400/422)
Throws
When network request fails or times out
Example
const result = await sdk.promotion.updateAuctionNm({});
console.log(result);getAdvCount()
getAdvCount(): Promise<{
all?: number;
adverts?: {
type?: number;
status?: number;
count?: number;
};
}>;Defined in: modules/promotion/index.ts:429
Количество медиакампаний
Метод возвращает количество медиакампаний продавца с группировкой по статусам. <div class="description_limit"> <a href="/openapi/api-information#tag/Vvedenie/Limity-zaprosov">Лимит запросов</a> на один аккаунт продавца: | Период | Лимит | Интервал | Всплеск | | --- | --- | --- | --- | | 1 секунда | 10 запросов | 100 миллисекунд | 10 запросов | </div>
Returns
Promise<{ all?: number; adverts?: { type?: number; status?: number; count?: number; }; }>
Успешно
Throws
When API key is invalid (401/403)
Throws
When rate limit exceeded (429)
Throws
When request data is invalid (400/422)
Throws
When network request fails or times out
Example
const result = await sdk.promotion.getAdvCount();
console.log(result);getAdvAdverts()
getAdvAdverts(options?: {
status?: number;
type?: number;
limit?: number;
offset?: number;
order?: string;
direction?: string;
}): Promise<{
advertId?: number;
name?: string;
brand?: string;
type?: number;
status?: number;
createTime?: string;
endTime?: string;
}[]>;Defined in: modules/promotion/index.ts:456
Список медиакампаний
Метод возвращает список всех медиакампаний продавца по их типам и статусам. <div class="description_limit"> <a href="/openapi/api-information#tag/Vvedenie/Limity-zaprosov">Лимит запросов</a> на один аккаунт продавца: | Период | Лимит | Интервал | Всплеск | | --- | --- | --- | --- | | 1 секунда | 10 запросов | 100 миллисекунд | 10 запросов | </div>
Parameters
| Parameter | Type | Description |
|---|---|---|
options? | { status?: number; type?: number; limit?: number; offset?: number; order?: string; direction?: string; } | Query parameters |
options.status? | number | - |
options.type? | number | - |
options.limit? | number | - |
options.offset? | number | - |
options.order? | string | - |
options.direction? | string | - |
Returns
Promise<{ advertId?: number; name?: string; brand?: string; type?: number; status?: number; createTime?: string; endTime?: string; }[]>
Успешно
Throws
When API key is invalid (401/403)
Throws
When rate limit exceeded (429)
Throws
When request data is invalid (400/422)
Throws
When network request fails or times out
Example
const result = await sdk.promotion.getAdvAdverts({});
console.log(result);getAdvAdvert()
getAdvAdvert(options?: {
id: number;
}): Promise<{
advertId?: number;
name?: string;
brand?: string;
type?: number;
status?: number;
createTime?: string;
extended?: {
reason?: string;
expenses?: number;
from?: string;
to?: string;
updated_at?: string;
price?: number;
budget?: number;
operation?: number;
contract_id?: number;
};
items?: {
id?: number;
name?: string;
status?: number;
place?: number;
budget?: number;
daily_limit?: number;
category_name?: string;
cpm?: number;
url?: string;
advert_type?: number;
created_at?: string;
updated_at?: string;
date_from?: string;
date_to?: string;
nms?: number[];
bottomText1?: string;
bottomText2?: string;
message?: string;
additionalSettings?: number;
receiversCount?: number;
subject_id?: number;
subject_name?: string;
action_name?: string;
show_hours?: {
From?: number;
To?: number;
}[];
Erid?: string;
}[];
}>;Defined in: modules/promotion/index.ts:505
Информация о медиакампании
Метод возвращает информацию о кампании WB Медиа. Вместо карточек товаров в медиакампаниях продвигаются рекламные баннеры продавца на сайте и в приложении WB. <div class="description_limit"> <a href="/openapi/api-information#tag/Vvedenie/Limity-zaprosov">Лимит запросов</a> на один аккаунт продавца: | Период | Лимит | Интервал | Всплеск | | --- | --- | --- | --- | | 1 секунда | 10 запросов | 100 миллисекунд | 10 запросов | </div>
Parameters
| Parameter | Type | Description |
|---|---|---|
options? | { id: number; } | Query parameters |
options.id? | number | - |
Returns
Promise<{ advertId?: number; name?: string; brand?: string; type?: number; status?: number; createTime?: string; extended?: { reason?: string; expenses?: number; from?: string; to?: string; updated_at?: string; price?: number; budget?: number; operation?: number; contract_id?: number; }; items?: { id?: number; name?: string; status?: number; place?: number; budget?: number; daily_limit?: number; category_name?: string; cpm?: number; url?: string; advert_type?: number; created_at?: string; updated_at?: string; date_from?: string; date_to?: string; nms?: number[]; bottomText1?: string; bottomText2?: string; message?: string; additionalSettings?: number; receiversCount?: number; subject_id?: number; subject_name?: string; action_name?: string; show_hours?: { From?: number; To?: number; }[]; Erid?: string; }[]; }>
Успешно
Throws
When API key is invalid (401/403)
Throws
When rate limit exceeded (429)
Throws
When request data is invalid (400/422)
Throws
When network request fails or times out
Example
const result = await sdk.promotion.getAdvAdvert({});
console.log(result);getAdvFullstats()
getAdvFullstats(options?: {
ids: string;
beginDate: string;
endDate: string;
}): Promise<ResponseFullStats>;Defined in: modules/promotion/index.ts:617
Статистика кампаний
Метод формирует статистику для кампаний независимо от типа. <br><br> Максимальный период в запросе — 31 день. <br><br> Для кампаний в статусах 7, 9 и 11. <div class="description_limit"> <a href="/openapi/api-information#tag/Vvedenie/Limity-zaprosov">Лимит запросов</a> на один аккаунт продавца: | Период | Лимит | Интервал | Всплеск | | --- | --- | --- | --- | | 1 минута | 3 запроса | 20 секунд | 1 запрос | </div>
Parameters
| Parameter | Type | Description |
|---|---|---|
options? | { ids: string; beginDate: string; endDate: string; } | Query parameters |
options.ids? | string | - |
options.beginDate? | string | - |
options.endDate? | string | - |
Returns
Promise<ResponseFullStats>
Успешно
Throws
When API key is invalid (401/403)
Throws
When rate limit exceeded (429)
Throws
When request data is invalid (400/422)
Throws
When network request fails or times out
Example
const result = await sdk.promotion.getAdvFullstats({});
console.log(result);createAdvStat()
createAdvStat(data:
| RequestWithDate
| RequestWithInterval
| RequestWithCampaignID[]): Promise<
| StatInterval
| StatDate
| Stat[]>;Defined in: modules/promotion/index.ts:643
Статистика медиакампаний
Метод формирует статистику кампаний сервиса WB Медиа. Статистику можно группировать по датам и/или интервалам. <div class="description_limit"> <a href="/openapi/api-information#tag/Vvedenie/Limity-zaprosov">Лимит запросов</a> на один аккаунт продавца: | Период | Лимит | Интервал | Всплеск | | --- | --- | --- | --- | | 1 секунда | 10 запросов | 100 миллисекунд | 10 запросов | </div>
Parameters
| Parameter | Type | Description |
|---|---|---|
data | | RequestWithDate | RequestWithInterval | RequestWithCampaignID[] | Request body data |
Returns
Promise< | StatInterval | StatDate | Stat[]>
Успешно
Throws
When API key is invalid (401/403)
Throws
When rate limit exceeded (429)
Throws
When request data is invalid (400/422)
Throws
When network request fails or times out
Example
const result = await sdk.promotion.createAdvStat({});
console.log(result);getCalendarPromotions()
getCalendarPromotions(options?: {
startDateTime: string;
endDateTime: string;
allPromo: boolean;
limit?: number;
offset?: number;
}): Promise<unknown>;Defined in: modules/promotion/index.ts:668
Список акций
Метод возвращает список акций в WB с датами и временем проведения. <div class="description_limit"> <a href="/openapi/api-information#tag/Vvedenie/Limity-zaprosov">Лимит запросов</a> на один аккаунт продавца для всех методов категории <strong>Календарь акций</strong>: | Период | Лимит | Интервал | Всплеск | | --- | --- | --- | --- | | 6 секунд | 10 запросов | 600 миллисекунд | 5 запросов | </div>
Parameters
| Parameter | Type | Description |
|---|---|---|
options? | { startDateTime: string; endDateTime: string; allPromo: boolean; limit?: number; offset?: number; } | Query parameters |
options.startDateTime? | string | - |
options.endDateTime? | string | - |
options.allPromo? | boolean | - |
options.limit? | number | - |
options.offset? | number | - |
Returns
Promise<unknown>
Response data
Throws
When API key is invalid (401/403)
Throws
When rate limit exceeded (429)
Throws
When request data is invalid (400/422)
Throws
When network request fails or times out
Example
const result = await sdk.promotion.getCalendarPromotions({});
console.log(result);getPromotionsDetails()
getPromotionsDetails(options?: {
promotionIDs: string;
}): Promise<unknown>;Defined in: modules/promotion/index.ts:696
Детальная информация об акциях
Метод возвращает подробную информацию об акции по ID. <div class="description_limit"> <a href="/openapi/api-information#tag/Vvedenie/Limity-zaprosov">Лимит запросов</a> на один аккаунт продавца для всех методов категории <strong>Календарь акций</strong>: | Период | Лимит | Интервал | Всплеск | | --- | --- | --- | --- | | 6 секунд | 10 запросов | 600 миллисекунд | 5 запросов | </div>
Parameters
| Parameter | Type | Description |
|---|---|---|
options? | { promotionIDs: string; } | Query parameters |
options.promotionIDs? | string | - |
Returns
Promise<unknown>
Response data
Throws
When API key is invalid (401/403)
Throws
When rate limit exceeded (429)
Throws
When request data is invalid (400/422)
Throws
When network request fails or times out
Example
const result = await sdk.promotion.getPromotionsDetails({});
console.log(result);getPromotionsNomenclatures()
getPromotionsNomenclatures(options?: {
promotionID: number;
inAction: boolean;
limit?: number;
offset?: number;
}): Promise<unknown>;Defined in: modules/promotion/index.ts:718
Список товаров для участия в акции
Метод формирует список товаров, подходящих для участия в акции. Эти товары можно добавить в акцию с помощью отдельного метода. <div class="description_important"> Данный метод неприменим для автоакций. </div> <div class="description_limit"> <a href="/openapi/api-information#tag/Vvedenie/Limity-zaprosov">Лимит запросов</a> на один аккаунт продавца для всех методов категории <strong>Календарь акций</strong>: | Период | Лимит | Интервал | Всплеск | | --- | --- | --- | --- | | 6 секунд | 10 запросов | 600 миллисекунд | 5 запросов | </div>
Parameters
| Parameter | Type | Description |
|---|---|---|
options? | { promotionID: number; inAction: boolean; limit?: number; offset?: number; } | Query parameters |
options.promotionID? | number | - |
options.inAction? | boolean | - |
options.limit? | number | - |
options.offset? | number | - |
Returns
Promise<unknown>
Response data
Throws
When API key is invalid (401/403)
Throws
When rate limit exceeded (429)
Throws
When request data is invalid (400/422)
Throws
When network request fails or times out
Example
const result = await sdk.promotion.getPromotionsNomenclatures({});
console.log(result);createPromotionsUpload()
createPromotionsUpload(): Promise<unknown>;Defined in: modules/promotion/index.ts:744
Добавить товар в акцию
Метод создаёт задание на загрузку товара в акцию.<br> Состояние загрузки можно проверить с помощью отдельных методов. <div class="description_important"> Данный метод неприменим для автоакций. </div> <div class="description_limit"> <a href="/openapi/api-information#tag/Vvedenie/Limity-zaprosov">Лимит запросов</a> на один аккаунт продавца для всех методов категории <strong>Календарь акций</strong>: | Период | Лимит | Интервал | Всплеск | | --- | --- | --- | --- | | 6 секунд | 10 запросов | 600 миллисекунд | 5 запросов | </div>
Returns
Promise<unknown>
Response data
Throws
When API key is invalid (401/403)
Throws
When rate limit exceeded (429)
Throws
When request data is invalid (400/422)
Throws
When network request fails or times out
Example
const result = await sdk.promotion.createPromotionsUpload();
console.log(result);getNormqueryStats()
getNormqueryStats(data: V0GetNormQueryStatsRequest): Promise<V0GetNormQueryStatsResponse>;Defined in: modules/promotion/index.ts:785
Статистика поисковых кластеров
Метод возвращает статистику по поисковым кластерам за указанный период. Можно использовать только для кампаний с моделью оплаты cpm — за показы.
Rate limit: 10 requests per minute, 6 second interval, burst 20
Parameters
| Parameter | Type | Description |
|---|---|---|
data | V0GetNormQueryStatsRequest | Request body with date range and campaign/product items |
Returns
Promise<V0GetNormQueryStatsResponse>
Statistics for search clusters
Throws
When API key is invalid (401/403)
Throws
When rate limit exceeded (429)
Throws
When request data is invalid (400/422)
Throws
When network request fails or times out
See
https://dev.wildberries.ru/openapi/promotion#tag/Statistika/paths/~1adv~1v0~1normquery~1stats/post
Example
const stats = await sdk.promotion.getNormqueryStats({
from: '2025-10-07',
to: '2025-10-08',
items: [{ advert_id: 1825035, nm_id: 983512347 }]
});
console.log(stats.stats);Remarks
Prefer the V1 successor PromotionModule.getNormqueryStatsV1 (/adv/v1/normquery/stats), which returns daily-detailed statistics and supports both cpm and cpc campaigns.
getNormqueryList()
getNormqueryList(data: V0GetNormQueryListRequest): Promise<V0GetNormQueryListResponse>;Defined in: modules/promotion/index.ts:816
Active and Inactive Search Cluster Lists
Метод возвращает списки активных и неактивных поисковых кластеров с количеством просмотров от 100 по ID кампаний и артикулам WB.
Rate limit: 5 requests per second, 200ms interval, burst 10
Parameters
| Parameter | Type | Description |
|---|---|---|
data | V0GetNormQueryListRequest | Request body with campaign/product items (max 100) |
Returns
Promise<V0GetNormQueryListResponse>
Lists of active and inactive search clusters per campaign/product
Throws
When API key is invalid (401/403)
Throws
When rate limit exceeded (429)
Throws
When request data is invalid (400/422)
Throws
When network request fails or times out
See
Example
const result = await sdk.promotion.getNormqueryList({
items: [{ advertId: 123456789, nmId: 987654321 }]
});
console.log(result.items?.[0]?.normQueries?.active);getNormqueryStatsV1()
getNormqueryStatsV1(data: V1GetNormQueryStatsRequest): Promise<V1GetNormQueryStatsResponse>;Defined in: modules/promotion/index.ts:853
Daily Search Clusters Statistics (v1)
Метод возвращает статистику (просмотры, клики, добавления в корзину, заказы, CTR, CPC, CPM и т.д.) по поисковым кластерам за указанный период с детализацией по дням. Применимо для кампаний с моделью оплаты cpm — за показы, и cpc — за клики.
V1-преемник метода PromotionModule.getNormqueryStats (/adv/v0/normquery/stats).
Rate limit: 10 requests per minute, 6 second interval, burst 20
Parameters
| Parameter | Type | Description |
|---|---|---|
data | V1GetNormQueryStatsRequest | Request body with date range and campaign/product items (max 100) |
Returns
Promise<V1GetNormQueryStatsResponse>
Daily-detailed statistics for search clusters
Throws
When API key is invalid (401/403)
Throws
When rate limit exceeded (429)
Throws
When request data is invalid (400/422)
Throws
When network request fails or times out
See
https://dev.wildberries.ru/openapi/promotion#tag/Statistics/paths/~1adv~1v1~1normquery~1stats/post
Example
const stats = await sdk.promotion.getNormqueryStatsV1({
from: '2026-01-01',
to: '2026-01-30',
items: [{ advertId: 123456789, nmId: 987654321 }]
});
console.log(stats.items[0]?.dailyStats);getNormqueryBids()
getNormqueryBids(data: V0GetNormQueryBidsRequest): Promise<V0GetNormQueryBidsResponse>;Defined in: modules/promotion/index.ts:885
Список ставок поисковых кластеров
Метод возвращает список поисковых кластеров со ставками по ID кампаний и артикулам WB.
Rate limit: 5 requests per second, 200ms interval, burst 10
Parameters
| Parameter | Type | Description |
|---|---|---|
data | V0GetNormQueryBidsRequest | Request body with campaign/product items |
Returns
Promise<V0GetNormQueryBidsResponse>
List of search cluster bids
Throws
When API key is invalid (401/403)
Throws
When rate limit exceeded (429)
Throws
When request data is invalid (400/422)
Throws
When network request fails or times out
See
Example
const bids = await sdk.promotion.getNormqueryBids({
items: [{ advert_id: 1825035, nm_id: 983512347 }]
});
console.log(bids.bids);setNormqueryBids()
setNormqueryBids(data: V0SetNormQueryBidsRequest): Promise<void>;Defined in: modules/promotion/index.ts:931
Установить ставки для поисковых кластеров
Метод устанавливает ставки на поисковые кластеры. Можно использовать только для кампаний с ручной ставкой и моделью оплаты cpm — за показы.
Единицы: bid указывается в целых рублях (₽), а НЕ в копейках — это ставка CPM (цена за 1000 показов) для конкретного поискового кластера (norm_query). В отличие от PromotionModule.updateBids, где bid_kopecks — в копейках и применяется к кампании/артикулу, а не к кластеру. Не путайте единицы — частый footgun.
Модель: это устаревшая поверхность биддинга normquery/catalog (/adv/v0/...). Для нового кода предпочитайте PromotionModule.updateBids (V1, копейки); этот метод — только если нужен CPM-контроль per search-cluster в ручной cpm-кампании.
Rate limit: 2 requests per second, 500ms interval, burst 4
Parameters
| Parameter | Type | Description |
|---|---|---|
data | V0SetNormQueryBidsRequest | Request body with bids to set |
Returns
Promise<void>
void on success
Throws
When API key is invalid (401/403)
Throws
When rate limit exceeded (429)
Throws
When request data is invalid (400/422)
Throws
When network request fails or times out
See
Example
await sdk.promotion.setNormqueryBids({
bids: [{
advert_id: 1825035,
nm_id: 983512347,
norm_query: 'Фраза 1',
bid: 1000
}]
});deleteNormqueryBids()
deleteNormqueryBids(data: V0SetNormQueryBidsRequest): Promise<void>;Defined in: modules/promotion/index.ts:964
Удалить ставки поисковых кластеров
Метод удаляет ставки с поисковых кластеров. Можно использовать только для кампаний с ручной ставкой и моделью оплаты cpm — за показы.
Rate limit: 5 requests per second, 200ms interval, burst 10
Parameters
| Parameter | Type | Description |
|---|---|---|
data | V0SetNormQueryBidsRequest | Request body with bids to delete |
Returns
Promise<void>
void on success
Throws
When API key is invalid (401/403)
Throws
When rate limit exceeded (429)
Throws
When request data is invalid (400/422)
Throws
When network request fails or times out
See
Example
await sdk.promotion.deleteNormqueryBids({
bids: [{
advert_id: 1825035,
nm_id: 983512347,
norm_query: 'Фраза 1',
bid: 1000
}]
});getV1Config()
getV1Config(): Promise<V2GetConfigResponse>;Defined in: modules/promotion/index.ts:992
Конфигурация кабинета продвижения (V1)
Возвращает валюту, код валюты кабинета продавца и допустимые шаги ставок (cpmStep, cpcStep) для метода PromotionModule.postV1NormqueryBids.
Rate limit: 1 request per minute, 1 min interval, burst 10
Returns
Promise<V2GetConfigResponse>
Account currency, currency code and allowed bid steps (CPM and CPC)
Throws
When API key is invalid (401/403)
Throws
When rate limit exceeded (429)
Throws
When request data is invalid (400/422)
Throws
When network request fails or times out
Since
task-170
See
https://dev.wildberries.ru/openapi/promotion#tag/Kampanii/operation/getV1Config
Example
const config = await sdk.promotion.getV1Config();
console.log(config.currency, config.currencyCode, config.cpmStep, config.cpcStep);postV1NormqueryBids()
postV1NormqueryBids(data: V1SetNormQueryBidsRequest): Promise<V1SetNormQueryBidsResponse>;Defined in: modules/promotion/index.ts:1034
Установить ставки для поисковых кластеров в валюте кабинета (V1)
Устанавливает ставки для поисковых кластеров в валюте кабинета продавца. Доступно только для кампаний с ручной ставкой и моделью оплаты cpm — за показы. Допустимый шаг ставки возвращается методом PromotionModule.getV1Config.
Отличается от PromotionModule.setNormqueryBids (v0, /adv/v0/normquery/bids): v1 принимает ставку в bidMinorUnits и работает в валюте кабинета продавца.
Rate limit: 2 requests per second, 500ms interval, burst 4
Parameters
| Parameter | Type | Description |
|---|---|---|
data | V1SetNormQueryBidsRequest | Request body with bids in minor currency units (max 100 items) |
Returns
Promise<V1SetNormQueryBidsResponse>
Result with successfully applied bids and failed bids (with reasons)
Throws
When API key is invalid (401/403)
Throws
When rate limit exceeded (429)
Throws
When request data is invalid (400/422)
Throws
When network request fails or times out
Since
task-170
See
https://dev.wildberries.ru/openapi/promotion#tag/Poiskovye-klastery/operation/postV1NormqueryBids
Example
const result = await sdk.promotion.postV1NormqueryBids({
bids: [{
advertId: 1825035,
nmId: 983512347,
normQuery: 'Фраза 1',
bidMinorUnits: 1000
}]
});
console.log(result.success, result.failed);getNormqueryMinus()
getNormqueryMinus(data: V0GetNormQueryMinusRequest): Promise<V0GetNormQueryMinusResponse>;Defined in: modules/promotion/index.ts:1064
Список минус-фраз кампаний
Метод возвращает список минус-фраз по ID кампаний и артикулам WB.
Rate limit: 5 requests per second, 200ms interval, burst 10
Parameters
| Parameter | Type | Description |
|---|---|---|
data | V0GetNormQueryMinusRequest | Request body with campaign/product items |
Returns
Promise<V0GetNormQueryMinusResponse>
List of minus-phrases
Throws
When API key is invalid (401/403)
Throws
When rate limit exceeded (429)
Throws
When request data is invalid (400/422)
Throws
When network request fails or times out
See
Example
const minusPhrases = await sdk.promotion.getNormqueryMinus({
items: [{ advert_id: 1825035, nm_id: 983512347 }]
});
console.log(minusPhrases.items);setNormqueryMinus()
setNormqueryMinus(data: V0SetMinusNormQueryRequest): Promise<void>;Defined in: modules/promotion/index.ts:1096
Установка и удаление минус-фраз
Метод устанавливает и удаляет минус-фразы в кампаниях с ручной ставкой и моделью оплаты cpm — за показы. Отправка пустого массива удаляет все минус-фразы.
Rate limit: 5 requests per second, 200ms interval, burst 10
Parameters
| Parameter | Type | Description |
|---|---|---|
data | V0SetMinusNormQueryRequest | Request body with minus-phrases to set |
Returns
Promise<void>
void on success
Throws
When API key is invalid (401/403)
Throws
When rate limit exceeded (429)
Throws
When request data is invalid (400/422)
Throws
When network request fails or times out
See
Example
await sdk.promotion.setNormqueryMinus({
advert_id: 1825035,
nm_id: 983512347,
norm_queries: ['Фраза 1', 'Фраза 2']
});getAdvertsV2()
getAdvertsV2(options?: {
ids?: string;
statuses?: string;
payment_type?: "cpm" | "cpc";
}): Promise<GetAdvertsV2Response>;Defined in: modules/promotion/index.ts:1143
Информация о кампаниях (V2)
Метод возвращает информацию о рекламных кампаниях с единой или ручной ставкой по их статусам, типам оплаты и ID. Replaces deprecated v1 endpoints.
Данные синхронизируются с базой раз в 3 минуты. Статусы кампаний меняются раз в минуту. Ставки кампаний меняются раз в 30 секунд.
Rate limit: 5 requests per second, 200ms interval, burst 5
Parameters
| Parameter | Type | Description |
|---|---|---|
options? | { ids?: string; statuses?: string; payment_type?: "cpm" | "cpc"; } | Query parameters for filtering campaigns |
options.ids? | string | Campaign IDs, comma-separated (max 50) |
options.statuses? | string | Campaign statuses: -1 (deleted), 4 (ready), 7 (finished), 8 (cancelled), 9 (active), 11 (paused) |
options.payment_type? | "cpm" | "cpc" | Payment type: cpm (per impressions) or cpc (per click) |
Returns
Promise<GetAdvertsV2Response>
List of campaigns with bid_type (unified/manual) and bids in kopecks
Throws
When API key is invalid (401/403)
Throws
When rate limit exceeded (429)
Throws
When request data is invalid (400/422)
Throws
When network request fails or times out
Since
3.4.0 — Return type changed from GetAdverts to GetAdvertsV2Response
See
https://dev.wildberries.ru/docs/openapi/promotion#tag/Kampanii/paths/~1api~1advert~1v2~1adverts/get
Example
const campaigns = await sdk.promotion.getAdvertsV2({
ids: '12345,23456',
statuses: '9,11',
payment_type: 'cpm',
});
for (const advert of campaigns.adverts) {
console.log(advert.id, advert.bid_type, advert.status);
for (const nm of advert.nm_settings) {
console.log(` nmId=${nm.nm_id} search=${nm.bids_kopecks.search} reco=${nm.bids_kopecks.recommendations}`);
}
}getBidsMinV2()
getBidsMinV2(data: {
advert_id: number;
nm_ids: number[];
payment_type: "cpm" | "cpc";
placement_types: ("combined" | "search" | "recommendation")[];
}): Promise<{
bids: {
nm_id: number;
bids: {
type: PlacementType;
value: number;
currency?: string;
}[];
}[];
}>;Defined in: modules/promotion/index.ts:1183
Минимальные ставки для карточек товаров (V1 API)
Метод возвращает минимальные ставки для карточек товаров в копейках по типу оплаты и местам размещения. Replaces deprecated v0 endpoint.
Rate limit: 20 requests per minute, 3 second interval, burst 5
Parameters
| Parameter | Type | Description |
|---|---|---|
data | { advert_id: number; nm_ids: number[]; payment_type: "cpm" | "cpc"; placement_types: ("combined" | "search" | "recommendation")[]; } | Request body with campaign ID, product IDs, payment type, and placement types |
data.advert_id | number | - |
data.nm_ids | number[] | - |
data.payment_type | "cpm" | "cpc" | - |
data.placement_types | ("combined" | "search" | "recommendation")[] | - |
Returns
Promise<{ bids: { nm_id: number; bids: { type: PlacementType; value: number; currency?: string; }[]; }[]; }>
Minimum bids for products by placement type (in kopecks)
Throws
When API key is invalid (401/403)
Throws
When rate limit exceeded (429)
Throws
When request data is invalid (400/422)
Throws
When network request fails or times out
See
Example
const minBids = await sdk.promotion.getBidsMinV2({
advert_id: 98765432,
nm_ids: [12345678, 87654321],
payment_type: 'cpm',
placement_types: ['combined', 'search', 'recommendation']
});
console.log(minBids.bids);getBidsRecommendations()
getBidsRecommendations(params: GetBidsRecommendationsParams): Promise<BidsRecommendationsResponse>;Defined in: modules/promotion/index.ts:1251
Рекомендуемые ставки для карточек товаров и поисковых кластеров
Метод возвращает рекомендуемые ставки для кампаний с оплатой за показы (cpm) и за клики (cpc). Для CPM доступны рекомендации по карточке и поисковым кластерам, для CPC — по диапазонам позиций выдачи.
Данные синхронизируются с базой раз в 3 минуты. Для приостановленных кампаний normQueries может быть пустым массивом.
Кэширование: данные обновляются на стороне WB раз в ~3 минуты, поэтому кэшируйте ответ на стороне клиента с TTL ~180 с. Это удержит вас в рамках лимита 5 запросов/мин (и спасёт от 429) — более частые вызовы всё равно вернут устаревшие данные.
Rate limit: 5 requests per minute, 12-second interval, burst 5
Parameters
| Parameter | Type | Description |
|---|---|---|
params | GetBidsRecommendationsParams | Campaign ID and WB article ID |
Returns
Promise<BidsRecommendationsResponse>
Recommended bids. For CPM campaigns (pay per impression): base (card-level) and normQueries (per search cluster). For CPC campaigns (pay per click, supported since WB news 2026-09): levels — recommended bids per listing position range (1-2 / 3-10 / 11-34). The variant is discriminated by paymentType.
Throws
When API key is invalid (401/403)
Throws
When rate limit exceeded (429)
Throws
When nmId does not belong to campaign or params invalid (400)
Throws
When network request fails or times out
Since
3.4.0
See
Example
const reco = await sdk.promotion.getBidsRecommendations({
advertId: 29081652,
nmId: 148190095,
});
if (reco.paymentType === 'cpc') {
for (const level of reco.levels ?? []) {
console.log(`1-2: ${level.range1To2.bidKopecks}, 3-10: ${level.range3To10.bidKopecks}, 11-34: ${level.range11To34.bidKopecks}`);
}
} else {
for (const nq of reco.normQueries ?? []) {
console.log(`${nq.normQuery}: min=${nq.reachMin.bidKopecks} med=${nq.reachMedium.bidKopecks} max=${nq.reachMax.bidKopecks}`);
}
}getCampaignCount()
getCampaignCount(): Promise<GetCampaignCountResponse>;Defined in: modules/promotion/index.ts:1292
Получение списков кампаний
Возвращает списки всех рекламных кампаний продавца с их ID. Кампании сгруппированы по типу и статусу, у каждой указана дата последнего изменения.
Rate limit:
| Период | Лимит | Интервал | Всплеск |
|---|---|---|---|
| 1 сек | 5 запросов | 200 мс | 5 запросов |
Returns
Promise<GetCampaignCountResponse>
Списки кампаний по типам и статусам
Throws
When API key is invalid (401/403)
Throws
When rate limit exceeded (429)
See
https://dev.wildberries.ru/openapi/promotion#tag/Kampanii
Example
const campaigns = await sdk.promotion.getCampaignCount();
console.log(`Total campaigns: ${campaigns.all}`);
for (const group of campaigns.adverts || []) {
console.log(`Type ${group.type}, Status ${group.status}: ${group.count} campaigns`);
}createCampaign()
createCampaign(data: CreateCampaignRequest): Promise<number>;Defined in: modules/promotion/index.ts:1328
Создание кампании
Метод создаёт рекламную кампанию с единой или ручной ставкой. Возвращает ID созданной кампании.
Rate limit:
| Период | Лимит | Интервал | Всплеск |
|---|---|---|---|
| 1 мин | 5 запросов | 12 сек | 5 запросов |
Parameters
| Parameter | Type | Description |
|---|---|---|
data | CreateCampaignRequest | Данные для создания кампании |
Returns
Promise<number>
ID созданной кампании
Throws
When API key is invalid (401/403)
Throws
When rate limit exceeded (429)
Throws
When request data is invalid (400/422)
See
https://dev.wildberries.ru/openapi/promotion#tag/Sozdanie-kampanij
Example
const campaignId = await sdk.promotion.createCampaign({
name: 'My Campaign',
nms: [12345678, 87654321],
bid_type: 'manual',
payment_type: 'cpm',
placement_types: ['search', 'recommendation']
});
console.log(`Created campaign with ID: ${campaignId}`);getSupplierSubjects()
getSupplierSubjects(params?: GetSupplierSubjectsParams): Promise<
| SupplierSubject[]
| null>;Defined in: modules/promotion/index.ts:1362
Список предметов продавца
Метод возвращает список предметов, для которых можно создать кампанию. Возвращает null, если нет товаров для создания кампаний.
Rate limit:
| Период | Лимит | Интервал | Всплеск |
|---|---|---|---|
| 1 мин | 5 запросов | 12 сек | 5 запросов |
Parameters
| Parameter | Type | Description |
|---|---|---|
params? | GetSupplierSubjectsParams | Параметры фильтрации |
Returns
Promise< | SupplierSubject[] | null>
Список предметов или null
Throws
When API key is invalid (401/403)
Throws
When rate limit exceeded (429)
See
https://dev.wildberries.ru/openapi/promotion#tag/Sozdanie-kampanij
Example
const subjects = await sdk.promotion.getSupplierSubjects({ payment_type: 'cpm' });
if (subjects) {
for (const subject of subjects) {
console.log(`${subject.name}: ${subject.count} products`);
}
}getSupplierNms()
getSupplierNms(subjectIds: number[]): Promise<SupplierNmItem[]>;Defined in: modules/promotion/index.ts:1394
Список карточек товаров продавца
Метод возвращает список карточек товаров по указанным предметам. Используется для получения артикулов WB для добавления в кампанию.
Rate limit:
| Период | Лимит | Интервал | Всплеск |
|---|---|---|---|
| 1 мин | 5 запросов | 12 сек | 5 запросов |
Parameters
| Parameter | Type | Description |
|---|---|---|
subjectIds | number[] | Массив ID предметов |
Returns
Promise<SupplierNmItem[]>
Список карточек товаров
Throws
When API key is invalid (401/403)
Throws
When rate limit exceeded (429)
Throws
When request data is invalid (400/422)
See
https://dev.wildberries.ru/openapi/promotion#tag/Sozdanie-kampanij
Example
const products = await sdk.promotion.getSupplierNms([123, 456]);
for (const product of products) {
console.log(`${product.title} (nmId: ${product.nm})`);
}startCampaign()
startCampaign(id: number): Promise<void>;Defined in: modules/promotion/index.ts:1426
Запуск кампании
Метод запускает кампании в статусах:
4— готова к запуску11— на паузе
Rate limit:
| Период | Лимит | Интервал | Всплеск |
|---|---|---|---|
| 1 сек | 5 запросов | 200 мс | 5 запросов |
Parameters
| Parameter | Type | Description |
|---|---|---|
id | number | ID кампании |
Returns
Promise<void>
void
Throws
When API key is invalid (401/403)
Throws
When rate limit exceeded (429)
Throws
When campaign is in wrong status (400)
See
https://dev.wildberries.ru/openapi/promotion#tag/Upravlenie-kampaniyami
Example
await sdk.promotion.startCampaign(12345);
console.log('Campaign started successfully');pauseCampaign()
pauseCampaign(id: number): Promise<void>;Defined in: modules/promotion/index.ts:1456
Пауза кампании
Метод ставит кампании на паузу. Работает только для кампаний в статусе:
9— активна
Rate limit:
| Период | Лимит | Интервал | Всплеск |
|---|---|---|---|
| 1 сек | 5 запросов | 200 мс | 5 запросов |
Parameters
| Parameter | Type | Description |
|---|---|---|
id | number | ID кампании |
Returns
Promise<void>
void
Throws
When API key is invalid (401/403)
Throws
When rate limit exceeded (429)
Throws
When campaign is in wrong status (400)
See
https://dev.wildberries.ru/openapi/promotion#tag/Upravlenie-kampaniyami
Example
await sdk.promotion.pauseCampaign(12345);
console.log('Campaign paused successfully');getMinusPhrases()
getMinusPhrases(request: GetMinusPhrasesRequest): Promise<GetMinusPhrasesResponse>;Defined in: modules/promotion/index.ts:1493
Получить минус-фразы для кампаний
Возвращает список минус-фраз по ID кампаний и артикулам WB.
nm_id по типу кампании:
- Type 8 (устаревший): nm_id=0 для всей кампании
- Type 9 (актуальный): nm_id = реальный артикул WB
Rate limit: 5 requests per second, 200ms interval, burst 10
Parameters
| Parameter | Type | Description |
|---|---|---|
request | GetMinusPhrasesRequest | Запрос с массивом items (max 100) |
Returns
Promise<GetMinusPhrasesResponse>
Promise<GetMinusPhrasesResponse>
Throws
When API key is invalid (401/403)
Throws
When rate limit exceeded (429)
Throws
When request data is invalid (400/422)
Throws
When network request fails or times out
See
Example
const result = await sdk.promotion.getMinusPhrases({
items: [{ advert_id: 123456, nm_id: 789012 }]
});
console.log(result.items[0].norm_queries); // ['фраза1', 'фраза2']setMinusPhrases()
setMinusPhrases(request: SetMinusPhrasesRequest): Promise<void>;Defined in: modules/promotion/index.ts:1538
Установить минус-фразы для кампании
Устанавливает минус-фразы в кампаниях с ручной ставкой и CPM.
ВАЖНО: Отправка пустого массива norm_queries УДАЛЯЕТ ВСЕ минус-фразы!
nm_id по типу кампании:
- Type 8: nm_id=0 для настроек всей кампании
- Type 9: nm_id = реальный артикул WB
Rate limit: 5 requests per second, 200ms interval, burst 10
Parameters
| Parameter | Type | Description |
|---|---|---|
request | SetMinusPhrasesRequest | Запрос (max 1000 norm_queries) |
Returns
Promise<void>
Promise<void>
Throws
When API key is invalid (401/403)
Throws
When rate limit exceeded (429)
Throws
When request data is invalid (400/422)
Throws
When network request fails or times out
See
Example
// Установить минус-фразы
await sdk.promotion.setMinusPhrases({
advert_id: 123456,
nm_id: 789012,
norm_queries: ['нежелательная фраза', 'другая фраза']
});
// Удалить ВСЕ минус-фразы
await sdk.promotion.setMinusPhrases({
advert_id: 123456,
nm_id: 789012,
norm_queries: [] // УДАЛЯЕТ ВСЕ!
});getSearchClusterStats()
getSearchClusterStats(request: GetSearchClusterStatsRequest): Promise<GetSearchClusterStatsResponse>;Defined in: modules/promotion/index.ts:1581
Получить статистику поисковых кластеров
Возвращает статистику по поисковым кластерам за период.
Поддерживает кампании cpm и cpc. Для cpc-кампаний поля views, ctr, cpm отсутствуют в ответе.
nm_id по типу кампании:
- Type 8: nm_id=0 для агрегированной статистики
- Type 9: nm_id = реальный артикул WB
Rate limit: 10 requests per minute, 6 second interval, burst 20
Parameters
| Parameter | Type | Description |
|---|---|---|
request | GetSearchClusterStatsRequest | Запрос с периодом и items (max 100) |
Returns
Promise<GetSearchClusterStatsResponse>
Promise<GetSearchClusterStatsResponse>
Throws
When API key is invalid (401/403)
Throws
When rate limit exceeded (429)
Throws
When request data is invalid (400/422)
Throws
When network request fails or times out
See
https://dev.wildberries.ru/openapi/promotion#tag/Statistika/paths/~1adv~1v0~1normquery~1stats/post
Example
const stats = await sdk.promotion.getSearchClusterStats({
from: '2026-02-01',
to: '2026-02-09',
items: [{ advert_id: 123456, nm_id: 789012 }]
});
// stats.stats[0].stats[0].norm_query = "фраза"
// stats.stats[0].stats[0].views = 1949updateBids()
updateBids(data: UpdateBidsRequest): Promise<UpdateBidsResponse>;Defined in: modules/promotion/index.ts:1642
Изменение ставок в кампаниях (V1 API с копейками)
Меняет ставки карточек товаров по артикулам WB в кампаниях с единой или ручной ставкой. Для кампаний в статусах 4, 9 и 11.
ВАЖНО: Ставки указываются в КОПЕЙКАХ (bid_kopecks), не в рублях!
Семантика placement (поле placement каждой ставки):
combined— поиск и рекомендации вместе (кампании с единой ставкой,bid_type: unified/ Type 8)search/recommendations— одно место размещения (кампании с ручной ставкой,bid_type: manual/ Type 9)
Идемпотентность: повторная установка той же ставки не списывает средства дважды, но каждый вызов всё равно расходует слот rate-limit (300/мин, интервал 200 мс) — избегайте no-op обновлений.
Ошибки диапазона: выход ставки за пределы допустимого диапазона возвращает HTTP 400 с телом wrong bid value: <received>; min: <floor> — BaseClient парсит его в BidOutOfRangeError (поля received / min / max?), поэтому канонический минимальный bid доступен сразу, без отдельного запроса PromotionModule.getBidsRecommendations (5/мин).
Rate limit: 5 requests per second, 200ms interval, burst 5
Parameters
| Parameter | Type | Description |
|---|---|---|
data | UpdateBidsRequest | Request body with bids in kopecks |
Returns
Promise<UpdateBidsResponse>
Updated bids
Throws
When API key is invalid (401/403)
Throws
When rate limit exceeded (429)
Throws
When request data is invalid (400/422)
Throws
When network request fails or times out
See
Example
const result = await sdk.promotion.updateBids({
bids: [{
advert_id: 12345,
nm_bids: [{
nm_id: 13335157,
bid_kopecks: 250, // = 2.50 RUB
placement: 'recommendations'
}]
}]
});updateCampaignProducts()
updateCampaignProducts(data: UpdateCampaignProductsRequest): Promise<UpdateCampaignProductsResponse>;Defined in: modules/promotion/index.ts:1677
Управление товарами в кампаниях
Добавляет и удаляет карточки товаров в кампаниях типа 9. Для кампаний в статусах 4, 9 и 11. Для добавляемых товаров устанавливается текущая минимальная ставка.
Rate limit: 1 request per second, 1000ms interval, burst 1
Parameters
| Parameter | Type | Description |
|---|---|---|
data | UpdateCampaignProductsRequest | Request body with campaigns and products to add/delete |
Returns
Promise<UpdateCampaignProductsResponse>
Results of product updates
Throws
When API key is invalid (401/403)
Throws
When rate limit exceeded (429)
Throws
When request data is invalid (400/422)
Throws
When network request fails or times out
See
Example
const result = await sdk.promotion.updateCampaignProducts({
campaigns: [{
advert_id: 12345,
add_nms: [111, 222],
delete_nms: [333]
}]
});getRecommendationsList()
getRecommendationsList(data: ListRecommendationsRequest): Promise<ListRecommendationsResponse>;Defined in: modules/promotion/index.ts:1721
Get Seller Recommendations list (item recommendations in product cards)
Returns the current seller-recommendation assignments for product cards (the "Seller Recommendations" block shown in product listings).
Lives on the content-api domain (Content-category methods), although documented under the promotion tag. Auth: Personal or Service token (Content category). Gating: Jam subscription (Advanced/Premium) OR the "Seller Recommendations in listings" Tariff-Builder option.
Rate limit: 100 requests per minute
Parameters
| Parameter | Type | Description |
|---|---|---|
data | ListRecommendationsRequest | Optional filter (WB item numbers). The exact filter shape is INFERRED — verify against the live spec (task-156 AC#9). |
Returns
Promise<ListRecommendationsResponse>
Recommendation entries per item in data; per-item errors on partial success (HTTP 200)
Throws
When API key is invalid (401/403)
Throws
When rate limit exceeded (429)
Throws
When request data is invalid (400)
Throws
When network request fails or times out
See
https://dev.wildberries.ru/docs/openapi/work-with-products
Example
const result = await sdk.promotion.getRecommendationsList({ nmIDs: [12345678] });
for (const entry of result.data ?? []) {
console.log(`${entry.nmID}: ${entry.tagsIDs.join(', ')}`);
}setRecommendations()
setRecommendations(data: SetRecommendationsRequest): Promise<SetRecommendationsResponse>;Defined in: modules/promotion/index.ts:1765
Set Seller Recommendations (item recommendations in product cards)
Sets, updates, or removes seller recommendations for product cards. Send an empty tagsIDs array to clear a product's recommendations.
PARTIAL SUCCESS: WB returns HTTP 200 even when some items fail — the per-item failures are listed in the errors array of the response body (each { nmID, error }). Always inspect result.errors instead of relying on the status code.
Lives on the content-api domain. Auth: Personal or Service token (Content category). Gating: Jam subscription (Advanced/Premium) OR the "Seller Recommendations in listings" Tariff-Builder option.
Rate limit: 100 requests per minute
Parameters
| Parameter | Type | Description |
|---|---|---|
data | SetRecommendationsRequest | Per-product recommendation assignments |
Returns
Promise<SetRecommendationsResponse>
Response envelope; data is null. Check errors for partial failures.
Throws
When API key is invalid (401/403)
Throws
When rate limit exceeded (429)
Throws
When request data is invalid (400)
Throws
When network request fails or times out
See
https://dev.wildberries.ru/docs/openapi/work-with-products
Example
const result = await sdk.promotion.setRecommendations([
{ nmID: 12345678, tagsIDs: [11111111, 22222222] },
]);
if (result.errors.length) {
console.warn('Partial failure:', result.errors);
}getV0DailyLimits()
getV0DailyLimits(advertIds: string | number[]): Promise<V0GetDailyLimitsResponse>;Defined in: modules/promotion/index.ts:1808
Настройки дневных лимитов CPC-кампаний (V0)
Метод возвращает текущие настройки дневных лимитов CPC-кампаний — максимальных сумм, которые кампании могут потратить на продвижение за день.
Единицы: dailyLimit, spentToday и requiredLimit указываются в минорных единицах валюты — 0.01 базовой единицы валюты кабинета продавца.
Доступен по токенам Personal и Service (Продвижение).
Rate limit: 5 requests per minute, 12s interval, burst 5 (Personal/Service tokens)
Parameters
| Parameter | Type | Description |
|---|---|---|
advertIds | string | number[] | ID кампаний (макс. 100); массив объединяется в строку через запятую, можно передать и готовую строку ('12346567,987654321') |
Returns
Promise<V0GetDailyLimitsResponse>
Текущие настройки дневных лимитов запрошенных кампаний
Throws
When API key is invalid (401/403)
Throws
When rate limit exceeded (429)
Throws
When request data is invalid (400)
Throws
When network request fails or times out
Since
task-186
See
https://dev.wildberries.ru/openapi/promotion#tag/campaignManagement/operation/getV0DailyLimits
Example
const result = await sdk.promotion.getV0DailyLimits([12346, 987654321]);
for (const advert of result.adverts) {
console.log(advert.advertId, advert.enabled, advert.dailyLimit, advert.valid);
}putV0DailyLimits()
putV0DailyLimits(data: V0PutDailyLimitsRequest): Promise<V0PutDailyLimitsResponse>;Defined in: modules/promotion/index.ts:1865
Установка дневных лимитов CPC-кампаний (V0)
Метод включает, обновляет или отключает дневной лимит бюджета кампаний.
Write-метод: изменяет лимиты реальных кампаний — не вызывать в live-кабинете без явного одобрения пользователя.
Единицы: dailyLimit указывается в минорных единицах валюты — 0.01 базовой единицы валюты кабинета продавца. Минимально допустимая сумма возвращается полем minDailyLimit метода PromotionModule.getV1Config.
При enabled: true поля dailyLimit и carryOverEnabled обязательны. Если установленный лимит ниже рекомендованного минимума (requiredLimit в ответе), бюджет может расходоваться неравномерно и возможны ошибки в кампании.
Доступен по токенам Personal и Service (Продвижение).
Rate limit: 5 requests per minute, 12s interval, burst 5 (Personal/Service tokens)
Parameters
| Parameter | Type | Description |
|---|---|---|
data | V0PutDailyLimitsRequest | ID кампаний (1–100) и новые настройки лимита |
Returns
Promise<V0PutDailyLimitsResponse>
Результат по каждой кампании: belowMinLimit и рекомендованный минимум requiredLimit (в минорных единицах валюты)
Throws
When API key is invalid (401/403)
Throws
When rate limit exceeded (429)
Throws
When request data is invalid (400)
Throws
When network request fails or times out
Since
task-186
See
https://dev.wildberries.ru/openapi/promotion#tag/campaignManagement/operation/putV0DailyLimits
Example
const result = await sdk.promotion.putV0DailyLimits({
advertIds: [1234, 5603],
enabled: true,
dailyLimit: 100000,
carryOverEnabled: true
});
for (const advert of result.adverts) {
if (advert.belowMinLimit) {
console.warn(`Лимит кампании ${advert.advertId} ниже минимума:`, advert.requiredLimit);
}
}