{
"error": "error_brand_already_exists",
"localMessage": "Бренд Base уже существует",
"params": {
"name": "Base"
}
}Публичный API · Справочник API
Акции
Акции маркетплейсов, товары в акциях и обновление их данных.
Методы для контроля акций и товаров в них.
/api/promotion
Модель данных
Структуры данных
Поля объектов, которые используются в запросах и ответах этого раздела.
Promotion21 полей
promotionIdinteger · int64Идентификатор акции
idinteger · int64Порядковый номер в списке запроса
totalCountinteger · int64Общее кол-во акций
namestringНазвание акции
dateStartstring · date-timeДата и время начало
dateEndstring · date-timeДата и время окончания
changeCommissionbooleanМеняется ли комиссия или нет
changeCommissionAmountnumber · doubleНа какой процент сокращается комиссия
createdDatestring · date-timeДата создания
servicestringМаркетплейс акции
isDeletedbooleanИдентификатор удаления
descriptionstringОписание акции
promotionIdOnMpstringИдентификатор акции на МП
clientIdinteger · int64Идентификатор клиента
organizationIdinteger · int64Идентификатор организации
candidateCountinteger · int64Кол-во кандидатов в акцию
inPromotionCountinteger · int64Кол-во участников в акции
autobooleanПризнак автоматической акции
hotsalebooleanПризнак hotsale акции
candidateCountOnMpinteger · int64Кол-во кандидатов в акции на маркетплейсе
inPromotionCountOnMpinteger · int64Кол-во участников в акции на маркетплейсе
TmsTask25 полей
idinteger · int64Идентификатор задачи
read-onlystatusstringТекущий статус задачи
read-onlytypestringТип задачи
read-onlynamestringДанные задачи в json - могут быть пустыми
clientIdinteger · int64Поле clientId.
entityIdinteger · int64Сущность, к которой относится задача
progressinteger · int32Прогресс выполнения задачи в процентах
processedQuantityinteger · int32Количество обработанных записей задачи
organizationIdinteger · int64Организация задачи, может быть 0, если не зависит от организации
priorityinteger · int32Приоритет задачи - чем выше тем быстрее задача запустится
propertiesstringПараметры задачи
messagestringСообщение с результатом выполнения задачи
messageParamsstringПараметры сообщения с результатом выполнения задачи
createdDatestring · date-timeДата добавления задачи в очередь
startDatestring · date-timeДата запуска задачи
finishDatestring · date-timeДата завершения задачи
urlstringСсылка на скачивание файла с результатом задачи
inputFileUrlstringСсылка на загруженный файл
retryNumberinteger · int32Счётчик перезапуска задачи.
userIdinteger · int32Пользователь запустивший задачу
retryDatestring · date-timeЗапланированная дата перезапуска
debugbooleanЗапуск задачи в режиме отладки с большим логированием
forcedStartbooleanРучной запуск задачи
servicestringСервис в рамках которого выполняется задача
langstringЯзык на котором сейчас запущена таска
ProductPromotion95 полей
categoryNamestringКатегория
brandNamestringБренд
subjectstringПоле subject.
purchasePricenumber · doubleПоле purchasePrice.
deliveryCostnumber · doubleПоле deliveryCost.
additionalCostnumber · doubleПоле additionalCost.
barcodestringПоле barcode.
instockQuantityinteger · int64Поле instockQuantity.
wildberriesStockCountinteger · int64Поле wildberriesStockCount.
yandexMarketStockCountinteger · int64Поле yandexMarketStockCount.
createdDatestring · date-timeПоле createdDate.
minPricenumber · doubleПоле minPrice.
isDuplicatebooleanПоле isDuplicate.
ozonArticlestringПоле ozonArticle.
ozonStockCountinteger · int64Поле ozonStockCount.
salesExpensesOnMpPercentnumber · doubleПоле salesExpensesOnMpPercent.
taxeRatenumber · doubleПоле taxeRate.
widthinteger · int32Поле width.
heightinteger · int32Поле height.
depthinteger · int32Поле depth.
ozonPurchasePercentnumber · doubleПоле ozonPurchasePercent.
warehouseRationumber · doubleПоле warehouseRatio.
wildberriesCommissionnumber · doubleКомиссия по тарифу FBM
wildberriesFbwCommissionnumber · doubleКомиссия по тарифу FBW
wildberriesFbsCommissionnumber · doubleКомиссия по тарифу FBS
wildberriesDbsCommissionnumber · doubleКомиссия по тарифу DBS
wildberriesEdbsCommissionnumber · doubleКомиссия по тарифу EDBS
wildberriesCAndCCommissionnumber · doubleКомиссия по тарифу C&C
wildberriesBookingCommissionnumber · doubleКомиссия за бронирование
wildberriesAdditionalExpensesnumber · doubleПоле wildberriesAdditionalExpenses.
ozonAdditionalExpensesnumber · doubleПоле ozonAdditionalExpenses.
ozonCommissionnumber · doubleПоле ozonCommission.
wildberriesIdinteger · int64Поле wildberriesId.
productIdinteger · int64Идентификатор продукта
promotionIdinteger · int64Идентификатор акции
ozonFbsCommissionnumber · doubleОзон ФБС комиссия
ozonFboCommissionnumber · doubleОзон ФБО комиссия
servicestringСервис
acquiringPercentnumber · doubleМаксимальный процент комиссии за эквайринг
currentPricenumber · doubleТекущая цена со скидкой
currentPriceWithoutDiscountnumber · doubleТекущая цена без скидкой
plannedPricenumber · doubleПланируемая цена под акцию
totalStockCountinteger · int64Поле totalStockCount.
commissionReductionnumber · doubleПоле commissionReduction.
profitDifferencenumber · doubleПоле profitDifference.
marginDifferencenumber · doubleПоле marginDifference.
markupDifferencenumber · doubleПоле markupDifference.
plannedAndMinPriceDiffnumber · doubleПоле plannedAndMinPriceDiff.
incomeDifferencenumber · doubleПоле incomeDifference.
currentDiscountnumber · doubleПоле currentDiscount.
productCreatedDatestring · date-timeПоле productCreatedDate.
mainImageUrlstringСсылка на основное изображение
isProfitablybooleanПоле isProfitably.
taskIdinteger · int64Идентификатор задачи
serviceArticlestringАртикул на сервисе
articlestringМодель артикул
daysCountOnServiceinteger · int32Кол-во дней на сервисе
turnoverinteger · int32Оборачиваемость
fboStockinteger · int32ФБО остаток
fbsStockinteger · int32ФБС остаток
newDiscountForPromotionnumber · doubleПоле newDiscountForPromotion.
saleLogisticsnumber · doubleЛогистика при продаже
returnLogisticsnumber · doubleОбратная логистика
purchasePercentnumber · doubleПроцент выкупа
totalLogisticsnumber · doubleЛогистика
commissionsnumber · doubleКомиссия
currentProfitnumber · doubleТекущая прибыль
promotionProfitnumber · doubleПрибыль под акцию
currentMarginalitynumber · doubleТекущая маржинальность
promotionMarginalitynumber · doubleМаржинальность под акцию
currentMarkUpnumber · doubleТекущая наценка
promotionMarkUpnumber · doubleНаценка под акцию
additionalDiscountForPromotionRubnumber · doubleДополнительная скидка под акции в руб
additionalDiscountForPromotionPercentnumber · doubleДополнительная скидка под акции в %
isDeletedbooleanУдаленный?
organizationIdinteger · int64Идентификатор организации
clientIdinteger · int64Идентификатор клиента
addModestringТип добавления товара в акцию: автоматически или вручную продавцом.
ozonAverageExpensesnumber · doubleПоле ozonAverageExpenses.
isActivebooleanТовар в акции или нет
changeNamestringКто вносил корректировки
changeDatestring · date-timeДата когда вносили изменения
productNamestringНазвание продукта
idinteger · int64Порядковый номер в общем списке, для фронта
totalCountinteger · int64Общее кол-во
serviceCardstringИдентификатор продукта на сервисе
isNotFoundbooleanПоле isNotFound.
isArchivedbooleanПоле isArchived.
productCommissionsstringПоле productCommissions.
currentGrossProfitnumber · doubleВаловая прибыль текущая (без акции), руб
plannedGrossProfitnumber · doubleВаловая прибыль под акцию (с акцией), руб
promotionNamestringНазвание акции
promotionDateEndstring · date-timeДата и время окончания акции
promotionDateStartstring · date-timeДата и время начала акции
promotionIsDeletedbooleanПризнак удаления акции
OzonProduct4 полей
product_idinteger · int64Идентификатор товара.
action_pricenumber · doubleЦена товара по акции.
stockinteger · int32Количество единиц товара в акции типа «Скидка на сток».
reasonstringПричина, почему товар не добавлен в акцию.
FindResponseProductPromotion1 полей
rowsProductPromotion[]Строки с результатом поиска
FindResponsePromotion1 полей
rowsPromotion[]Строки с результатом поиска
Ошибки
Обработка ошибок
При ошибке API возвращает её код в поле error и сообщение на языке пользователя в localMessage. Проверяйте код error в программе, а localMessage показывайте пользователю.
errorКод ошибки для обработки в программе.
localMessageСообщение на языке пользователя, которому принадлежит токен.
paramsЗначения, которые сервер подставил в сообщение об ошибке.
Язык localMessage определяется полем lang пользователя, которому принадлежит API-токен. Язык страницы документации и заголовок Accept-Language его не переключают; если язык пользователя не указан, используется русский.
{
"error": "error_brand_already_exists",
"localMessage": "Brand Base already exists",
"params": {
"name": "Base"
}
}Методы
Методы
Обновить акцию
/api/promotion/{promotionId}Метод обновляет данные акцию
Тело запроса
application/jsonПоля объектаPromotion
| Поле | Тип | Обязательно | Описание |
|---|---|---|---|
promotionId |
integer · int64 | Нет | Идентификатор акции |
id |
integer · int64 | Нет | Порядковый номер в списке запроса |
totalCount |
integer · int64 | Нет | Общее кол-во акций |
name |
string | Нет | Название акции |
dateStart |
string · date-time | Нет | Дата и время начало |
dateEnd |
string · date-time | Нет | Дата и время окончания |
changeCommission |
boolean | Нет | Меняется ли комиссия или нет |
changeCommissionAmount |
number · double | Нет | На какой процент сокращается комиссия |
createdDate |
string · date-time | Нет | Дата создания |
service |
stringNONE, WILDBERRIES, OZON, YANDEX_MARKET, FAMILIYA, NATIONAL_CATALOG, ALIEXPRESS, OTHER, MOY_SKLAD, SBER_MEGA_MARKET, CISLINK, ONE_C, AVITO, LEROY_MERLIN, DETMIR, KAZAN_EXPRESS, EVOTOR, WEBASYST, AMAZON, EBAY, SIMALAND, INSALES, LAMODA, OZON_PERFORMANCE, WALMART, GOOGLE, YANDEX_DISC, EMAIL, WOOCOMMERCE, MAGNIT, OPENCART, M_VIDEO, TAKEALOT, UZUM, SHOPIFY, MAKRO, YANDEX_KIT, BOB_SHOP, KASPI, DIADOC, TEKSHER, KONTUR_LOGISTICS, KONTUR_EDI, VSE_INSTRUMENTI, ELECTRONIC_SIGN | Нет | Маркетплейс акции |
isDeleted |
boolean | Нет | Идентификатор удаления |
description |
string | Нет | Описание акции |
promotionIdOnMp |
string | Нет | Идентификатор акции на МП |
clientId |
integer · int64 | Нет | Идентификатор клиента |
organizationId |
integer · int64 | Нет | Идентификатор организации |
candidateCount |
integer · int64 | Нет | Кол-во кандидатов в акцию |
inPromotionCount |
integer · int64 | Нет | Кол-во участников в акции |
auto |
boolean | Нет | Признак автоматической акции |
hotsale |
boolean | Нет | Признак hotsale акции |
candidateCountOnMp |
integer · int64 | Нет | Кол-во кандидатов в акции на маркетплейсе |
inPromotionCountOnMp |
integer · int64 | Нет | Кол-во участников в акции на маркетплейсе |
curl --request PUT 'https://api.selsup.ru/api/promotion/%7BpromotionId%7D' \
--header 'Authorization: YOUR_API_TOKEN' \
--header 'Content-Type: application/json' \
--data '{
"promotionId": 1001,
"id": 1001,
"totalCount": 1,
"name": "Example",
"dateStart": "2026-01-15T12:00:00Z",
"dateEnd": "2026-01-15T12:00:00Z"
}'
const response = await fetch('https://api.selsup.ru/api/promotion/%7BpromotionId%7D', {
method: 'PUT',
headers: {
Authorization: process.env.SELSUP_API_TOKEN,
'Content-Type': 'application/json',
},
body: JSON.stringify({
"promotionId": 1001,
"id": 1001,
"totalCount": 1,
"name": "Example",
"dateStart": "2026-01-15T12:00:00Z",
"dateEnd": "2026-01-15T12:00:00Z"
}),
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.error || 'selsup_request_failed');
}
const result = await response.json();
const response: Response = await fetch('https://api.selsup.ru/api/promotion/%7BpromotionId%7D', {
method: 'PUT',
headers: {
Authorization: process.env.SELSUP_API_TOKEN!,
'Content-Type': 'application/json',
},
body: JSON.stringify({
"promotionId": 1001,
"id": 1001,
"totalCount": 1,
"name": "Example",
"dateStart": "2026-01-15T12:00:00Z",
"dateEnd": "2026-01-15T12:00:00Z"
}),
});
if (!response.ok) {
const error = await response.json() as { error?: string };
throw new Error(error.error ?? 'selsup_request_failed');
}
const result: unknown = await response.json();
import os
import requests
response = requests.put(
'https://api.selsup.ru/api/promotion/%7BpromotionId%7D',
headers={'Authorization': os.environ['SELSUP_API_TOKEN']},
json={
'promotionId': 1001,
'id': 1001,
'totalCount': 1,
'name': 'Example',
'dateStart': '2026-01-15T12:00:00Z',
'dateEnd': '2026-01-15T12:00:00Z'
},
)
response.raise_for_status()
result = response.json()
<?php
$payload = <<<'JSON'
{
"promotionId": 1001,
"id": 1001,
"totalCount": 1,
"name": "Example",
"dateStart": "2026-01-15T12:00:00Z",
"dateEnd": "2026-01-15T12:00:00Z"
}
JSON;
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => 'https://api.selsup.ru/api/promotion/%7BpromotionId%7D',
CURLOPT_CUSTOMREQUEST => 'PUT',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: ' . getenv('SELSUP_API_TOKEN'), 'Content-Type: application/json'],
CURLOPT_POSTFIELDS => $payload,
]);
$response = curl_exec($curl);
$status = curl_getinfo($curl, CURLINFO_HTTP_CODE);
curl_close($curl);
if ($response === false || $status >= 400) {
throw new RuntimeException($response ?: 'selsup_request_failed');
}
echo $response;
package main
import (
"fmt"
"io"
"net/http"
"os"
"strings"
)
func main() {
req, err := http.NewRequest("PUT", "https://api.selsup.ru/api/promotion/%7BpromotionId%7D", strings.NewReader(`{
"promotionId": 1001,
"id": 1001,
"totalCount": 1,
"name": "Example",
"dateStart": "2026-01-15T12:00:00Z",
"dateEnd": "2026-01-15T12:00:00Z"
}`))
if err != nil { panic(err) }
req.Header.Set("Authorization", os.Getenv("SELSUP_API_TOKEN"))
req.Header.Set("Content-Type", "application/json")
response, err := http.DefaultClient.Do(req)
if err != nil { panic(err) }
defer response.Body.Close()
result, _ := io.ReadAll(response.Body)
fmt.Printf("%d\n%s\n", response.StatusCode, result)
}
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class SelSupExample {
public static void main(String[] args) throws Exception {
HttpRequest request = HttpRequest.newBuilder(URI.create("https://api.selsup.ru/api/promotion/%7BpromotionId%7D"))
.header("Authorization", System.getenv("SELSUP_API_TOKEN"))
.header("Content-Type", "application/json")
.method("PUT", HttpRequest.BodyPublishers.ofString("""
{
"promotionId": 1001,
"id": 1001,
"totalCount": 1,
"name": "Example",
"dateStart": "2026-01-15T12:00:00Z",
"dateEnd": "2026-01-15T12:00:00Z"
}
"""))
.build();
HttpResponse<String> response = HttpClient.newHttpClient()
.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.statusCode());
System.out.println(response.body());
}
}
Успешный ответ
200
Поля объекта
Promotion
| Поле | Тип | Обязательно | Описание |
|---|---|---|---|
promotionId |
integer · int64 | Нет | Идентификатор акции |
id |
integer · int64 | Нет | Порядковый номер в списке запроса |
totalCount |
integer · int64 | Нет | Общее кол-во акций |
name |
string | Нет | Название акции |
dateStart |
string · date-time | Нет | Дата и время начало |
dateEnd |
string · date-time | Нет | Дата и время окончания |
changeCommission |
boolean | Нет | Меняется ли комиссия или нет |
changeCommissionAmount |
number · double | Нет | На какой процент сокращается комиссия |
createdDate |
string · date-time | Нет | Дата создания |
service |
stringNONE, WILDBERRIES, OZON, YANDEX_MARKET, FAMILIYA, NATIONAL_CATALOG, ALIEXPRESS, OTHER, MOY_SKLAD, SBER_MEGA_MARKET, CISLINK, ONE_C, AVITO, LEROY_MERLIN, DETMIR, KAZAN_EXPRESS, EVOTOR, WEBASYST, AMAZON, EBAY, SIMALAND, INSALES, LAMODA, OZON_PERFORMANCE, WALMART, GOOGLE, YANDEX_DISC, EMAIL, WOOCOMMERCE, MAGNIT, OPENCART, M_VIDEO, TAKEALOT, UZUM, SHOPIFY, MAKRO, YANDEX_KIT, BOB_SHOP, KASPI, DIADOC, TEKSHER, KONTUR_LOGISTICS, KONTUR_EDI, VSE_INSTRUMENTI, ELECTRONIC_SIGN | Нет | Маркетплейс акции |
isDeleted |
boolean | Нет | Идентификатор удаления |
description |
string | Нет | Описание акции |
promotionIdOnMp |
string | Нет | Идентификатор акции на МП |
clientId |
integer · int64 | Нет | Идентификатор клиента |
organizationId |
integer · int64 | Нет | Идентификатор организации |
candidateCount |
integer · int64 | Нет | Кол-во кандидатов в акцию |
inPromotionCount |
integer · int64 | Нет | Кол-во участников в акции |
auto |
boolean | Нет | Признак автоматической акции |
hotsale |
boolean | Нет | Признак hotsale акции |
candidateCountOnMp |
integer · int64 | Нет | Кол-во кандидатов в акции на маркетплейсе |
inPromotionCountOnMp |
integer · int64 | Нет | Кол-во участников в акции на маркетплейсе |
{
"promotionId": 1001,
"id": 1001,
"totalCount": 1,
"name": "Example",
"dateStart": "2026-01-15T12:00:00Z",
"dateEnd": "2026-01-15T12:00:00Z"
}Ошибки5
При ошибке проверьте HTTP-статус и тело ответа. Поле error содержит код ошибки, localMessage — сообщение для пользователя, params — дополнительные сведения. Обработка ошибок ↑
auth_requiredЗаголовок Authorization отсутствует, пуст или содержит недействительный токен.
error_access_deniedТокен существует, но его роль не позволяет выполнить операцию.
error_unknownНе удалось выполнить запрос из-за внутренней ошибки. Если запрос изменял данные, проверьте результат перед повторной отправкой. Для обращения в поддержку сохраните время запроса и полученный ответ.
error_cant_extract_tariffsПерсональная ошибка этого метода. Для программной логики используйте стабильный код error_cant_extract_tariffs; localMessage содержит приведённый выше перевод.
error_no_clientПерсональная ошибка этого метода. Для программной логики используйте стабильный код error_no_client; localMessage содержит приведённый выше перевод.
Восстановить акцию
/api/promotion/{promotionId}метод Восстанавливает акцию
Параметры пути
| Поле | Тип | Обязательно | Описание |
|---|---|---|---|
promotionId |
integer · int64 | Да | Поле promotionId. |
curl --request PATCH 'https://api.selsup.ru/api/promotion/1001' \
--header 'Authorization: YOUR_API_TOKEN'
const response = await fetch('https://api.selsup.ru/api/promotion/1001', {
method: 'PATCH',
headers: { Authorization: process.env.SELSUP_API_TOKEN },
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.error || 'selsup_request_failed');
}
const response: Response = await fetch('https://api.selsup.ru/api/promotion/1001', {
method: 'PATCH',
headers: { Authorization: process.env.SELSUP_API_TOKEN! },
});
if (!response.ok) {
const error = await response.json() as { error?: string };
throw new Error(error.error ?? 'selsup_request_failed');
}
import os
import requests
response = requests.patch(
'https://api.selsup.ru/api/promotion/1001',
headers={'Authorization': os.environ['SELSUP_API_TOKEN']},
)
response.raise_for_status()
<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => 'https://api.selsup.ru/api/promotion/1001',
CURLOPT_CUSTOMREQUEST => 'PATCH',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: ' . getenv('SELSUP_API_TOKEN')],
]);
$response = curl_exec($curl);
$status = curl_getinfo($curl, CURLINFO_HTTP_CODE);
curl_close($curl);
if ($response === false || $status >= 400) {
throw new RuntimeException($response ?: 'selsup_request_failed');
}
echo $response;
package main
import (
"fmt"
"io"
"net/http"
"os"
)
func main() {
req, err := http.NewRequest("PATCH", "https://api.selsup.ru/api/promotion/1001", nil)
if err != nil { panic(err) }
req.Header.Set("Authorization", os.Getenv("SELSUP_API_TOKEN"))
response, err := http.DefaultClient.Do(req)
if err != nil { panic(err) }
defer response.Body.Close()
result, _ := io.ReadAll(response.Body)
fmt.Printf("%d\n%s\n", response.StatusCode, result)
}
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class SelSupExample {
public static void main(String[] args) throws Exception {
HttpRequest request = HttpRequest.newBuilder(URI.create("https://api.selsup.ru/api/promotion/1001"))
.header("Authorization", System.getenv("SELSUP_API_TOKEN"))
.method("PATCH", HttpRequest.BodyPublishers.noBody())
.build();
HttpResponse<String> response = HttpClient.newHttpClient()
.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.statusCode());
System.out.println(response.body());
}
}
Успешный ответ
200Тело ответа пустое.
Ошибки3
При ошибке проверьте HTTP-статус и тело ответа. Поле error содержит код ошибки, localMessage — сообщение для пользователя, params — дополнительные сведения. Обработка ошибок ↑
auth_requiredЗаголовок Authorization отсутствует, пуст или содержит недействительный токен.
error_access_deniedТокен существует, но его роль не позволяет выполнить операцию.
error_unknownНе удалось выполнить запрос из-за внутренней ошибки. Если запрос изменял данные, проверьте результат перед повторной отправкой. Для обращения в поддержку сохраните время запроса и полученный ответ.
Удалить акцию
/api/promotion/{promotionId}Метод удаляет акцию
Параметры пути
| Поле | Тип | Обязательно | Описание |
|---|---|---|---|
promotionId |
integer · int64 | Да | Поле promotionId. |
curl --request DELETE 'https://api.selsup.ru/api/promotion/1001' \
--header 'Authorization: YOUR_API_TOKEN'
const response = await fetch('https://api.selsup.ru/api/promotion/1001', {
method: 'DELETE',
headers: { Authorization: process.env.SELSUP_API_TOKEN },
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.error || 'selsup_request_failed');
}
const response: Response = await fetch('https://api.selsup.ru/api/promotion/1001', {
method: 'DELETE',
headers: { Authorization: process.env.SELSUP_API_TOKEN! },
});
if (!response.ok) {
const error = await response.json() as { error?: string };
throw new Error(error.error ?? 'selsup_request_failed');
}
import os
import requests
response = requests.delete(
'https://api.selsup.ru/api/promotion/1001',
headers={'Authorization': os.environ['SELSUP_API_TOKEN']},
)
response.raise_for_status()
<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => 'https://api.selsup.ru/api/promotion/1001',
CURLOPT_CUSTOMREQUEST => 'DELETE',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: ' . getenv('SELSUP_API_TOKEN')],
]);
$response = curl_exec($curl);
$status = curl_getinfo($curl, CURLINFO_HTTP_CODE);
curl_close($curl);
if ($response === false || $status >= 400) {
throw new RuntimeException($response ?: 'selsup_request_failed');
}
echo $response;
package main
import (
"fmt"
"io"
"net/http"
"os"
)
func main() {
req, err := http.NewRequest("DELETE", "https://api.selsup.ru/api/promotion/1001", nil)
if err != nil { panic(err) }
req.Header.Set("Authorization", os.Getenv("SELSUP_API_TOKEN"))
response, err := http.DefaultClient.Do(req)
if err != nil { panic(err) }
defer response.Body.Close()
result, _ := io.ReadAll(response.Body)
fmt.Printf("%d\n%s\n", response.StatusCode, result)
}
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class SelSupExample {
public static void main(String[] args) throws Exception {
HttpRequest request = HttpRequest.newBuilder(URI.create("https://api.selsup.ru/api/promotion/1001"))
.header("Authorization", System.getenv("SELSUP_API_TOKEN"))
.method("DELETE", HttpRequest.BodyPublishers.noBody())
.build();
HttpResponse<String> response = HttpClient.newHttpClient()
.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.statusCode());
System.out.println(response.body());
}
}
Успешный ответ
200Тело ответа пустое.
Ошибки3
При ошибке проверьте HTTP-статус и тело ответа. Поле error содержит код ошибки, localMessage — сообщение для пользователя, params — дополнительные сведения. Обработка ошибок ↑
auth_requiredЗаголовок Authorization отсутствует, пуст или содержит недействительный токен.
error_access_deniedТокен существует, но его роль не позволяет выполнить операцию.
error_unknownНе удалось выполнить запрос из-за внутренней ошибки. Если запрос изменял данные, проверьте результат перед повторной отправкой. Для обращения в поддержку сохраните время запроса и полученный ответ.
Обновить данные
/api/promotion/update/{service}Метод ставит задачу обновления данных по акциям в очередь
Параметры пути
| Поле | Тип | Обязательно | Описание |
|---|---|---|---|
service |
stringNONE, WILDBERRIES, OZON, YANDEX_MARKET, FAMILIYA, NATIONAL_CATALOG, ALIEXPRESS, OTHER, MOY_SKLAD, SBER_MEGA_MARKET, CISLINK, ONE_C, AVITO, LEROY_MERLIN, DETMIR, KAZAN_EXPRESS, EVOTOR, WEBASYST, AMAZON, EBAY, SIMALAND, INSALES, LAMODA, OZON_PERFORMANCE, WALMART, GOOGLE, YANDEX_DISC, EMAIL, WOOCOMMERCE, MAGNIT, OPENCART, M_VIDEO, TAKEALOT, UZUM, SHOPIFY, MAKRO, YANDEX_KIT, BOB_SHOP, KASPI, DIADOC, TEKSHER, KONTUR_LOGISTICS, KONTUR_EDI, VSE_INSTRUMENTI, ELECTRONIC_SIGN | Да | Сервис |
Параметры запроса
| Поле | Тип | Обязательно | Описание |
|---|---|---|---|
organizationId |
integer · int64 | Нет | Поле organizationId. |
curl --request POST 'https://api.selsup.ru/api/promotion/update/NONE' \
--header 'Authorization: YOUR_API_TOKEN'
const response = await fetch('https://api.selsup.ru/api/promotion/update/NONE', {
method: 'POST',
headers: { Authorization: process.env.SELSUP_API_TOKEN },
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.error || 'selsup_request_failed');
}
const result = await response.json();
const response: Response = await fetch('https://api.selsup.ru/api/promotion/update/NONE', {
method: 'POST',
headers: { Authorization: process.env.SELSUP_API_TOKEN! },
});
if (!response.ok) {
const error = await response.json() as { error?: string };
throw new Error(error.error ?? 'selsup_request_failed');
}
const result: unknown = await response.json();
import os
import requests
response = requests.post(
'https://api.selsup.ru/api/promotion/update/NONE',
headers={'Authorization': os.environ['SELSUP_API_TOKEN']},
)
response.raise_for_status()
result = response.json()
<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => 'https://api.selsup.ru/api/promotion/update/NONE',
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: ' . getenv('SELSUP_API_TOKEN')],
]);
$response = curl_exec($curl);
$status = curl_getinfo($curl, CURLINFO_HTTP_CODE);
curl_close($curl);
if ($response === false || $status >= 400) {
throw new RuntimeException($response ?: 'selsup_request_failed');
}
echo $response;
package main
import (
"fmt"
"io"
"net/http"
"os"
)
func main() {
req, err := http.NewRequest("POST", "https://api.selsup.ru/api/promotion/update/NONE", nil)
if err != nil { panic(err) }
req.Header.Set("Authorization", os.Getenv("SELSUP_API_TOKEN"))
response, err := http.DefaultClient.Do(req)
if err != nil { panic(err) }
defer response.Body.Close()
result, _ := io.ReadAll(response.Body)
fmt.Printf("%d\n%s\n", response.StatusCode, result)
}
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class SelSupExample {
public static void main(String[] args) throws Exception {
HttpRequest request = HttpRequest.newBuilder(URI.create("https://api.selsup.ru/api/promotion/update/NONE"))
.header("Authorization", System.getenv("SELSUP_API_TOKEN"))
.method("POST", HttpRequest.BodyPublishers.noBody())
.build();
HttpResponse<String> response = HttpClient.newHttpClient()
.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.statusCode());
System.out.println(response.body());
}
}
Успешный ответ
200
Поля объекта
TmsTask
| Поле | Тип | Обязательно | Описание |
|---|---|---|---|
id |
integer · int64 | Нет | Идентификатор задачи |
status |
stringCREATED, RUNNING, FINISHED, ERROR, RESTARTING, INTERRUPTING, INTERRUPTED, STOPPED, EXCEPTION | Нет | Текущий статус задачи |
type |
stringWILDBERRIES_CREATE_CARD, NATIONAL_CATALOG_CREATE_CARD, OZON_CREATE_CARD, OZON_CARDS_IMPORT, IMPORT_FBS_ORDERS, UPLOAD_PHOTOGRAPHY, WILDBERRIES_UPDATE_PRICE, WILDBERRIES_CARD_IMPORT, WILDBERRIES_CARD_UPDATE, SELSUP_STOCKS, REFRESH_PHOTOGRAPHY, SUPPLYING_QUANTITY_TASK, EXPORT_PRICE, OZON_UPDATE_PRICE, WILDBERRIES_FILE_TASK, YANDEX_MARKET_CARD_CREATE, OZON_CARD_UPDATE_TASK, OZON_IMPORT_STAT_TASK, WILDBERRIES_PROFIT_STAT_TASK, ALIEXPRESS_CREATE_CARD_TASK, ALIEXPRESS_UPDATE_CARD_TASK, PRICES_IMPORT_TASK, WILDBERRIES_PRICES_TASK, YANDEX_MARKET_CARD_IMPORT, STOCKS_UPDATE, WILDBERRIES_STOCKS_IMPORT_TASK, WILDBERRIES_ORDERS_AND_SALES_TASK, WILDBERRIES_INCOMES_IMPORT_TASK, OZON_STOCKS_IMPORT_TASK, TURNOVER_DOCUMENTS_TASK, INTRODUCE_WMS_ITEMS_TASK, PRODUCTS_FILE_TASK, MODELS_FILE_TASK, UPDATE_PRODUCT_CODES_TASK, INTRODUCE_CODES_TASK, PRODUCTS_IMPORT_TASK, PRICES_FILE_TASK, YANDEX_MARKET_UPDATE_PRICE_TASK, IMPORT_STOCKS_TASK, MOY_SKLAD_EXPORT_ORDERS, MERGE_PRODUCTS_TASK, PRODUCTS_WILDBERRIES_EXCEL_IMPORT_TASK, MOY_SKLAD_CREATE_CARD, IMPORT_FBO_STOCKS_FROM_FILE, CREATE_WMS_ITEMS, MOY_SKLAD_CARDS_IMPORT, PROMOTION_FILE, UNUSED_1, UNUSED, PRODUCT_ANALYTICS_FILE_TASK, PROMOTION_RESET_FILE, MOY_SKLAD_IMPORT_ORDERS, FINANCE_REPORT_FILE_TASK, YML_FILE_EXPORT, PRODUCT_BALANCE_REPORT_FILE_TASK, CURRENT_PRODUCT_BALANCE_FILE_TASK, IMPORT_TRANSACTIONS, MATCH_UNREGISTERED_PROFIT_REPORT_TASK, UPDATE_AVERAGE_SERVICE_EXPENSES_TASK, YANDEX_MARKET_ORDER_IMPORT_STAT_TASK, ABC_REPORT_FILE_TASK, MODEL_CONTRACTORS_IMPORT, MODEL_CONTRACTORS_EXPORT, BANK_TRANSACTION_IMPORT_FILE_TASK, YML_IMPORT_TASK, SALES_DYNAMIC_REPORT_FILE_TASK, UPDATE_FBS_ORDERS, EXPORT_TRANSACTION_IN_EXCEL_FILE_TASK, IMPORT_TRANSACTION_FROM_EXCEL_FILE_TASK, EXPORT_PROFIT_REPORT_FILE_TASK, IMPORT_PROFIT_REPORT_FROM_EXCEL_FILE_TASK, IMPORT_REALIZATION_REPORT_TASK, STOCK_RECONCILIATION, ORDER_REPORT_FILE_TASK, GET_WB_FBO_ORDER_FROM_PROFIT_REPORT_TASK, TO_QUANTITY_STORAGE_METHOD, APPLY_RECONCILIATION, OZON_IMPORT_FBO_ORDERS_TASK, UPDATE_PURCHASE_PRICE_IN_PROFIT_REPORT_TASK, FBS_LABELS, MERGE_PRODUCT_STOCKS, CREATE_ORDER_FROM_FILE, ALIEXPRESS_CARD_IMPORT, PRICE_LIST_IMPORT, WB_STOCK_REPORT_FILE, CONTRACTORS_REPORT_FILE, PRODUCTS_SBER_MEGA_MARKET_EXCEL_IMPORT_TASK, EXPORT_PROBLEMATIC_PRODUCT_REPORT, PLAN_SUPPLY_REPORT_TASK, PLAN_FACT_SALES_REPORT_FILE, IMPORT_PLAN_SALES_FROM_EXCEL_FILE_TASK, EXPORT_PLAN_SALES_EXCEL_FILE_TASK, ORDERS_TO_BUY_FILE_TASK, MERGE_PRICE_ON_OTHER_MP_TASK, MATCH_PRODUCT_LAST_OPERATION_DATE_TASK, PROBLEMATIC_PRODUCT_PRICE_FILE_TASK, CATEGORIES_IMPORT_EXCEL_TASK, AVITO_CARD_IMPORT, UPDATE_OLD_WB_ORDER_STATUSES_TASK, PRESTA_SHOP_IMPORT_TASK, PRODUCTS_AVITO_EXCEL_IMPORT_TASK, FBO_STOCK_RECONCILIATION_TASK, APPLY_FBO_RECONCILIATION_TASK, EXPORT_REPRICE_PRODUCT_CONFIG_TASK, IMPORT_REPRICE_PRODUCT_CONFIG_TASK, OZON_CASH_FLOW_STATEMENT_IMPORT_TASK, IMPORT_PROMOTION_STRATEGY_FILE_TASK, UPDATE_ORDER_DELIVERY_INFO_TASK, BILLING_OPERATION_TASK, SET_PURCHASE_PERCENT_TASK, REMOVE_PRODUCT_IMAGES_TASK, STRUCTURE_TURNOVER_TASK, OZON_NEW_UPDATE_PRICE, REPLACE_PRODUCT_IMAGE_TASK, UPDATE_OZON_PROMOTION_DATA_TASK, WILDBERRIES_IMPORT_CAMPAIGN_TASK, WILDBERRIES_STORAGE_REPORT_TASK, WEBASYST_LINK_ARTICLE_TASK, DELIVERY_SERVICE_LABELS, HAND_ON_PULSE_FILE_TASK, ITEMS_INCOME_EXCEL_TASK, UPDATE_SETS_EXCEL_TASK, DELETE_PROFIT_REPORTS_BY_FILE_HISTORY_IDS_TASK, EXPORT_PRODUCT_SETS_TASK, AMAZON_CARD_IMPORT, IMPORT_ACCEPTED_PRODUCTS_TASK, ADD_ORDER_PRODUCT_FROM_FILE_TASK, EXPORT_ITEM_HISTORY_FILE_TASK, WILDBERRIES_IMPORT_CAMPAIGN_BY_EXCEL_TASK, REMOVE_CLIENT_ORGANIZATION, EBAY_CARD_IMPORT_TASK, PRODUCTS_IMPORT_FROM_ORGANIZATION_TASK, IMPORT_FBO_ORDERS, LAMODA_CARD_IMPORT, UPDATE_WB_PROMOTION_DATA_TASK, IMPORT_RETURNS_REPORT_TASK, UPDATE_PROMOTION_DATA_TASK, RESTORE_CLIENT_ORGANIZATION, LEROY_MERLIN_CARD_IMPORT, YANDEX_MARKET_STOCKS_IMPORT_TASK, WILDBERRIES_IMPORT_NM_REPORT_TASK, ORDER_ANALYTICS_FILE_TASK, CLIENT_DATABASE_MOVE_TASK, FAST_CARD_IMPORT, EXPORT_PRODUCT_CODE, INSALES_CARD_IMPORT_TASK, REMOVE_PRODUCT_VIDEOS_TASK, UPDATE_CARDS_TASK, FIND_UNPROFITABLE_PRODUCTS_TASK, FIND_UNPURCHASED_PRODUCTS_TASK, WALMART_CARD_IMPORT, PRODUCT_GROUPS_TASK, CONTRACTOR_ARTICLE_EXPORT_TASK, CONTRACTOR_ARTICLE_IMPORT_TASK, CURRENCY_CONVERSION_TASK, UPDATE_SUPPLY_PLAN_REPORT_TASK, EXPORT_SUPPLY_PLAN_REPORT_FILE_TASK, CHECK_STOCK_ORDER, PHOTOGRAPHY_EXCEL, PREPARE_FINDIR_DATA_TASK, CARD_SPLITTING_TASK, EXPORT_IMAGE_UPDATES_TEMPLATE_TASK, IMPORT_IMAGE_UPDATES_TASK, PREPARE_PRODUCT_HAND_ON_PULSE_TASK, UPDATE_OZON_AVERAGE_DELIVERY_TIME, UPDATE_COMMISSIONS_TASK, WOOCOMMERCE_CARD_IMPORT, UPDATE_FBS_STOCKS_HISTORY, RETURNS_FILE_TASK, FAST_PRODUCTS_IMPORT_TASK, ANALYZE_PRODUCT_CARDS_TASK, DETMIR_CARD_IMPORT, MATCH_OZON_REALIZATION_REPORT_TASK, MAGNIT_IMPORT_PRODUCTS_TASK, UPDATE_PURCHASE_PRICE_FROM_STOCKS_IN_PROFIT_REPORT_TASK, MOY_SKLAD_FBO_MP_DATES_FIX, PRICE_HISTORY_FILE_TASK, FBM_ORDERS_IMPORT_TASK, UZUM_IMPORT_PRODUCTS_TASK, OPENCART_CARD_IMPORT, CARDS_IMPORT, OZON_CROSSDOCK_TRANSIT_ROUTES_TASK, UNUSED_2, OZON_IMPORT_SALES_FUNNEL_REPORT_TASK, WRITE_OFF_PRODUCTS_FILE_TASK, CLIENT_DATABASE_CREATE_TASK, UPDATE_FBS_LABELS_TASK, REBUILD_PROFIT_REPORT_HOURLY_AGGREGATE_TASK, OZON_IMPORT_CAMPAIGN_TASK, EXPORT_SUPPLY_PLAN_FILE_TASK, IMPORT_SUPPLY_PLAN_FILE_TASK, CREATE_SERVICE_CARDS, WAREHOUSE_ECONOMICS_FILE_TASK, UPDATE_WILDBERRIES_ACQUIRING_RATE_TASK, PRODUCT_SALES_FORECAST_TASK, UPDATE_PRODUCT_CODES_STATUSES_TASK, MARKETPLACE_UPDATE_PRICE_TASK, UZUM_IMPORT_STAT_TASK, CAMPAIGN_STATS_FILE_TASK, OZON_FBO_WORKFLOW_TASK, EXPORT_CERTIFICATE_TEMPLATE_TASK, IMPORT_CERTIFICATES_TASK, REBUILD_LOCAL_ORDER_PROFIT_REPORT_TASK, SHOPIFY_CARD_IMPORT, EXPORT_PURCHASE_PLAN_FILE_TASK, RETAIL_ORDER_PRODUCTS_FILE_TASK, FULFILLMENT_BILLING_REGISTRY_FILE_TASK, SUPPLY_PLANNING_REPORT_FILE_TASK, REBUILD_TAX_BASE_HOURLY_AGGREGATE_TASK, PACK_ORDERS_TASK, IMPORT_ORDER_MARKING_CODES_TASK, PRODUCTION_ANALYTICS_FILE_TASK, CARD_REQUIREMENT_AI_TASK, CARD_REQUIREMENT_SCAN_TASK, SUPPLY_LABELS_FILE_TASK, TRANSFER_PRODUCTS_BETWEEN_SERVICES_TASK, RETIRE_SOLD_OUT_CARDS_TASK, WILDBERRIES_CARDS_JOIN_TASK | Нет | Тип задачи |
name |
string | Нет | Данные задачи в json - могут быть пустыми |
clientId |
integer · int64 | Нет | Поле clientId. |
entityId |
integer · int64 | Нет | Сущность, к которой относится задача |
progress |
integer · int32 | Нет | Прогресс выполнения задачи в процентах |
processedQuantity |
integer · int32 | Нет | Количество обработанных записей задачи |
organizationId |
integer · int64 | Нет | Организация задачи, может быть 0, если не зависит от организации |
priority |
integer · int32 | Нет | Приоритет задачи - чем выше тем быстрее задача запустится |
properties |
string | Нет | Параметры задачи |
message |
string | Нет | Сообщение с результатом выполнения задачи |
messageParams |
string | Нет | Параметры сообщения с результатом выполнения задачи |
createdDate |
string · date-time | Нет | Дата добавления задачи в очередь |
startDate |
string · date-time | Нет | Дата запуска задачи |
finishDate |
string · date-time | Нет | Дата завершения задачи |
url |
string | Нет | Ссылка на скачивание файла с результатом задачи |
inputFileUrl |
string | Нет | Ссылка на загруженный файл |
retryNumber |
integer · int32 | Нет | Счётчик перезапуска задачи. |
userId |
integer · int32 | Нет | Пользователь запустивший задачу |
retryDate |
string · date-time | Нет | Запланированная дата перезапуска |
debug |
boolean | Нет | Запуск задачи в режиме отладки с большим логированием |
forcedStart |
boolean | Нет | Ручной запуск задачи |
service |
stringNONE, WILDBERRIES, OZON, YANDEX_MARKET, FAMILIYA, NATIONAL_CATALOG, ALIEXPRESS, OTHER, MOY_SKLAD, SBER_MEGA_MARKET, CISLINK, ONE_C, AVITO, LEROY_MERLIN, DETMIR, KAZAN_EXPRESS, EVOTOR, WEBASYST, AMAZON, EBAY, SIMALAND, INSALES, LAMODA, OZON_PERFORMANCE, WALMART, GOOGLE, YANDEX_DISC, EMAIL, WOOCOMMERCE, MAGNIT, OPENCART, M_VIDEO, TAKEALOT, UZUM, SHOPIFY, MAKRO, YANDEX_KIT, BOB_SHOP, KASPI, DIADOC, TEKSHER, KONTUR_LOGISTICS, KONTUR_EDI, VSE_INSTRUMENTI, ELECTRONIC_SIGN | Нет | Сервис в рамках которого выполняется задача |
lang |
string | Нет | Язык на котором сейчас запущена таска |
{
"id": 1001,
"status": "CREATED",
"type": "WILDBERRIES_CREATE_CARD",
"name": "Example",
"clientId": 1001,
"entityId": 1001
}Ошибки71
При ошибке проверьте HTTP-статус и тело ответа. Поле error содержит код ошибки, localMessage — сообщение для пользователя, params — дополнительные сведения. Обработка ошибок ↑
auth_requiredЗаголовок Authorization отсутствует, пуст или содержит недействительный токен.
error_access_deniedТокен существует, но его роль не позволяет выполнить операцию.
error_unknownНе удалось выполнить запрос из-за внутренней ошибки. Если запрос изменял данные, проверьте результат перед повторной отправкой. Для обращения в поддержку сохраните время запроса и полученный ответ.
error_base_creatingПерсональная ошибка этого метода. Для программной логики используйте стабильный код error_base_creating; localMessage содержит приведённый выше перевод.
error_brand_to_foundПерсональная ошибка этого метода. Для программной логики используйте стабильный код error_brand_to_found; localMessage содержит приведённый выше перевод.
error_cabinet_access_deniedПерсональная ошибка этого метода. Для программной логики используйте стабильный код error_cabinet_access_denied; localMessage содержит приведённый выше перевод.
error_cabinet_context_unavailableПерсональная ошибка этого метода. Для программной логики используйте стабильный код error_cabinet_context_unavailable; localMessage содержит приведённый выше перевод.
error_cabinet_invitation_unavailableПерсональная ошибка этого метода. Для программной логики используйте стабильный код error_cabinet_invitation_unavailable; localMessage содержит приведённый выше перевод.
error_can_parse_requestПерсональная ошибка этого метода. Для программной логики используйте стабильный код error_can_parse_request; localMessage содержит приведённый выше перевод.
error_cannot_deleted_order_productПерсональная ошибка этого метода. Для программной логики используйте стабильный код error_cannot_deleted_order_product; localMessage содержит приведённый выше перевод.
error_cant_extract_tariffsПерсональная ошибка этого метода. Для программной логики используйте стабильный код error_cant_extract_tariffs; localMessage содержит приведённый выше перевод.
error_cant_receive_stocksПерсональная ошибка этого метода. Для программной логики используйте стабильный код error_cant_receive_stocks; localMessage содержит приведённый выше перевод.
error_competitor_id_requiredПерсональная ошибка этого метода. Для программной логики используйте стабильный код error_competitor_id_required; localMessage содержит приведённый выше перевод.
error_competitor_not_foundПерсональная ошибка этого метода. Для программной логики используйте стабильный код error_competitor_not_found; localMessage содержит приведённый выше перевод.
error_competitor_requiredПерсональная ошибка этого метода. Для программной логики используйте стабильный код error_competitor_required; localMessage содержит приведённый выше перевод.
error_competitor_url_requiredПерсональная ошибка этого метода. Для программной логики используйте стабильный код error_competitor_url_required; localMessage содержит приведённый выше перевод.
error_customer_not_foundПерсональная ошибка этого метода. Для программной логики используйте стабильный код error_customer_not_found; localMessage содержит приведённый выше перевод.
error_duplicate_order_productПерсональная ошибка этого метода. Для программной логики используйте стабильный код error_duplicate_order_product; localMessage содержит приведённый выше перевод.
error_empty_nameПерсональная ошибка этого метода. Для программной логики используйте стабильный код error_empty_name; localMessage содержит приведённый выше перевод.
error_empty_organizationПерсональная ошибка этого метода. Для программной логики используйте стабильный код error_empty_organization; localMessage содержит приведённый выше перевод.
error_empty_warehouseПерсональная ошибка этого метода. Для программной логики используйте стабильный код error_empty_warehouse; localMessage содержит приведённый выше перевод.
error_extension_invalid_configПерсональная ошибка этого метода. Для программной логики используйте стабильный код error_extension_invalid_config; localMessage содержит приведённый выше перевод.
error_extension_invalid_urlПерсональная ошибка этого метода. Для программной логики используйте стабильный код error_extension_invalid_url; localMessage содержит приведённый выше перевод.
error_extension_not_foundПерсональная ошибка этого метода. Для программной логики используйте стабильный код error_extension_not_found; localMessage содержит приведённый выше перевод.
error_extension_storage_errorПерсональная ошибка этого метода. Для программной логики используйте стабильный код error_extension_storage_error; localMessage содержит приведённый выше перевод.
error_fulfillment_client_access_deniedПерсональная ошибка этого метода. Для программной логики используйте стабильный код error_fulfillment_client_access_denied; localMessage содержит приведённый выше перевод.
error_fulfillment_client_contract_requiredПерсональная ошибка этого метода. Для программной логики используйте стабильный код error_fulfillment_client_contract_required; localMessage содержит приведённый выше перевод.
error_fulfillment_client_invalid_assignmentПерсональная ошибка этого метода. Для программной логики используйте стабильный код error_fulfillment_client_invalid_assignment; localMessage содержит приведённый выше перевод.
error_fulfillment_client_not_foundПерсональная ошибка этого метода. Для программной логики используйте стабильный код error_fulfillment_client_not_found; localMessage содержит приведённый выше перевод.
error_fulfillment_invalid_client_pricingПерсональная ошибка этого метода. Для программной логики используйте стабильный код error_fulfillment_invalid_client_pricing; localMessage содержит приведённый выше перевод.
error_fulfillment_request_invalidПерсональная ошибка этого метода. Для программной логики используйте стабильный код error_fulfillment_request_invalid; localMessage содержит приведённый выше перевод.
error_fulfillment_shipment_not_readyПерсональная ошибка этого метода. Для программной логики используйте стабильный код error_fulfillment_shipment_not_ready; localMessage содержит приведённый выше перевод.
error_group_already_existПерсональная ошибка этого метода. Для программной логики используйте стабильный код error_group_already_exist; localMessage содержит приведённый выше перевод.
error_incorrect_order_dataПерсональная ошибка этого метода. Для программной логики используйте стабильный код error_incorrect_order_data; localMessage содержит приведённый выше перевод.
error_integration_cell_mapping_invalidПерсональная ошибка этого метода. Для программной логики используйте стабильный код error_integration_cell_mapping_invalid; localMessage содержит приведённый выше перевод.
error_invalid_urlПерсональная ошибка этого метода. Для программной логики используйте стабильный код error_invalid_url; localMessage содержит приведённый выше перевод.
error_job_not_foundПерсональная ошибка этого метода. Для программной логики используйте стабильный код error_job_not_found; localMessage содержит приведённый выше перевод.
error_movement_requires_postingПерсональная ошибка этого метода. Для программной логики используйте стабильный код error_movement_requires_posting; localMessage содержит приведённый выше перевод.
error_moy_sklad_organizationПерсональная ошибка этого метода. Для программной логики используйте стабильный код error_moy_sklad_organization; localMessage содержит приведённый выше перевод.
error_ms_no_warehouseПерсональная ошибка этого метода. Для программной логики используйте стабильный код error_ms_no_warehouse; localMessage содержит приведённый выше перевод.
error_ms_update_order_stateПерсональная ошибка этого метода. Для программной логики используйте стабильный код error_ms_update_order_state; localMessage содержит приведённый выше перевод.
error_no_clientПерсональная ошибка этого метода. Для программной логики используйте стабильный код error_no_client; localMessage содержит приведённый выше перевод.
error_no_marketplaceПерсональная ошибка этого метода. Для программной логики используйте стабильный код error_no_marketplace; localMessage содержит приведённый выше перевод.
error_no_organizationПерсональная ошибка этого метода. Для программной логики используйте стабильный код error_no_organization; localMessage содержит приведённый выше перевод.
error_no_price_for_order_productПерсональная ошибка этого метода. Для программной логики используйте стабильный код error_no_price_for_order_product; localMessage содержит приведённый выше перевод.
error_no_products_in_orderПерсональная ошибка этого метода. Для программной логики используйте стабильный код error_no_products_in_order; localMessage содержит приведённый выше перевод.
error_no_quantity_for_order_productПерсональная ошибка этого метода. Для программной логики используйте стабильный код error_no_quantity_for_order_product; localMessage содержит приведённый выше перевод.
error_not_reservedПерсональная ошибка этого метода. Для программной логики используйте стабильный код error_not_reserved; localMessage содержит приведённый выше перевод.
error_not_uniq_external_idПерсональная ошибка этого метода. Для программной логики используйте стабильный код error_not_uniq_external_id; localMessage содержит приведённый выше перевод.
error_order_not_foundПерсональная ошибка этого метода. Для программной логики используйте стабильный код error_order_not_found; localMessage содержит приведённый выше перевод.
error_order_product_stockПерсональная ошибка этого метода. Для программной логики используйте стабильный код error_order_product_stock; localMessage содержит приведённый выше перевод.
error_order_revoked_status_changeПерсональная ошибка этого метода. Для программной логики используйте стабильный код error_order_revoked_status_change; localMessage содержит приведённый выше перевод.
error_organization_create_failedПерсональная ошибка этого метода. Для программной логики используйте стабильный код error_organization_create_failed; localMessage содержит приведённый выше перевод.
error_organization_existsПерсональная ошибка этого метода. Для программной логики используйте стабильный код error_organization_exists; localMessage содержит приведённый выше перевод.
error_organization_not_foundПерсональная ошибка этого метода. Для программной логики используйте стабильный код error_organization_not_found; localMessage содержит приведённый выше перевод.
error_product_not_found_by_idПерсональная ошибка этого метода. Для программной логики используйте стабильный код error_product_not_found_by_id; localMessage содержит приведённый выше перевод.
error_reloadПерсональная ошибка этого метода. Для программной логики используйте стабильный код error_reload; localMessage содержит приведённый выше перевод.
error_service_not_supportedПерсональная ошибка этого метода. Для программной логики используйте стабильный код error_service_not_supported; localMessage содержит приведённый выше перевод.
error_source_cell_change_not_allowed_for_inter_warehouse_movementПерсональная ошибка этого метода. Для программной логики используйте стабильный код error_source_cell_change_not_allowed_for_inter_warehouse_movement; localMessage содержит приведённый выше перевод.
error_stock_update_busyПерсональная ошибка этого метода. Для программной логики используйте стабильный код error_stock_update_busy; localMessage содержит приведённый выше перевод.
error_subscription_expiredПерсональная ошибка этого метода. Для программной логики используйте стабильный код error_subscription_expired; localMessage содержит приведённый выше перевод.
error_supply_not_foundПерсональная ошибка этого метода. Для программной логики используйте стабильный код error_supply_not_found; localMessage содержит приведённый выше перевод.
error_supply_transport_errorПерсональная ошибка этого метода. Для программной логики используйте стабильный код error_supply_transport_error; localMessage содержит приведённый выше перевод.
error_supply_transport_invalidПерсональная ошибка этого метода. Для программной логики используйте стабильный код error_supply_transport_invalid; localMessage содержит приведённый выше перевод.
error_supply_transport_not_availableПерсональная ошибка этого метода. Для программной логики используйте стабильный код error_supply_transport_not_available; localMessage содержит приведённый выше перевод.
error_supply_transport_requiredПерсональная ошибка этого метода. Для программной логики используйте стабильный код error_supply_transport_required; localMessage содержит приведённый выше перевод.
error_token_expired_or_revokedПерсональная ошибка этого метода. Для программной логики используйте стабильный код error_token_expired_or_revoked; localMessage содержит приведённый выше перевод.
error_unsupported_serviceПерсональная ошибка этого метода. Для программной логики используйте стабильный код error_unsupported_service; localMessage содержит приведённый выше перевод.
error_warehouse_not_foundПерсональная ошибка этого метода. Для программной логики используйте стабильный код error_warehouse_not_found; localMessage содержит приведённый выше перевод.
error_webhook_signing_failedПерсональная ошибка этого метода. Для программной логики используйте стабильный код error_webhook_signing_failed; localMessage содержит приведённый выше перевод.
error_wms_item_not_foundПерсональная ошибка этого метода. Для программной логики используйте стабильный код error_wms_item_not_found; localMessage содержит приведённый выше перевод.
Удалить товары из акции
/api/promotion/deleteProductsInPromotionМетод удаляет товары из акции
Параметры запроса
| Поле | Тип | Обязательно | Описание |
|---|---|---|---|
promotionId |
integer · int64 | Да | Поле promotionId. |
clientOrganizationId |
integer · int64 | Да | Поле clientOrganizationId. |
Тело запроса
application/jsonСтруктура элемента массиваProductPromotion[]
| Поле | Тип | Обязательно | Описание |
|---|---|---|---|
categoryName |
string | Нет | Категория |
brandName |
string | Нет | Бренд |
subject |
string | Нет | Поле subject. |
purchasePrice |
number · double | Нет | Поле purchasePrice. |
deliveryCost |
number · double | Нет | Поле deliveryCost. |
additionalCost |
number · double | Нет | Поле additionalCost. |
barcode |
string | Нет | Поле barcode. |
instockQuantity |
integer · int64 | Нет | Поле instockQuantity. |
wildberriesStockCount |
integer · int64 | Нет | Поле wildberriesStockCount. |
yandexMarketStockCount |
integer · int64 | Нет | Поле yandexMarketStockCount. |
createdDate |
string · date-time | Нет | Поле createdDate. |
minPrice |
number · double | Нет | Поле minPrice. |
isDuplicate |
boolean | Нет | Поле isDuplicate. |
ozonArticle |
string | Нет | Поле ozonArticle. |
ozonStockCount |
integer · int64 | Нет | Поле ozonStockCount. |
salesExpensesOnMpPercent |
number · double | Нет | Поле salesExpensesOnMpPercent. |
taxeRate |
number · double | Нет | Поле taxeRate. |
width |
integer · int32 | Нет | Поле width. |
height |
integer · int32 | Нет | Поле height. |
depth |
integer · int32 | Нет | Поле depth. |
ozonPurchasePercent |
number · double | Нет | Поле ozonPurchasePercent. |
warehouseRatio |
number · double | Нет | Поле warehouseRatio. |
wildberriesCommission |
number · double | Нет | Комиссия по тарифу FBM |
wildberriesFbwCommission |
number · double | Нет | Комиссия по тарифу FBW |
wildberriesFbsCommission |
number · double | Нет | Комиссия по тарифу FBS |
wildberriesDbsCommission |
number · double | Нет | Комиссия по тарифу DBS |
wildberriesEdbsCommission |
number · double | Нет | Комиссия по тарифу EDBS |
wildberriesCAndCCommission |
number · double | Нет | Комиссия по тарифу C&C |
wildberriesBookingCommission |
number · double | Нет | Комиссия за бронирование |
wildberriesAdditionalExpenses |
number · double | Нет | Поле wildberriesAdditionalExpenses. |
ozonAdditionalExpenses |
number · double | Нет | Поле ozonAdditionalExpenses. |
ozonCommission |
number · double | Нет | Поле ozonCommission. |
wildberriesId |
integer · int64 | Нет | Поле wildberriesId. |
productId |
integer · int64 | Нет | Идентификатор продукта |
promotionId |
integer · int64 | Нет | Идентификатор акции |
ozonFbsCommission |
number · double | Нет | Озон ФБС комиссия |
ozonFboCommission |
number · double | Нет | Озон ФБО комиссия |
service |
stringNONE, WILDBERRIES, OZON, YANDEX_MARKET, FAMILIYA, NATIONAL_CATALOG, ALIEXPRESS, OTHER, MOY_SKLAD, SBER_MEGA_MARKET, CISLINK, ONE_C, AVITO, LEROY_MERLIN, DETMIR, KAZAN_EXPRESS, EVOTOR, WEBASYST, AMAZON, EBAY, SIMALAND, INSALES, LAMODA, OZON_PERFORMANCE, WALMART, GOOGLE, YANDEX_DISC, EMAIL, WOOCOMMERCE, MAGNIT, OPENCART, M_VIDEO, TAKEALOT, UZUM, SHOPIFY, MAKRO, YANDEX_KIT, BOB_SHOP, KASPI, DIADOC, TEKSHER, KONTUR_LOGISTICS, KONTUR_EDI, VSE_INSTRUMENTI, ELECTRONIC_SIGN | Нет | Сервис |
acquiringPercent |
number · double | Нет | Максимальный процент комиссии за эквайринг |
currentPrice |
number · double | Нет | Текущая цена со скидкой |
currentPriceWithoutDiscount |
number · double | Нет | Текущая цена без скидкой |
plannedPrice |
number · double | Нет | Планируемая цена под акцию |
totalStockCount |
integer · int64 | Нет | Поле totalStockCount. |
commissionReduction |
number · double | Нет | Поле commissionReduction. |
profitDifference |
number · double | Нет | Поле profitDifference. |
marginDifference |
number · double | Нет | Поле marginDifference. |
markupDifference |
number · double | Нет | Поле markupDifference. |
plannedAndMinPriceDiff |
number · double | Нет | Поле plannedAndMinPriceDiff. |
incomeDifference |
number · double | Нет | Поле incomeDifference. |
currentDiscount |
number · double | Нет | Поле currentDiscount. |
productCreatedDate |
string · date-time | Нет | Поле productCreatedDate. |
mainImageUrl |
string | Нет | Ссылка на основное изображение |
isProfitably |
boolean | Нет | Поле isProfitably. |
taskId |
integer · int64 | Нет | Идентификатор задачи |
serviceArticle |
string | Нет | Артикул на сервисе |
article |
string | Нет | Модель артикул |
daysCountOnService |
integer · int32 | Нет | Кол-во дней на сервисе |
turnover |
integer · int32 | Нет | Оборачиваемость |
fboStock |
integer · int32 | Нет | ФБО остаток |
fbsStock |
integer · int32 | Нет | ФБС остаток |
newDiscountForPromotion |
number · double | Нет | Поле newDiscountForPromotion. |
saleLogistics |
number · double | Нет | Логистика при продаже |
returnLogistics |
number · double | Нет | Обратная логистика |
purchasePercent |
number · double | Нет | Процент выкупа |
totalLogistics |
number · double | Нет | Логистика |
commissions |
number · double | Нет | Комиссия |
currentProfit |
number · double | Нет | Текущая прибыль |
promotionProfit |
number · double | Нет | Прибыль под акцию |
currentMarginality |
number · double | Нет | Текущая маржинальность |
promotionMarginality |
number · double | Нет | Маржинальность под акцию |
currentMarkUp |
number · double | Нет | Текущая наценка |
promotionMarkUp |
number · double | Нет | Наценка под акцию |
additionalDiscountForPromotionRub |
number · double | Нет | Дополнительная скидка под акции в руб |
additionalDiscountForPromotionPercent |
number · double | Нет | Дополнительная скидка под акции в % |
isDeleted |
boolean | Нет | Удаленный? |
organizationId |
integer · int64 | Нет | Идентификатор организации |
clientId |
integer · int64 | Нет | Идентификатор клиента |
addMode |
string | Нет | Тип добавления товара в акцию: автоматически или вручную продавцом. |
ozonAverageExpenses |
number · double | Нет | Поле ozonAverageExpenses. |
isActive |
boolean | Нет | Товар в акции или нет |
changeName |
string | Нет | Кто вносил корректировки |
changeDate |
string · date-time | Нет | Дата когда вносили изменения |
productName |
string | Нет | Название продукта |
id |
integer · int64 | Нет | Порядковый номер в общем списке, для фронта |
totalCount |
integer · int64 | Нет | Общее кол-во |
serviceCard |
string | Нет | Идентификатор продукта на сервисе |
isNotFound |
boolean | Нет | Поле isNotFound. |
isArchived |
boolean | Нет | Поле isArchived. |
productCommissions |
string | Нет | Поле productCommissions. |
currentGrossProfit |
number · double | Нет | Валовая прибыль текущая (без акции), руб |
plannedGrossProfit |
number · double | Нет | Валовая прибыль под акцию (с акцией), руб |
promotionName |
string | Нет | Название акции |
promotionDateEnd |
string · date-time | Нет | Дата и время окончания акции |
promotionDateStart |
string · date-time | Нет | Дата и время начала акции |
promotionIsDeleted |
boolean | Нет | Признак удаления акции |
curl --request POST 'https://api.selsup.ru/api/promotion/deleteProductsInPromotion?promotionId=1001&clientOrganizationId=1001' \
--header 'Authorization: YOUR_API_TOKEN' \
--header 'Content-Type: application/json' \
--data '[
"string"
]'
const response = await fetch('https://api.selsup.ru/api/promotion/deleteProductsInPromotion?promotionId=1001&clientOrganizationId=1001', {
method: 'POST',
headers: {
Authorization: process.env.SELSUP_API_TOKEN,
'Content-Type': 'application/json',
},
body: JSON.stringify([
"string"
]),
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.error || 'selsup_request_failed');
}
const result = await response.json();
const response: Response = await fetch('https://api.selsup.ru/api/promotion/deleteProductsInPromotion?promotionId=1001&clientOrganizationId=1001', {
method: 'POST',
headers: {
Authorization: process.env.SELSUP_API_TOKEN!,
'Content-Type': 'application/json',
},
body: JSON.stringify([
"string"
]),
});
if (!response.ok) {
const error = await response.json() as { error?: string };
throw new Error(error.error ?? 'selsup_request_failed');
}
const result: unknown = await response.json();
import os
import requests
response = requests.post(
'https://api.selsup.ru/api/promotion/deleteProductsInPromotion?promotionId=1001&clientOrganizationId=1001',
headers={'Authorization': os.environ['SELSUP_API_TOKEN']},
json=[
'string'
],
)
response.raise_for_status()
result = response.json()
<?php
$payload = <<<'JSON'
[
"string"
]
JSON;
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => 'https://api.selsup.ru/api/promotion/deleteProductsInPromotion?promotionId=1001&clientOrganizationId=1001',
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: ' . getenv('SELSUP_API_TOKEN'), 'Content-Type: application/json'],
CURLOPT_POSTFIELDS => $payload,
]);
$response = curl_exec($curl);
$status = curl_getinfo($curl, CURLINFO_HTTP_CODE);
curl_close($curl);
if ($response === false || $status >= 400) {
throw new RuntimeException($response ?: 'selsup_request_failed');
}
echo $response;
package main
import (
"fmt"
"io"
"net/http"
"os"
"strings"
)
func main() {
req, err := http.NewRequest("POST", "https://api.selsup.ru/api/promotion/deleteProductsInPromotion?promotionId=1001&clientOrganizationId=1001", strings.NewReader(`[
"string"
]`))
if err != nil { panic(err) }
req.Header.Set("Authorization", os.Getenv("SELSUP_API_TOKEN"))
req.Header.Set("Content-Type", "application/json")
response, err := http.DefaultClient.Do(req)
if err != nil { panic(err) }
defer response.Body.Close()
result, _ := io.ReadAll(response.Body)
fmt.Printf("%d\n%s\n", response.StatusCode, result)
}
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class SelSupExample {
public static void main(String[] args) throws Exception {
HttpRequest request = HttpRequest.newBuilder(URI.create("https://api.selsup.ru/api/promotion/deleteProductsInPromotion?promotionId=1001&clientOrganizationId=1001"))
.header("Authorization", System.getenv("SELSUP_API_TOKEN"))
.header("Content-Type", "application/json")
.method("POST", HttpRequest.BodyPublishers.ofString("""
[
"string"
]
"""))
.build();
HttpResponse<String> response = HttpClient.newHttpClient()
.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.statusCode());
System.out.println(response.body());
}
}
Успешный ответ
200
Структура элемента массива
OzonProduct[]
| Поле | Тип | Обязательно | Описание |
|---|---|---|---|
product_id |
integer · int64 | Нет | Идентификатор товара. |
action_price |
number · double | Нет | Цена товара по акции. |
stock |
integer · int32 | Нет | Количество единиц товара в акции типа «Скидка на сток». |
reason |
string | Нет | Причина, почему товар не добавлен в акцию. |
[
"string"
]Ошибки11
При ошибке проверьте HTTP-статус и тело ответа. Поле error содержит код ошибки, localMessage — сообщение для пользователя, params — дополнительные сведения. Обработка ошибок ↑
auth_requiredЗаголовок Authorization отсутствует, пуст или содержит недействительный токен.
error_access_deniedТокен существует, но его роль не позволяет выполнить операцию.
error_unknownНе удалось выполнить запрос из-за внутренней ошибки. Если запрос изменял данные, проверьте результат перед повторной отправкой. Для обращения в поддержку сохраните время запроса и полученный ответ.
error_cant_extract_tariffsПерсональная ошибка этого метода. Для программной логики используйте стабильный код error_cant_extract_tariffs; localMessage содержит приведённый выше перевод.
error_no_clientПерсональная ошибка этого метода. Для программной логики используйте стабильный код error_no_client; localMessage содержит приведённый выше перевод.
error_organization_not_foundПерсональная ошибка этого метода. Для программной логики используйте стабильный код error_organization_not_found; localMessage содержит приведённый выше перевод.
error_promotion_not_foundПерсональная ошибка этого метода. Для программной логики используйте стабильный код error_promotion_not_found; localMessage содержит приведённый выше перевод.
error_promotion_remove_not_confirmedПерсональная ошибка этого метода. Для программной логики используйте стабильный код error_promotion_remove_not_confirmed; localMessage содержит приведённый выше перевод.
error_promotion_remove_not_supportedПерсональная ошибка этого метода. Для программной логики используйте стабильный код error_promotion_remove_not_supported; localMessage содержит приведённый выше перевод.
error_remoteПерсональная ошибка этого метода. Для программной логики используйте стабильный код error_remote; localMessage содержит приведённый выше перевод.
error_token_expired_or_revokedПерсональная ошибка этого метода. Для программной логики используйте стабильный код error_token_expired_or_revoked; localMessage содержит приведённый выше перевод.
Добавить товары в акцию
/api/promotion/addProductsInPromotionМетод добавляет товары в акцию
Параметры запроса
| Поле | Тип | Обязательно | Описание |
|---|---|---|---|
promotionId |
integer · int64 | Да | Поле promotionId. |
clientOrganizationId |
integer · int64 | Да | Поле clientOrganizationId. |
replaceOthers |
boolean | Нет | Поле replaceOthers. |
Тело запроса
application/jsonСтруктура элемента массиваProductPromotion[]
| Поле | Тип | Обязательно | Описание |
|---|---|---|---|
categoryName |
string | Нет | Категория |
brandName |
string | Нет | Бренд |
subject |
string | Нет | Поле subject. |
purchasePrice |
number · double | Нет | Поле purchasePrice. |
deliveryCost |
number · double | Нет | Поле deliveryCost. |
additionalCost |
number · double | Нет | Поле additionalCost. |
barcode |
string | Нет | Поле barcode. |
instockQuantity |
integer · int64 | Нет | Поле instockQuantity. |
wildberriesStockCount |
integer · int64 | Нет | Поле wildberriesStockCount. |
yandexMarketStockCount |
integer · int64 | Нет | Поле yandexMarketStockCount. |
createdDate |
string · date-time | Нет | Поле createdDate. |
minPrice |
number · double | Нет | Поле minPrice. |
isDuplicate |
boolean | Нет | Поле isDuplicate. |
ozonArticle |
string | Нет | Поле ozonArticle. |
ozonStockCount |
integer · int64 | Нет | Поле ozonStockCount. |
salesExpensesOnMpPercent |
number · double | Нет | Поле salesExpensesOnMpPercent. |
taxeRate |
number · double | Нет | Поле taxeRate. |
width |
integer · int32 | Нет | Поле width. |
height |
integer · int32 | Нет | Поле height. |
depth |
integer · int32 | Нет | Поле depth. |
ozonPurchasePercent |
number · double | Нет | Поле ozonPurchasePercent. |
warehouseRatio |
number · double | Нет | Поле warehouseRatio. |
wildberriesCommission |
number · double | Нет | Комиссия по тарифу FBM |
wildberriesFbwCommission |
number · double | Нет | Комиссия по тарифу FBW |
wildberriesFbsCommission |
number · double | Нет | Комиссия по тарифу FBS |
wildberriesDbsCommission |
number · double | Нет | Комиссия по тарифу DBS |
wildberriesEdbsCommission |
number · double | Нет | Комиссия по тарифу EDBS |
wildberriesCAndCCommission |
number · double | Нет | Комиссия по тарифу C&C |
wildberriesBookingCommission |
number · double | Нет | Комиссия за бронирование |
wildberriesAdditionalExpenses |
number · double | Нет | Поле wildberriesAdditionalExpenses. |
ozonAdditionalExpenses |
number · double | Нет | Поле ozonAdditionalExpenses. |
ozonCommission |
number · double | Нет | Поле ozonCommission. |
wildberriesId |
integer · int64 | Нет | Поле wildberriesId. |
productId |
integer · int64 | Нет | Идентификатор продукта |
promotionId |
integer · int64 | Нет | Идентификатор акции |
ozonFbsCommission |
number · double | Нет | Озон ФБС комиссия |
ozonFboCommission |
number · double | Нет | Озон ФБО комиссия |
service |
stringNONE, WILDBERRIES, OZON, YANDEX_MARKET, FAMILIYA, NATIONAL_CATALOG, ALIEXPRESS, OTHER, MOY_SKLAD, SBER_MEGA_MARKET, CISLINK, ONE_C, AVITO, LEROY_MERLIN, DETMIR, KAZAN_EXPRESS, EVOTOR, WEBASYST, AMAZON, EBAY, SIMALAND, INSALES, LAMODA, OZON_PERFORMANCE, WALMART, GOOGLE, YANDEX_DISC, EMAIL, WOOCOMMERCE, MAGNIT, OPENCART, M_VIDEO, TAKEALOT, UZUM, SHOPIFY, MAKRO, YANDEX_KIT, BOB_SHOP, KASPI, DIADOC, TEKSHER, KONTUR_LOGISTICS, KONTUR_EDI, VSE_INSTRUMENTI, ELECTRONIC_SIGN | Нет | Сервис |
acquiringPercent |
number · double | Нет | Максимальный процент комиссии за эквайринг |
currentPrice |
number · double | Нет | Текущая цена со скидкой |
currentPriceWithoutDiscount |
number · double | Нет | Текущая цена без скидкой |
plannedPrice |
number · double | Нет | Планируемая цена под акцию |
totalStockCount |
integer · int64 | Нет | Поле totalStockCount. |
commissionReduction |
number · double | Нет | Поле commissionReduction. |
profitDifference |
number · double | Нет | Поле profitDifference. |
marginDifference |
number · double | Нет | Поле marginDifference. |
markupDifference |
number · double | Нет | Поле markupDifference. |
plannedAndMinPriceDiff |
number · double | Нет | Поле plannedAndMinPriceDiff. |
incomeDifference |
number · double | Нет | Поле incomeDifference. |
currentDiscount |
number · double | Нет | Поле currentDiscount. |
productCreatedDate |
string · date-time | Нет | Поле productCreatedDate. |
mainImageUrl |
string | Нет | Ссылка на основное изображение |
isProfitably |
boolean | Нет | Поле isProfitably. |
taskId |
integer · int64 | Нет | Идентификатор задачи |
serviceArticle |
string | Нет | Артикул на сервисе |
article |
string | Нет | Модель артикул |
daysCountOnService |
integer · int32 | Нет | Кол-во дней на сервисе |
turnover |
integer · int32 | Нет | Оборачиваемость |
fboStock |
integer · int32 | Нет | ФБО остаток |
fbsStock |
integer · int32 | Нет | ФБС остаток |
newDiscountForPromotion |
number · double | Нет | Поле newDiscountForPromotion. |
saleLogistics |
number · double | Нет | Логистика при продаже |
returnLogistics |
number · double | Нет | Обратная логистика |
purchasePercent |
number · double | Нет | Процент выкупа |
totalLogistics |
number · double | Нет | Логистика |
commissions |
number · double | Нет | Комиссия |
currentProfit |
number · double | Нет | Текущая прибыль |
promotionProfit |
number · double | Нет | Прибыль под акцию |
currentMarginality |
number · double | Нет | Текущая маржинальность |
promotionMarginality |
number · double | Нет | Маржинальность под акцию |
currentMarkUp |
number · double | Нет | Текущая наценка |
promotionMarkUp |
number · double | Нет | Наценка под акцию |
additionalDiscountForPromotionRub |
number · double | Нет | Дополнительная скидка под акции в руб |
additionalDiscountForPromotionPercent |
number · double | Нет | Дополнительная скидка под акции в % |
isDeleted |
boolean | Нет | Удаленный? |
organizationId |
integer · int64 | Нет | Идентификатор организации |
clientId |
integer · int64 | Нет | Идентификатор клиента |
addMode |
string | Нет | Тип добавления товара в акцию: автоматически или вручную продавцом. |
ozonAverageExpenses |
number · double | Нет | Поле ozonAverageExpenses. |
isActive |
boolean | Нет | Товар в акции или нет |
changeName |
string | Нет | Кто вносил корректировки |
changeDate |
string · date-time | Нет | Дата когда вносили изменения |
productName |
string | Нет | Название продукта |
id |
integer · int64 | Нет | Порядковый номер в общем списке, для фронта |
totalCount |
integer · int64 | Нет | Общее кол-во |
serviceCard |
string | Нет | Идентификатор продукта на сервисе |
isNotFound |
boolean | Нет | Поле isNotFound. |
isArchived |
boolean | Нет | Поле isArchived. |
productCommissions |
string | Нет | Поле productCommissions. |
currentGrossProfit |
number · double | Нет | Валовая прибыль текущая (без акции), руб |
plannedGrossProfit |
number · double | Нет | Валовая прибыль под акцию (с акцией), руб |
promotionName |
string | Нет | Название акции |
promotionDateEnd |
string · date-time | Нет | Дата и время окончания акции |
promotionDateStart |
string · date-time | Нет | Дата и время начала акции |
promotionIsDeleted |
boolean | Нет | Признак удаления акции |
curl --request POST 'https://api.selsup.ru/api/promotion/addProductsInPromotion?promotionId=1001&clientOrganizationId=1001' \
--header 'Authorization: YOUR_API_TOKEN' \
--header 'Content-Type: application/json' \
--data '[
"string"
]'
const response = await fetch('https://api.selsup.ru/api/promotion/addProductsInPromotion?promotionId=1001&clientOrganizationId=1001', {
method: 'POST',
headers: {
Authorization: process.env.SELSUP_API_TOKEN,
'Content-Type': 'application/json',
},
body: JSON.stringify([
"string"
]),
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.error || 'selsup_request_failed');
}
const result = await response.json();
const response: Response = await fetch('https://api.selsup.ru/api/promotion/addProductsInPromotion?promotionId=1001&clientOrganizationId=1001', {
method: 'POST',
headers: {
Authorization: process.env.SELSUP_API_TOKEN!,
'Content-Type': 'application/json',
},
body: JSON.stringify([
"string"
]),
});
if (!response.ok) {
const error = await response.json() as { error?: string };
throw new Error(error.error ?? 'selsup_request_failed');
}
const result: unknown = await response.json();
import os
import requests
response = requests.post(
'https://api.selsup.ru/api/promotion/addProductsInPromotion?promotionId=1001&clientOrganizationId=1001',
headers={'Authorization': os.environ['SELSUP_API_TOKEN']},
json=[
'string'
],
)
response.raise_for_status()
result = response.json()
<?php
$payload = <<<'JSON'
[
"string"
]
JSON;
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => 'https://api.selsup.ru/api/promotion/addProductsInPromotion?promotionId=1001&clientOrganizationId=1001',
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: ' . getenv('SELSUP_API_TOKEN'), 'Content-Type: application/json'],
CURLOPT_POSTFIELDS => $payload,
]);
$response = curl_exec($curl);
$status = curl_getinfo($curl, CURLINFO_HTTP_CODE);
curl_close($curl);
if ($response === false || $status >= 400) {
throw new RuntimeException($response ?: 'selsup_request_failed');
}
echo $response;
package main
import (
"fmt"
"io"
"net/http"
"os"
"strings"
)
func main() {
req, err := http.NewRequest("POST", "https://api.selsup.ru/api/promotion/addProductsInPromotion?promotionId=1001&clientOrganizationId=1001", strings.NewReader(`[
"string"
]`))
if err != nil { panic(err) }
req.Header.Set("Authorization", os.Getenv("SELSUP_API_TOKEN"))
req.Header.Set("Content-Type", "application/json")
response, err := http.DefaultClient.Do(req)
if err != nil { panic(err) }
defer response.Body.Close()
result, _ := io.ReadAll(response.Body)
fmt.Printf("%d\n%s\n", response.StatusCode, result)
}
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class SelSupExample {
public static void main(String[] args) throws Exception {
HttpRequest request = HttpRequest.newBuilder(URI.create("https://api.selsup.ru/api/promotion/addProductsInPromotion?promotionId=1001&clientOrganizationId=1001"))
.header("Authorization", System.getenv("SELSUP_API_TOKEN"))
.header("Content-Type", "application/json")
.method("POST", HttpRequest.BodyPublishers.ofString("""
[
"string"
]
"""))
.build();
HttpResponse<String> response = HttpClient.newHttpClient()
.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.statusCode());
System.out.println(response.body());
}
}
Успешный ответ
200
Структура элемента массива
OzonProduct[]
| Поле | Тип | Обязательно | Описание |
|---|---|---|---|
product_id |
integer · int64 | Нет | Идентификатор товара. |
action_price |
number · double | Нет | Цена товара по акции. |
stock |
integer · int32 | Нет | Количество единиц товара в акции типа «Скидка на сток». |
reason |
string | Нет | Причина, почему товар не добавлен в акцию. |
[
"string"
]Ошибки3
При ошибке проверьте HTTP-статус и тело ответа. Поле error содержит код ошибки, localMessage — сообщение для пользователя, params — дополнительные сведения. Обработка ошибок ↑
auth_requiredЗаголовок Authorization отсутствует, пуст или содержит недействительный токен.
error_access_deniedТокен существует, но его роль не позволяет выполнить операцию.
error_unknownНе удалось выполнить запрос из-за внутренней ошибки. Если запрос изменял данные, проверьте результат перед повторной отправкой. Для обращения в поддержку сохраните время запроса и полученный ответ.
Создать акцию
/api/promotion/Метод создает акцию
Тело запроса
application/jsonПоля объектаPromotion
| Поле | Тип | Обязательно | Описание |
|---|---|---|---|
promotionId |
integer · int64 | Нет | Идентификатор акции |
id |
integer · int64 | Нет | Порядковый номер в списке запроса |
totalCount |
integer · int64 | Нет | Общее кол-во акций |
name |
string | Нет | Название акции |
dateStart |
string · date-time | Нет | Дата и время начало |
dateEnd |
string · date-time | Нет | Дата и время окончания |
changeCommission |
boolean | Нет | Меняется ли комиссия или нет |
changeCommissionAmount |
number · double | Нет | На какой процент сокращается комиссия |
createdDate |
string · date-time | Нет | Дата создания |
service |
stringNONE, WILDBERRIES, OZON, YANDEX_MARKET, FAMILIYA, NATIONAL_CATALOG, ALIEXPRESS, OTHER, MOY_SKLAD, SBER_MEGA_MARKET, CISLINK, ONE_C, AVITO, LEROY_MERLIN, DETMIR, KAZAN_EXPRESS, EVOTOR, WEBASYST, AMAZON, EBAY, SIMALAND, INSALES, LAMODA, OZON_PERFORMANCE, WALMART, GOOGLE, YANDEX_DISC, EMAIL, WOOCOMMERCE, MAGNIT, OPENCART, M_VIDEO, TAKEALOT, UZUM, SHOPIFY, MAKRO, YANDEX_KIT, BOB_SHOP, KASPI, DIADOC, TEKSHER, KONTUR_LOGISTICS, KONTUR_EDI, VSE_INSTRUMENTI, ELECTRONIC_SIGN | Нет | Маркетплейс акции |
isDeleted |
boolean | Нет | Идентификатор удаления |
description |
string | Нет | Описание акции |
promotionIdOnMp |
string | Нет | Идентификатор акции на МП |
clientId |
integer · int64 | Нет | Идентификатор клиента |
organizationId |
integer · int64 | Нет | Идентификатор организации |
candidateCount |
integer · int64 | Нет | Кол-во кандидатов в акцию |
inPromotionCount |
integer · int64 | Нет | Кол-во участников в акции |
auto |
boolean | Нет | Признак автоматической акции |
hotsale |
boolean | Нет | Признак hotsale акции |
candidateCountOnMp |
integer · int64 | Нет | Кол-во кандидатов в акции на маркетплейсе |
inPromotionCountOnMp |
integer · int64 | Нет | Кол-во участников в акции на маркетплейсе |
curl --request POST 'https://api.selsup.ru/api/promotion/' \
--header 'Authorization: YOUR_API_TOKEN' \
--header 'Content-Type: application/json' \
--data '{
"promotionId": 1001,
"id": 1001,
"totalCount": 1,
"name": "Example",
"dateStart": "2026-01-15T12:00:00Z",
"dateEnd": "2026-01-15T12:00:00Z"
}'
const response = await fetch('https://api.selsup.ru/api/promotion/', {
method: 'POST',
headers: {
Authorization: process.env.SELSUP_API_TOKEN,
'Content-Type': 'application/json',
},
body: JSON.stringify({
"promotionId": 1001,
"id": 1001,
"totalCount": 1,
"name": "Example",
"dateStart": "2026-01-15T12:00:00Z",
"dateEnd": "2026-01-15T12:00:00Z"
}),
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.error || 'selsup_request_failed');
}
const result = await response.json();
const response: Response = await fetch('https://api.selsup.ru/api/promotion/', {
method: 'POST',
headers: {
Authorization: process.env.SELSUP_API_TOKEN!,
'Content-Type': 'application/json',
},
body: JSON.stringify({
"promotionId": 1001,
"id": 1001,
"totalCount": 1,
"name": "Example",
"dateStart": "2026-01-15T12:00:00Z",
"dateEnd": "2026-01-15T12:00:00Z"
}),
});
if (!response.ok) {
const error = await response.json() as { error?: string };
throw new Error(error.error ?? 'selsup_request_failed');
}
const result: unknown = await response.json();
import os
import requests
response = requests.post(
'https://api.selsup.ru/api/promotion/',
headers={'Authorization': os.environ['SELSUP_API_TOKEN']},
json={
'promotionId': 1001,
'id': 1001,
'totalCount': 1,
'name': 'Example',
'dateStart': '2026-01-15T12:00:00Z',
'dateEnd': '2026-01-15T12:00:00Z'
},
)
response.raise_for_status()
result = response.json()
<?php
$payload = <<<'JSON'
{
"promotionId": 1001,
"id": 1001,
"totalCount": 1,
"name": "Example",
"dateStart": "2026-01-15T12:00:00Z",
"dateEnd": "2026-01-15T12:00:00Z"
}
JSON;
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => 'https://api.selsup.ru/api/promotion/',
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: ' . getenv('SELSUP_API_TOKEN'), 'Content-Type: application/json'],
CURLOPT_POSTFIELDS => $payload,
]);
$response = curl_exec($curl);
$status = curl_getinfo($curl, CURLINFO_HTTP_CODE);
curl_close($curl);
if ($response === false || $status >= 400) {
throw new RuntimeException($response ?: 'selsup_request_failed');
}
echo $response;
package main
import (
"fmt"
"io"
"net/http"
"os"
"strings"
)
func main() {
req, err := http.NewRequest("POST", "https://api.selsup.ru/api/promotion/", strings.NewReader(`{
"promotionId": 1001,
"id": 1001,
"totalCount": 1,
"name": "Example",
"dateStart": "2026-01-15T12:00:00Z",
"dateEnd": "2026-01-15T12:00:00Z"
}`))
if err != nil { panic(err) }
req.Header.Set("Authorization", os.Getenv("SELSUP_API_TOKEN"))
req.Header.Set("Content-Type", "application/json")
response, err := http.DefaultClient.Do(req)
if err != nil { panic(err) }
defer response.Body.Close()
result, _ := io.ReadAll(response.Body)
fmt.Printf("%d\n%s\n", response.StatusCode, result)
}
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class SelSupExample {
public static void main(String[] args) throws Exception {
HttpRequest request = HttpRequest.newBuilder(URI.create("https://api.selsup.ru/api/promotion/"))
.header("Authorization", System.getenv("SELSUP_API_TOKEN"))
.header("Content-Type", "application/json")
.method("POST", HttpRequest.BodyPublishers.ofString("""
{
"promotionId": 1001,
"id": 1001,
"totalCount": 1,
"name": "Example",
"dateStart": "2026-01-15T12:00:00Z",
"dateEnd": "2026-01-15T12:00:00Z"
}
"""))
.build();
HttpResponse<String> response = HttpClient.newHttpClient()
.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.statusCode());
System.out.println(response.body());
}
}
Успешный ответ
200
Поля объекта
Promotion
| Поле | Тип | Обязательно | Описание |
|---|---|---|---|
promotionId |
integer · int64 | Нет | Идентификатор акции |
id |
integer · int64 | Нет | Порядковый номер в списке запроса |
totalCount |
integer · int64 | Нет | Общее кол-во акций |
name |
string | Нет | Название акции |
dateStart |
string · date-time | Нет | Дата и время начало |
dateEnd |
string · date-time | Нет | Дата и время окончания |
changeCommission |
boolean | Нет | Меняется ли комиссия или нет |
changeCommissionAmount |
number · double | Нет | На какой процент сокращается комиссия |
createdDate |
string · date-time | Нет | Дата создания |
service |
stringNONE, WILDBERRIES, OZON, YANDEX_MARKET, FAMILIYA, NATIONAL_CATALOG, ALIEXPRESS, OTHER, MOY_SKLAD, SBER_MEGA_MARKET, CISLINK, ONE_C, AVITO, LEROY_MERLIN, DETMIR, KAZAN_EXPRESS, EVOTOR, WEBASYST, AMAZON, EBAY, SIMALAND, INSALES, LAMODA, OZON_PERFORMANCE, WALMART, GOOGLE, YANDEX_DISC, EMAIL, WOOCOMMERCE, MAGNIT, OPENCART, M_VIDEO, TAKEALOT, UZUM, SHOPIFY, MAKRO, YANDEX_KIT, BOB_SHOP, KASPI, DIADOC, TEKSHER, KONTUR_LOGISTICS, KONTUR_EDI, VSE_INSTRUMENTI, ELECTRONIC_SIGN | Нет | Маркетплейс акции |
isDeleted |
boolean | Нет | Идентификатор удаления |
description |
string | Нет | Описание акции |
promotionIdOnMp |
string | Нет | Идентификатор акции на МП |
clientId |
integer · int64 | Нет | Идентификатор клиента |
organizationId |
integer · int64 | Нет | Идентификатор организации |
candidateCount |
integer · int64 | Нет | Кол-во кандидатов в акцию |
inPromotionCount |
integer · int64 | Нет | Кол-во участников в акции |
auto |
boolean | Нет | Признак автоматической акции |
hotsale |
boolean | Нет | Признак hotsale акции |
candidateCountOnMp |
integer · int64 | Нет | Кол-во кандидатов в акции на маркетплейсе |
inPromotionCountOnMp |
integer · int64 | Нет | Кол-во участников в акции на маркетплейсе |
{
"promotionId": 1001,
"id": 1001,
"totalCount": 1,
"name": "Example",
"dateStart": "2026-01-15T12:00:00Z",
"dateEnd": "2026-01-15T12:00:00Z"
}Ошибки5
При ошибке проверьте HTTP-статус и тело ответа. Поле error содержит код ошибки, localMessage — сообщение для пользователя, params — дополнительные сведения. Обработка ошибок ↑
auth_requiredЗаголовок Authorization отсутствует, пуст или содержит недействительный токен.
error_access_deniedТокен существует, но его роль не позволяет выполнить операцию.
error_unknownНе удалось выполнить запрос из-за внутренней ошибки. Если запрос изменял данные, проверьте результат перед повторной отправкой. Для обращения в поддержку сохраните время запроса и полученный ответ.
error_cant_extract_tariffsПерсональная ошибка этого метода. Для программной логики используйте стабильный код error_cant_extract_tariffs; localMessage содержит приведённый выше перевод.
error_no_clientПерсональная ошибка этого метода. Для программной логики используйте стабильный код error_no_client; localMessage содержит приведённый выше перевод.
Выгрузить товары акции Ozon в Excel
/api/promotion/{promotionId}/product/exportМетод возвращает Excel-файл с параметрами акции и ее товарами
Параметры пути
| Поле | Тип | Обязательно | Описание |
|---|---|---|---|
promotionId |
integer · int64 | Да | Поле promotionId. |
Параметры запроса
| Поле | Тип | Обязательно | Описание |
|---|---|---|---|
dateFrom |
string · date-time | Нет | Дата начала акции |
dateTo |
string · date-time | Нет | Дата окончания акции |
service |
stringNONE, WILDBERRIES, OZON, YANDEX_MARKET, FAMILIYA, NATIONAL_CATALOG, ALIEXPRESS, OTHER, MOY_SKLAD, SBER_MEGA_MARKET, CISLINK, ONE_C, AVITO, LEROY_MERLIN, DETMIR, KAZAN_EXPRESS, EVOTOR, WEBASYST, AMAZON, EBAY, SIMALAND, INSALES, LAMODA, OZON_PERFORMANCE, WALMART, GOOGLE, YANDEX_DISC, EMAIL, WOOCOMMERCE, MAGNIT, OPENCART, M_VIDEO, TAKEALOT, UZUM, SHOPIFY, MAKRO, YANDEX_KIT, BOB_SHOP, KASPI, DIADOC, TEKSHER, KONTUR_LOGISTICS, KONTUR_EDI, VSE_INSTRUMENTI, ELECTRONIC_SIGN | Нет | Сервис |
reDownload |
boolean | Нет | Идентификатор, что нужно перезакачать данные с МП |
clientOrganizationId |
integer · int64 | Нет | Идентификатор организации |
minMargin |
number · double | Нет | Минимальная маржа, руб |
minMarginPercent |
number · double | Нет | Минимальная маржинальность, % |
isActive |
boolean | Нет | передавать только если надо вывести уже примененные акции, в таком случае передается true. В остальных случаях можно не передавать, по дефолту будет false |
isDeleted |
boolean | Нет | Поле isDeleted. |
query |
string | Нет | по названию или артикулу товара |
promotionIdOnMp |
integer · int64 | Нет | Идентификатор акции на сервисе |
categoryId |
integer · int64 | Нет | Идентификатор категории |
categoryIds |
integer[] | Нет | Идентификатор категорий |
clientId |
integer · int64 | Нет | Поле clientId. |
inStock |
boolean | Нет | В наличии |
isNotFound |
boolean | Нет | Ошибочные товары (карточки не были найдены) |
productIds |
integer[] | Нет | Идентификаторы товаров, по которым нужно вернуть их участие в акциях |
limit |
integer · int32 | Нет | Ограничение на количество записей. Максимальное значение - 500 |
page |
integer · int32 | Нет | Номер страницы начиная с 1 |
count |
boolean | Нет | Возвратить в ответе общее количество записей |
sortBy |
stringCATEGORYNAME, BRANDNAME, PRODUCTNAME, ARTICLE, BARCODE, SERVICEARTICLE, CURRENTPRICEWITHOUTDISCOUNT, CURRENTPRICE, PLANNEDPRICE, CURRENTDISCOUNT, NEWDISCOUNTFORPROMOTION, CURRENTPROFIT, PROMOTIONPROFIT, CURRENTMARGINALITY, PROMOTIONMARGINALITY, CURRENTMARKUP, PLANNEDMARKUPRATIO, OZONPRODUCTIDONMP, WILDBERRIESPRODUCTIDONMP, PURCHASEPERCENT, FBOSTOCK, FBSSTOCK, TURNOVER | Нет | Поле для сортировки |
ascending |
boolean | Нет | Порядок сортировки - по возрастанию?. Работает только при получении списка. |
curl --request GET 'https://api.selsup.ru/api/promotion/1001/product/export?limit=50&page=1' \
--header 'Authorization: YOUR_API_TOKEN'
const response = await fetch('https://api.selsup.ru/api/promotion/1001/product/export?limit=50&page=1', {
method: 'GET',
headers: { Authorization: process.env.SELSUP_API_TOKEN },
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.error || 'selsup_request_failed');
}
const result = await response.json();
const response: Response = await fetch('https://api.selsup.ru/api/promotion/1001/product/export?limit=50&page=1', {
method: 'GET',
headers: { Authorization: process.env.SELSUP_API_TOKEN! },
});
if (!response.ok) {
const error = await response.json() as { error?: string };
throw new Error(error.error ?? 'selsup_request_failed');
}
const result: unknown = await response.json();
import os
import requests
response = requests.get(
'https://api.selsup.ru/api/promotion/1001/product/export?limit=50&page=1',
headers={'Authorization': os.environ['SELSUP_API_TOKEN']},
)
response.raise_for_status()
result = response.json()
<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => 'https://api.selsup.ru/api/promotion/1001/product/export?limit=50&page=1',
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: ' . getenv('SELSUP_API_TOKEN')],
]);
$response = curl_exec($curl);
$status = curl_getinfo($curl, CURLINFO_HTTP_CODE);
curl_close($curl);
if ($response === false || $status >= 400) {
throw new RuntimeException($response ?: 'selsup_request_failed');
}
echo $response;
package main
import (
"fmt"
"io"
"net/http"
"os"
)
func main() {
req, err := http.NewRequest("GET", "https://api.selsup.ru/api/promotion/1001/product/export?limit=50&page=1", nil)
if err != nil { panic(err) }
req.Header.Set("Authorization", os.Getenv("SELSUP_API_TOKEN"))
response, err := http.DefaultClient.Do(req)
if err != nil { panic(err) }
defer response.Body.Close()
result, _ := io.ReadAll(response.Body)
fmt.Printf("%d\n%s\n", response.StatusCode, result)
}
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class SelSupExample {
public static void main(String[] args) throws Exception {
HttpRequest request = HttpRequest.newBuilder(URI.create("https://api.selsup.ru/api/promotion/1001/product/export?limit=50&page=1"))
.header("Authorization", System.getenv("SELSUP_API_TOKEN"))
.method("GET", HttpRequest.BodyPublishers.noBody())
.build();
HttpResponse<String> response = HttpClient.newHttpClient()
.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.statusCode());
System.out.println(response.body());
}
}
Успешный ответ
200"string"Ошибки7
При ошибке проверьте HTTP-статус и тело ответа. Поле error содержит код ошибки, localMessage — сообщение для пользователя, params — дополнительные сведения. Обработка ошибок ↑
auth_requiredЗаголовок Authorization отсутствует, пуст или содержит недействительный токен.
error_access_deniedТокен существует, но его роль не позволяет выполнить операцию.
error_unknownНе удалось выполнить запрос из-за внутренней ошибки. Если запрос изменял данные, проверьте результат перед повторной отправкой. Для обращения в поддержку сохраните время запроса и полученный ответ.
error_cant_download_fileПерсональная ошибка этого метода. Для программной логики используйте стабильный код error_cant_download_file; localMessage содержит приведённый выше перевод.
error_no_clientПерсональная ошибка этого метода. Для программной логики используйте стабильный код error_no_client; localMessage содержит приведённый выше перевод.
error_promotion_not_foundПерсональная ошибка этого метода. Для программной логики используйте стабильный код error_promotion_not_found; localMessage содержит приведённый выше перевод.
error_service_not_foundПерсональная ошибка этого метода. Для программной логики используйте стабильный код error_service_not_found; localMessage содержит приведённый выше перевод.
Поиск товаров в акциях
/api/promotion/product/findМетод возвращает все продукты в акции по фильтру
Параметры запроса
| Поле | Тип | Обязательно | Описание |
|---|---|---|---|
dateFrom |
string · date-time | Нет | Дата начала акции |
dateTo |
string · date-time | Нет | Дата окончания акции |
promotionId |
integer · int64 | Нет | Идентификатор акции |
service |
stringNONE, WILDBERRIES, OZON, YANDEX_MARKET, FAMILIYA, NATIONAL_CATALOG, ALIEXPRESS, OTHER, MOY_SKLAD, SBER_MEGA_MARKET, CISLINK, ONE_C, AVITO, LEROY_MERLIN, DETMIR, KAZAN_EXPRESS, EVOTOR, WEBASYST, AMAZON, EBAY, SIMALAND, INSALES, LAMODA, OZON_PERFORMANCE, WALMART, GOOGLE, YANDEX_DISC, EMAIL, WOOCOMMERCE, MAGNIT, OPENCART, M_VIDEO, TAKEALOT, UZUM, SHOPIFY, MAKRO, YANDEX_KIT, BOB_SHOP, KASPI, DIADOC, TEKSHER, KONTUR_LOGISTICS, KONTUR_EDI, VSE_INSTRUMENTI, ELECTRONIC_SIGN | Нет | Сервис |
reDownload |
boolean | Нет | Идентификатор, что нужно перезакачать данные с МП |
clientOrganizationId |
integer · int64 | Нет | Идентификатор организации |
minMargin |
number · double | Нет | Минимальная маржа, руб |
minMarginPercent |
number · double | Нет | Минимальная маржинальность, % |
isActive |
boolean | Нет | передавать только если надо вывести уже примененные акции, в таком случае передается true. В остальных случаях можно не передавать, по дефолту будет false |
isDeleted |
boolean | Нет | Поле isDeleted. |
query |
string | Нет | по названию или артикулу товара |
promotionIdOnMp |
integer · int64 | Нет | Идентификатор акции на сервисе |
categoryId |
integer · int64 | Нет | Идентификатор категории |
categoryIds |
integer[] | Нет | Идентификатор категорий |
clientId |
integer · int64 | Нет | Поле clientId. |
inStock |
boolean | Нет | В наличии |
isNotFound |
boolean | Нет | Ошибочные товары (карточки не были найдены) |
productIds |
integer[] | Нет | Идентификаторы товаров, по которым нужно вернуть их участие в акциях |
limit |
integer · int32 | Нет | Ограничение на количество записей. Максимальное значение - 500 |
page |
integer · int32 | Нет | Номер страницы начиная с 1 |
count |
boolean | Нет | Возвратить в ответе общее количество записей |
sortBy |
stringCATEGORYNAME, BRANDNAME, PRODUCTNAME, ARTICLE, BARCODE, SERVICEARTICLE, CURRENTPRICEWITHOUTDISCOUNT, CURRENTPRICE, PLANNEDPRICE, CURRENTDISCOUNT, NEWDISCOUNTFORPROMOTION, CURRENTPROFIT, PROMOTIONPROFIT, CURRENTMARGINALITY, PROMOTIONMARGINALITY, CURRENTMARKUP, PLANNEDMARKUPRATIO, OZONPRODUCTIDONMP, WILDBERRIESPRODUCTIDONMP, PURCHASEPERCENT, FBOSTOCK, FBSSTOCK, TURNOVER | Нет | Поле для сортировки |
ascending |
boolean | Нет | Порядок сортировки - по возрастанию?. Работает только при получении списка. |
curl --request GET 'https://api.selsup.ru/api/promotion/product/find?limit=50&page=1' \
--header 'Authorization: YOUR_API_TOKEN'
const response = await fetch('https://api.selsup.ru/api/promotion/product/find?limit=50&page=1', {
method: 'GET',
headers: { Authorization: process.env.SELSUP_API_TOKEN },
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.error || 'selsup_request_failed');
}
const result = await response.json();
const response: Response = await fetch('https://api.selsup.ru/api/promotion/product/find?limit=50&page=1', {
method: 'GET',
headers: { Authorization: process.env.SELSUP_API_TOKEN! },
});
if (!response.ok) {
const error = await response.json() as { error?: string };
throw new Error(error.error ?? 'selsup_request_failed');
}
const result: unknown = await response.json();
import os
import requests
response = requests.get(
'https://api.selsup.ru/api/promotion/product/find?limit=50&page=1',
headers={'Authorization': os.environ['SELSUP_API_TOKEN']},
)
response.raise_for_status()
result = response.json()
<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => 'https://api.selsup.ru/api/promotion/product/find?limit=50&page=1',
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: ' . getenv('SELSUP_API_TOKEN')],
]);
$response = curl_exec($curl);
$status = curl_getinfo($curl, CURLINFO_HTTP_CODE);
curl_close($curl);
if ($response === false || $status >= 400) {
throw new RuntimeException($response ?: 'selsup_request_failed');
}
echo $response;
package main
import (
"fmt"
"io"
"net/http"
"os"
)
func main() {
req, err := http.NewRequest("GET", "https://api.selsup.ru/api/promotion/product/find?limit=50&page=1", nil)
if err != nil { panic(err) }
req.Header.Set("Authorization", os.Getenv("SELSUP_API_TOKEN"))
response, err := http.DefaultClient.Do(req)
if err != nil { panic(err) }
defer response.Body.Close()
result, _ := io.ReadAll(response.Body)
fmt.Printf("%d\n%s\n", response.StatusCode, result)
}
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class SelSupExample {
public static void main(String[] args) throws Exception {
HttpRequest request = HttpRequest.newBuilder(URI.create("https://api.selsup.ru/api/promotion/product/find?limit=50&page=1"))
.header("Authorization", System.getenv("SELSUP_API_TOKEN"))
.method("GET", HttpRequest.BodyPublishers.noBody())
.build();
HttpResponse<String> response = HttpClient.newHttpClient()
.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.statusCode());
System.out.println(response.body());
}
}
Успешный ответ
200
Поля объекта
FindResponseProductPromotion
| Поле | Тип | Обязательно | Описание | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
rows |
ProductPromotion[] | Нет | Строки с результатом поиска | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Структура элемента массива
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Поле | Тип | Обязательно | Описание |
|---|---|---|---|
categoryName |
string | Нет | Категория |
brandName |
string | Нет | Бренд |
subject |
string | Нет | Поле subject. |
purchasePrice |
number · double | Нет | Поле purchasePrice. |
deliveryCost |
number · double | Нет | Поле deliveryCost. |
additionalCost |
number · double | Нет | Поле additionalCost. |
barcode |
string | Нет | Поле barcode. |
instockQuantity |
integer · int64 | Нет | Поле instockQuantity. |
wildberriesStockCount |
integer · int64 | Нет | Поле wildberriesStockCount. |
yandexMarketStockCount |
integer · int64 | Нет | Поле yandexMarketStockCount. |
createdDate |
string · date-time | Нет | Поле createdDate. |
minPrice |
number · double | Нет | Поле minPrice. |
isDuplicate |
boolean | Нет | Поле isDuplicate. |
ozonArticle |
string | Нет | Поле ozonArticle. |
ozonStockCount |
integer · int64 | Нет | Поле ozonStockCount. |
salesExpensesOnMpPercent |
number · double | Нет | Поле salesExpensesOnMpPercent. |
taxeRate |
number · double | Нет | Поле taxeRate. |
width |
integer · int32 | Нет | Поле width. |
height |
integer · int32 | Нет | Поле height. |
depth |
integer · int32 | Нет | Поле depth. |
ozonPurchasePercent |
number · double | Нет | Поле ozonPurchasePercent. |
warehouseRatio |
number · double | Нет | Поле warehouseRatio. |
wildberriesCommission |
number · double | Нет | Комиссия по тарифу FBM |
wildberriesFbwCommission |
number · double | Нет | Комиссия по тарифу FBW |
wildberriesFbsCommission |
number · double | Нет | Комиссия по тарифу FBS |
wildberriesDbsCommission |
number · double | Нет | Комиссия по тарифу DBS |
wildberriesEdbsCommission |
number · double | Нет | Комиссия по тарифу EDBS |
wildberriesCAndCCommission |
number · double | Нет | Комиссия по тарифу C&C |
wildberriesBookingCommission |
number · double | Нет | Комиссия за бронирование |
wildberriesAdditionalExpenses |
number · double | Нет | Поле wildberriesAdditionalExpenses. |
ozonAdditionalExpenses |
number · double | Нет | Поле ozonAdditionalExpenses. |
ozonCommission |
number · double | Нет | Поле ozonCommission. |
wildberriesId |
integer · int64 | Нет | Поле wildberriesId. |
productId |
integer · int64 | Нет | Идентификатор продукта |
promotionId |
integer · int64 | Нет | Идентификатор акции |
ozonFbsCommission |
number · double | Нет | Озон ФБС комиссия |
ozonFboCommission |
number · double | Нет | Озон ФБО комиссия |
service |
stringNONE, WILDBERRIES, OZON, YANDEX_MARKET, FAMILIYA, NATIONAL_CATALOG, ALIEXPRESS, OTHER, MOY_SKLAD, SBER_MEGA_MARKET, CISLINK, ONE_C, AVITO, LEROY_MERLIN, DETMIR, KAZAN_EXPRESS, EVOTOR, WEBASYST, AMAZON, EBAY, SIMALAND, INSALES, LAMODA, OZON_PERFORMANCE, WALMART, GOOGLE, YANDEX_DISC, EMAIL, WOOCOMMERCE, MAGNIT, OPENCART, M_VIDEO, TAKEALOT, UZUM, SHOPIFY, MAKRO, YANDEX_KIT, BOB_SHOP, KASPI, DIADOC, TEKSHER, KONTUR_LOGISTICS, KONTUR_EDI, VSE_INSTRUMENTI, ELECTRONIC_SIGN | Нет | Сервис |
acquiringPercent |
number · double | Нет | Максимальный процент комиссии за эквайринг |
currentPrice |
number · double | Нет | Текущая цена со скидкой |
currentPriceWithoutDiscount |
number · double | Нет | Текущая цена без скидкой |
plannedPrice |
number · double | Нет | Планируемая цена под акцию |
totalStockCount |
integer · int64 | Нет | Поле totalStockCount. |
commissionReduction |
number · double | Нет | Поле commissionReduction. |
profitDifference |
number · double | Нет | Поле profitDifference. |
marginDifference |
number · double | Нет | Поле marginDifference. |
markupDifference |
number · double | Нет | Поле markupDifference. |
plannedAndMinPriceDiff |
number · double | Нет | Поле plannedAndMinPriceDiff. |
incomeDifference |
number · double | Нет | Поле incomeDifference. |
currentDiscount |
number · double | Нет | Поле currentDiscount. |
productCreatedDate |
string · date-time | Нет | Поле productCreatedDate. |
mainImageUrl |
string | Нет | Ссылка на основное изображение |
isProfitably |
boolean | Нет | Поле isProfitably. |
taskId |
integer · int64 | Нет | Идентификатор задачи |
serviceArticle |
string | Нет | Артикул на сервисе |
article |
string | Нет | Модель артикул |
daysCountOnService |
integer · int32 | Нет | Кол-во дней на сервисе |
turnover |
integer · int32 | Нет | Оборачиваемость |
fboStock |
integer · int32 | Нет | ФБО остаток |
fbsStock |
integer · int32 | Нет | ФБС остаток |
newDiscountForPromotion |
number · double | Нет | Поле newDiscountForPromotion. |
saleLogistics |
number · double | Нет | Логистика при продаже |
returnLogistics |
number · double | Нет | Обратная логистика |
purchasePercent |
number · double | Нет | Процент выкупа |
totalLogistics |
number · double | Нет | Логистика |
commissions |
number · double | Нет | Комиссия |
currentProfit |
number · double | Нет | Текущая прибыль |
promotionProfit |
number · double | Нет | Прибыль под акцию |
currentMarginality |
number · double | Нет | Текущая маржинальность |
promotionMarginality |
number · double | Нет | Маржинальность под акцию |
currentMarkUp |
number · double | Нет | Текущая наценка |
promotionMarkUp |
number · double | Нет | Наценка под акцию |
additionalDiscountForPromotionRub |
number · double | Нет | Дополнительная скидка под акции в руб |
additionalDiscountForPromotionPercent |
number · double | Нет | Дополнительная скидка под акции в % |
isDeleted |
boolean | Нет | Удаленный? |
organizationId |
integer · int64 | Нет | Идентификатор организации |
clientId |
integer · int64 | Нет | Идентификатор клиента |
addMode |
string | Нет | Тип добавления товара в акцию: автоматически или вручную продавцом. |
ozonAverageExpenses |
number · double | Нет | Поле ozonAverageExpenses. |
isActive |
boolean | Нет | Товар в акции или нет |
changeName |
string | Нет | Кто вносил корректировки |
changeDate |
string · date-time | Нет | Дата когда вносили изменения |
productName |
string | Нет | Название продукта |
id |
integer · int64 | Нет | Порядковый номер в общем списке, для фронта |
totalCount |
integer · int64 | Нет | Общее кол-во |
serviceCard |
string | Нет | Идентификатор продукта на сервисе |
isNotFound |
boolean | Нет | Поле isNotFound. |
isArchived |
boolean | Нет | Поле isArchived. |
productCommissions |
string | Нет | Поле productCommissions. |
currentGrossProfit |
number · double | Нет | Валовая прибыль текущая (без акции), руб |
plannedGrossProfit |
number · double | Нет | Валовая прибыль под акцию (с акцией), руб |
promotionName |
string | Нет | Название акции |
promotionDateEnd |
string · date-time | Нет | Дата и время окончания акции |
promotionDateStart |
string · date-time | Нет | Дата и время начала акции |
promotionIsDeleted |
boolean | Нет | Признак удаления акции |
{
"rows": "string"
}Ошибки5
При ошибке проверьте HTTP-статус и тело ответа. Поле error содержит код ошибки, localMessage — сообщение для пользователя, params — дополнительные сведения. Обработка ошибок ↑
auth_requiredЗаголовок Authorization отсутствует, пуст или содержит недействительный токен.
error_access_deniedТокен существует, но его роль не позволяет выполнить операцию.
error_unknownНе удалось выполнить запрос из-за внутренней ошибки. Если запрос изменял данные, проверьте результат перед повторной отправкой. Для обращения в поддержку сохраните время запроса и полученный ответ.
error_cant_extract_tariffsПерсональная ошибка этого метода. Для программной логики используйте стабильный код error_cant_extract_tariffs; localMessage содержит приведённый выше перевод.
error_no_clientПерсональная ошибка этого метода. Для программной логики используйте стабильный код error_no_client; localMessage содержит приведённый выше перевод.
Поиск акции
/api/promotion/findМетод возвращает все акции по фильтру
Параметры запроса
| Поле | Тип | Обязательно | Описание |
|---|---|---|---|
dateFrom |
string · date-time | Нет | Дата начала акции |
dateTo |
string · date-time | Нет | Дата окончания акции |
promotionId |
integer · int64 | Нет | Идентификатор акции |
service |
stringNONE, WILDBERRIES, OZON, YANDEX_MARKET, FAMILIYA, NATIONAL_CATALOG, ALIEXPRESS, OTHER, MOY_SKLAD, SBER_MEGA_MARKET, CISLINK, ONE_C, AVITO, LEROY_MERLIN, DETMIR, KAZAN_EXPRESS, EVOTOR, WEBASYST, AMAZON, EBAY, SIMALAND, INSALES, LAMODA, OZON_PERFORMANCE, WALMART, GOOGLE, YANDEX_DISC, EMAIL, WOOCOMMERCE, MAGNIT, OPENCART, M_VIDEO, TAKEALOT, UZUM, SHOPIFY, MAKRO, YANDEX_KIT, BOB_SHOP, KASPI, DIADOC, TEKSHER, KONTUR_LOGISTICS, KONTUR_EDI, VSE_INSTRUMENTI, ELECTRONIC_SIGN | Нет | Сервис |
reDownload |
boolean | Нет | Идентификатор, что нужно перезакачать данные с МП |
clientOrganizationId |
integer · int64 | Нет | Идентификатор организации |
minMargin |
number · double | Нет | Минимальная маржа, руб |
minMarginPercent |
number · double | Нет | Минимальная маржинальность, % |
isActive |
boolean | Нет | передавать только если надо вывести уже примененные акции, в таком случае передается true. В остальных случаях можно не передавать, по дефолту будет false |
isDeleted |
boolean | Нет | Поле isDeleted. |
query |
string | Нет | по названию или артикулу товара |
promotionIdOnMp |
integer · int64 | Нет | Идентификатор акции на сервисе |
categoryId |
integer · int64 | Нет | Идентификатор категории |
categoryIds |
integer[] | Нет | Идентификатор категорий |
clientId |
integer · int64 | Нет | Поле clientId. |
inStock |
boolean | Нет | В наличии |
isNotFound |
boolean | Нет | Ошибочные товары (карточки не были найдены) |
productIds |
integer[] | Нет | Идентификаторы товаров, по которым нужно вернуть их участие в акциях |
limit |
integer · int32 | Нет | Ограничение на количество записей. Максимальное значение - 500 |
page |
integer · int32 | Нет | Номер страницы начиная с 1 |
count |
boolean | Нет | Возвратить в ответе общее количество записей |
sortBy |
stringCATEGORYNAME, BRANDNAME, PRODUCTNAME, ARTICLE, BARCODE, SERVICEARTICLE, CURRENTPRICEWITHOUTDISCOUNT, CURRENTPRICE, PLANNEDPRICE, CURRENTDISCOUNT, NEWDISCOUNTFORPROMOTION, CURRENTPROFIT, PROMOTIONPROFIT, CURRENTMARGINALITY, PROMOTIONMARGINALITY, CURRENTMARKUP, PLANNEDMARKUPRATIO, OZONPRODUCTIDONMP, WILDBERRIESPRODUCTIDONMP, PURCHASEPERCENT, FBOSTOCK, FBSSTOCK, TURNOVER | Нет | Поле для сортировки |
ascending |
boolean | Нет | Порядок сортировки - по возрастанию?. Работает только при получении списка. |
curl --request GET 'https://api.selsup.ru/api/promotion/find?limit=50&page=1' \
--header 'Authorization: YOUR_API_TOKEN'
const response = await fetch('https://api.selsup.ru/api/promotion/find?limit=50&page=1', {
method: 'GET',
headers: { Authorization: process.env.SELSUP_API_TOKEN },
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.error || 'selsup_request_failed');
}
const result = await response.json();
const response: Response = await fetch('https://api.selsup.ru/api/promotion/find?limit=50&page=1', {
method: 'GET',
headers: { Authorization: process.env.SELSUP_API_TOKEN! },
});
if (!response.ok) {
const error = await response.json() as { error?: string };
throw new Error(error.error ?? 'selsup_request_failed');
}
const result: unknown = await response.json();
import os
import requests
response = requests.get(
'https://api.selsup.ru/api/promotion/find?limit=50&page=1',
headers={'Authorization': os.environ['SELSUP_API_TOKEN']},
)
response.raise_for_status()
result = response.json()
<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => 'https://api.selsup.ru/api/promotion/find?limit=50&page=1',
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: ' . getenv('SELSUP_API_TOKEN')],
]);
$response = curl_exec($curl);
$status = curl_getinfo($curl, CURLINFO_HTTP_CODE);
curl_close($curl);
if ($response === false || $status >= 400) {
throw new RuntimeException($response ?: 'selsup_request_failed');
}
echo $response;
package main
import (
"fmt"
"io"
"net/http"
"os"
)
func main() {
req, err := http.NewRequest("GET", "https://api.selsup.ru/api/promotion/find?limit=50&page=1", nil)
if err != nil { panic(err) }
req.Header.Set("Authorization", os.Getenv("SELSUP_API_TOKEN"))
response, err := http.DefaultClient.Do(req)
if err != nil { panic(err) }
defer response.Body.Close()
result, _ := io.ReadAll(response.Body)
fmt.Printf("%d\n%s\n", response.StatusCode, result)
}
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class SelSupExample {
public static void main(String[] args) throws Exception {
HttpRequest request = HttpRequest.newBuilder(URI.create("https://api.selsup.ru/api/promotion/find?limit=50&page=1"))
.header("Authorization", System.getenv("SELSUP_API_TOKEN"))
.method("GET", HttpRequest.BodyPublishers.noBody())
.build();
HttpResponse<String> response = HttpClient.newHttpClient()
.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.statusCode());
System.out.println(response.body());
}
}
Успешный ответ
200
Поля объекта
FindResponsePromotion
| Поле | Тип | Обязательно | Описание | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
rows |
Promotion[] | Нет | Строки с результатом поиска | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Структура элемента массива
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Поле | Тип | Обязательно | Описание |
|---|---|---|---|
promotionId |
integer · int64 | Нет | Идентификатор акции |
id |
integer · int64 | Нет | Порядковый номер в списке запроса |
totalCount |
integer · int64 | Нет | Общее кол-во акций |
name |
string | Нет | Название акции |
dateStart |
string · date-time | Нет | Дата и время начало |
dateEnd |
string · date-time | Нет | Дата и время окончания |
changeCommission |
boolean | Нет | Меняется ли комиссия или нет |
changeCommissionAmount |
number · double | Нет | На какой процент сокращается комиссия |
createdDate |
string · date-time | Нет | Дата создания |
service |
stringNONE, WILDBERRIES, OZON, YANDEX_MARKET, FAMILIYA, NATIONAL_CATALOG, ALIEXPRESS, OTHER, MOY_SKLAD, SBER_MEGA_MARKET, CISLINK, ONE_C, AVITO, LEROY_MERLIN, DETMIR, KAZAN_EXPRESS, EVOTOR, WEBASYST, AMAZON, EBAY, SIMALAND, INSALES, LAMODA, OZON_PERFORMANCE, WALMART, GOOGLE, YANDEX_DISC, EMAIL, WOOCOMMERCE, MAGNIT, OPENCART, M_VIDEO, TAKEALOT, UZUM, SHOPIFY, MAKRO, YANDEX_KIT, BOB_SHOP, KASPI, DIADOC, TEKSHER, KONTUR_LOGISTICS, KONTUR_EDI, VSE_INSTRUMENTI, ELECTRONIC_SIGN | Нет | Маркетплейс акции |
isDeleted |
boolean | Нет | Идентификатор удаления |
description |
string | Нет | Описание акции |
promotionIdOnMp |
string | Нет | Идентификатор акции на МП |
clientId |
integer · int64 | Нет | Идентификатор клиента |
organizationId |
integer · int64 | Нет | Идентификатор организации |
candidateCount |
integer · int64 | Нет | Кол-во кандидатов в акцию |
inPromotionCount |
integer · int64 | Нет | Кол-во участников в акции |
auto |
boolean | Нет | Признак автоматической акции |
hotsale |
boolean | Нет | Признак hotsale акции |
candidateCountOnMp |
integer · int64 | Нет | Кол-во кандидатов в акции на маркетплейсе |
inPromotionCountOnMp |
integer · int64 | Нет | Кол-во участников в акции на маркетплейсе |
{
"rows": "string"
}Ошибки6
При ошибке проверьте HTTP-статус и тело ответа. Поле error содержит код ошибки, localMessage — сообщение для пользователя, params — дополнительные сведения. Обработка ошибок ↑
auth_requiredЗаголовок Authorization отсутствует, пуст или содержит недействительный токен.
error_access_deniedТокен существует, но его роль не позволяет выполнить операцию.
error_unknownНе удалось выполнить запрос из-за внутренней ошибки. Если запрос изменял данные, проверьте результат перед повторной отправкой. Для обращения в поддержку сохраните время запроса и полученный ответ.
error_cant_extract_tariffsПерсональная ошибка этого метода. Для программной логики используйте стабильный код error_cant_extract_tariffs; localMessage содержит приведённый выше перевод.
error_no_clientПерсональная ошибка этого метода. Для программной логики используйте стабильный код error_no_client; localMessage содержит приведённый выше перевод.
error_service_not_foundПерсональная ошибка этого метода. Для программной логики используйте стабильный код error_service_not_found; localMessage содержит приведённый выше перевод.
Выгрузить акции Ozon в Excel
/api/promotion/exportМетод возвращает Excel-файл с акциями Ozon по фильтру
Параметры запроса
| Поле | Тип | Обязательно | Описание |
|---|---|---|---|
dateFrom |
string · date-time | Нет | Дата начала акции |
dateTo |
string · date-time | Нет | Дата окончания акции |
promotionId |
integer · int64 | Нет | Идентификатор акции |
service |
stringNONE, WILDBERRIES, OZON, YANDEX_MARKET, FAMILIYA, NATIONAL_CATALOG, ALIEXPRESS, OTHER, MOY_SKLAD, SBER_MEGA_MARKET, CISLINK, ONE_C, AVITO, LEROY_MERLIN, DETMIR, KAZAN_EXPRESS, EVOTOR, WEBASYST, AMAZON, EBAY, SIMALAND, INSALES, LAMODA, OZON_PERFORMANCE, WALMART, GOOGLE, YANDEX_DISC, EMAIL, WOOCOMMERCE, MAGNIT, OPENCART, M_VIDEO, TAKEALOT, UZUM, SHOPIFY, MAKRO, YANDEX_KIT, BOB_SHOP, KASPI, DIADOC, TEKSHER, KONTUR_LOGISTICS, KONTUR_EDI, VSE_INSTRUMENTI, ELECTRONIC_SIGN | Нет | Сервис |
reDownload |
boolean | Нет | Идентификатор, что нужно перезакачать данные с МП |
clientOrganizationId |
integer · int64 | Нет | Идентификатор организации |
minMargin |
number · double | Нет | Минимальная маржа, руб |
minMarginPercent |
number · double | Нет | Минимальная маржинальность, % |
isActive |
boolean | Нет | передавать только если надо вывести уже примененные акции, в таком случае передается true. В остальных случаях можно не передавать, по дефолту будет false |
isDeleted |
boolean | Нет | Поле isDeleted. |
query |
string | Нет | по названию или артикулу товара |
promotionIdOnMp |
integer · int64 | Нет | Идентификатор акции на сервисе |
categoryId |
integer · int64 | Нет | Идентификатор категории |
categoryIds |
integer[] | Нет | Идентификатор категорий |
clientId |
integer · int64 | Нет | Поле clientId. |
inStock |
boolean | Нет | В наличии |
isNotFound |
boolean | Нет | Ошибочные товары (карточки не были найдены) |
productIds |
integer[] | Нет | Идентификаторы товаров, по которым нужно вернуть их участие в акциях |
limit |
integer · int32 | Нет | Ограничение на количество записей. Максимальное значение - 500 |
page |
integer · int32 | Нет | Номер страницы начиная с 1 |
count |
boolean | Нет | Возвратить в ответе общее количество записей |
sortBy |
stringCATEGORYNAME, BRANDNAME, PRODUCTNAME, ARTICLE, BARCODE, SERVICEARTICLE, CURRENTPRICEWITHOUTDISCOUNT, CURRENTPRICE, PLANNEDPRICE, CURRENTDISCOUNT, NEWDISCOUNTFORPROMOTION, CURRENTPROFIT, PROMOTIONPROFIT, CURRENTMARGINALITY, PROMOTIONMARGINALITY, CURRENTMARKUP, PLANNEDMARKUPRATIO, OZONPRODUCTIDONMP, WILDBERRIESPRODUCTIDONMP, PURCHASEPERCENT, FBOSTOCK, FBSSTOCK, TURNOVER | Нет | Поле для сортировки |
ascending |
boolean | Нет | Порядок сортировки - по возрастанию?. Работает только при получении списка. |
curl --request GET 'https://api.selsup.ru/api/promotion/export?limit=50&page=1' \
--header 'Authorization: YOUR_API_TOKEN'
const response = await fetch('https://api.selsup.ru/api/promotion/export?limit=50&page=1', {
method: 'GET',
headers: { Authorization: process.env.SELSUP_API_TOKEN },
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.error || 'selsup_request_failed');
}
const result = await response.json();
const response: Response = await fetch('https://api.selsup.ru/api/promotion/export?limit=50&page=1', {
method: 'GET',
headers: { Authorization: process.env.SELSUP_API_TOKEN! },
});
if (!response.ok) {
const error = await response.json() as { error?: string };
throw new Error(error.error ?? 'selsup_request_failed');
}
const result: unknown = await response.json();
import os
import requests
response = requests.get(
'https://api.selsup.ru/api/promotion/export?limit=50&page=1',
headers={'Authorization': os.environ['SELSUP_API_TOKEN']},
)
response.raise_for_status()
result = response.json()
<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => 'https://api.selsup.ru/api/promotion/export?limit=50&page=1',
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: ' . getenv('SELSUP_API_TOKEN')],
]);
$response = curl_exec($curl);
$status = curl_getinfo($curl, CURLINFO_HTTP_CODE);
curl_close($curl);
if ($response === false || $status >= 400) {
throw new RuntimeException($response ?: 'selsup_request_failed');
}
echo $response;
package main
import (
"fmt"
"io"
"net/http"
"os"
)
func main() {
req, err := http.NewRequest("GET", "https://api.selsup.ru/api/promotion/export?limit=50&page=1", nil)
if err != nil { panic(err) }
req.Header.Set("Authorization", os.Getenv("SELSUP_API_TOKEN"))
response, err := http.DefaultClient.Do(req)
if err != nil { panic(err) }
defer response.Body.Close()
result, _ := io.ReadAll(response.Body)
fmt.Printf("%d\n%s\n", response.StatusCode, result)
}
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class SelSupExample {
public static void main(String[] args) throws Exception {
HttpRequest request = HttpRequest.newBuilder(URI.create("https://api.selsup.ru/api/promotion/export?limit=50&page=1"))
.header("Authorization", System.getenv("SELSUP_API_TOKEN"))
.method("GET", HttpRequest.BodyPublishers.noBody())
.build();
HttpResponse<String> response = HttpClient.newHttpClient()
.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.statusCode());
System.out.println(response.body());
}
}
Успешный ответ
200"string"Ошибки6
При ошибке проверьте HTTP-статус и тело ответа. Поле error содержит код ошибки, localMessage — сообщение для пользователя, params — дополнительные сведения. Обработка ошибок ↑
auth_requiredЗаголовок Authorization отсутствует, пуст или содержит недействительный токен.
error_access_deniedТокен существует, но его роль не позволяет выполнить операцию.
error_unknownНе удалось выполнить запрос из-за внутренней ошибки. Если запрос изменял данные, проверьте результат перед повторной отправкой. Для обращения в поддержку сохраните время запроса и полученный ответ.
error_cant_download_fileПерсональная ошибка этого метода. Для программной логики используйте стабильный код error_cant_download_file; localMessage содержит приведённый выше перевод.
error_no_clientПерсональная ошибка этого метода. Для программной логики используйте стабильный код error_no_client; localMessage содержит приведённый выше перевод.
error_service_not_foundПерсональная ошибка этого метода. Для программной логики используйте стабильный код error_service_not_found; localMessage содержит приведённый выше перевод.