Акции

Методы для контроля акций и товаров в них

Базовый URL: https://api.selsup.ru

🔗 Обновить акцию

Метод обновляет данные акцию
PUT /api/promotion/{promotionId}

Тело запроса *Обязательно

Content-Type: application/json
ПолеТипОписание
promotionId integer Идентификатор акции
id integer Порядковый номер в списке запроса
totalCount integer Общее кол-во акций
name string Название акции
dateStart string Дата и время начало
dateEnd string Дата и время окончания
changeCommission boolean Меняется ли комиссия или нет
changeCommissionAmount number На какой процент сокращается комиссия
createdDate string Дата создания
service string Сервис
isDeleted boolean Идентификатор удаления
description string Описание акции
promotionIdOnMp integer Идентификатор акции на МП
clientId integer Идентификатор клиента
organizationId integer Идентификатор организации
candidateCount integer Кол-во кандидатов в акцию
inPromotionCount integer Кол-во участников в акции
auto boolean Признак автоматической акции
hotsale boolean Признак hotsale акции
candidateCountOnMp integer Кол-во кандидатов в акции на маркетплейсе
inPromotionCountOnMp integer Кол-во участников в акции на маркетплейсе

Тело ответа

✓ 200 OK
Content-Type: application/json
Поле Тип Описание
promotionId integer Идентификатор акции
id integer Порядковый номер в списке запроса
totalCount integer Общее кол-во акций
name string Название акции
dateStart string Дата и время начало
dateEnd string Дата и время окончания
changeCommission boolean Меняется ли комиссия или нет
changeCommissionAmount number На какой процент сокращается комиссия
createdDate string Дата создания
service string Сервис
isDeleted boolean Идентификатор удаления
description string Описание акции
promotionIdOnMp integer Идентификатор акции на МП
clientId integer Идентификатор клиента
organizationId integer Идентификатор организации
candidateCount integer Кол-во кандидатов в акцию
inPromotionCount integer Кол-во участников в акции
auto boolean Признак автоматической акции
hotsale boolean Признак hotsale акции
candidateCountOnMp integer Кол-во кандидатов в акции на маркетплейсе
inPromotionCountOnMp integer Кол-во участников в акции на маркетплейсе
⚠ 400 Ошибка с данными запроса
Content-Type: application/json
Поле Тип Описание
error Обязательный string Код ошибки
localMessage Обязательный string Текст ошибки на языке пользователя
params object Дополнительные параметры ошибки
⚠ 403 Доступ запрещен
Content-Type: application/json
Поле Тип Описание
error Обязательный string Код ошибки
✗ 500 Внутренняя ошибка сервера
Content-Type: application/json
Поле Тип Описание
error Обязательный string Код ошибки
message string Описание ошибки
system string Системная ошибки парсинга данных запроса
Укажите ключ API в правом верхнем углу, чтобы попробовать использовать метод

Примеры кода

const axios = require('axios');

const response = await axios.put('https://api.selsup.ru/api/promotion/${promotionId}',
  {
    "promotionId": 123,
    "id": "Иванович",
    "totalCount": 10000,
    "name": "Иван",
    "dateStart": "2024-01-15T10:30:00Z",
    "dateEnd": "2024-01-15T10:30:00Z",
    "changeCommission": true,
    "changeCommissionAmount": 2500,
    "createdDate": "2024-01-15T10:30:00Z",
    "service": "NONE"
  },
  {
    headers: {
      'Authorization': 'YOUR_API_KEY',
      'Content-Type': 'application/json'
    }
  }
);

console.log(response.data);
import axios from 'axios';

const response = await axios.put<any>('https://api.selsup.ru/api/promotion/${promotionId}',
  {
    "promotionId": 123,
    "id": "Иванович",
    "totalCount": 10000,
    "name": "Иван",
    "dateStart": "2024-01-15T10:30:00Z",
    "dateEnd": "2024-01-15T10:30:00Z",
    "changeCommission": true,
    "changeCommissionAmount": 2500,
    "createdDate": "2024-01-15T10:30:00Z",
    "service": "NONE"
  },
  {
    headers: {
      'Authorization': 'YOUR_API_KEY',
      'Content-Type': 'application/json'
    }
  }
);

console.log(response.data);
import requests

headers = {
    'Authorization': 'YOUR_API_KEY',
    'Content-Type': 'application/json'
}

response = requests.put(
    'https://api.selsup.ru/api/promotion/${promotionId}',
    headers=headers,
    json={
    'promotionId': 123,
    'id': 'Иванович',
    'totalCount': 10000,
    'name': 'Иван',
    'dateStart': '2024-01-15T10:30:00Z',
    'dateEnd': '2024-01-15T10:30:00Z',
    'changeCommission': true,
    'changeCommissionAmount': 2500,
    'createdDate': '2024-01-15T10:30:00Z',
    'service': 'NONE'
}
)

print(response.json())
package main

import (
    "bytes"
    "encoding/json"
    "fmt"
    "net/http"
)

func main() {
    client := &http.Client{}

    payload := map[string]interface{}{
        `promotionId`: 123,
        `id`: `Иванович`,
        `totalCount`: 10000,
        `name`: `Иван`,
        `dateStart`: `2024-01-15T10:30:00Z`,
        `dateEnd`: `2024-01-15T10:30:00Z`,
        `changeCommission`: true,
        `changeCommissionAmount`: 2500,
        `createdDate`: `2024-01-15T10:30:00Z`,
        `service`: `NONE`
}
    jsonData, _ := json.Marshal(payload)

    req, _ := http.NewRequest("put", "https://api.selsup.ru/api/promotion/${promotionId}", bytes.NewBuffer(jsonData))
    req.Header.Set("Authorization", "YOUR_API_KEY")
    req.Header.Set("Content-Type", "application/json")

    resp, err := client.Do(req)
    if err != nil {
        panic(err)
    }
    defer resp.Body.Close()

    var result map[string]interface{}
    json.NewDecoder(resp.Body).Decode(&result)
    fmt.Println(result)
}
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.net.URI;

HttpClient client = HttpClient.newHttpClient();

HttpRequest request = HttpRequest.newBuilder()
    .uri(URI.create("https://api.selsup.ru/api/promotion/${promotionId}"))
    .header("Authorization", "YOUR_API_KEY")
    .header("Content-Type", "application/json")
    .put(HttpRequest.BodyPublishers.ofString(
        "{\"promotionId\":123,\"id\":\"Иванович\",\"totalCount\":10000,\"name\":\"Иван\",\"dateStart\":\"2024-01-15T10:30:00Z\",\"dateEnd\":\"2024-01-15T10:30:00Z\",\"changeCommission\":true,\"changeCommissionAmount\":2500,\"createdDate\":\"2024-01-15T10:30:00Z\",\"service\":\"NONE\"}"
    ))
    .build();

HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
<?php
$curl = curl_init();

curl_setopt_array($curl, [
    CURLOPT_URL => 'https://api.selsup.ru/api/promotion/${promotionId}',
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST => 'put',
    CURLOPT_POSTFIELDS => json_encode({
    'promotionId': 123,
    'id': 'Иванович',
    'totalCount': 10000,
    'name': 'Иван',
    'dateStart': '2024-01-15T10:30:00Z',
    'dateEnd': '2024-01-15T10:30:00Z',
    'changeCommission': true,
    'changeCommissionAmount': 2500,
    'createdDate': '2024-01-15T10:30:00Z',
    'service': 'NONE'
}),
    CURLOPT_HTTPHEADER => [
        'Authorization: YOUR_API_KEY',
        'Content-Type: application/json'
    ]
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
?>
curl -X put \
  'https://api.selsup.ru/api/promotion/{promotionId}' \
  -H 'Authorization: YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{
  "promotionId": 123,
  "id": "Иванович",
  "totalCount": 10000,
  "name": "Иван",
  "dateStart": "2024-01-15T10:30:00Z",
  "dateEnd": "2024-01-15T10:30:00Z",
  "changeCommission": true,
  "changeCommissionAmount": 2500,
  "createdDate": "2024-01-15T10:30:00Z",
  "service": "NONE"
}'

🔗 Удалить акцию

Метод удаляет акцию
DELETE /api/promotion/{promotionId}

Параметры пути PATH

Название Тип Обязательный Описание
promotionId integer Да Идентификатор акции

Тело ответа

✓ 200 OK
⚠ 400 Ошибка с данными запроса
Content-Type: application/json
Поле Тип Описание
error Обязательный string Код ошибки
localMessage Обязательный string Текст ошибки на языке пользователя
params object Дополнительные параметры ошибки
⚠ 403 Доступ запрещен
Content-Type: application/json
Поле Тип Описание
error Обязательный string Код ошибки
✗ 500 Внутренняя ошибка сервера
Content-Type: application/json
Поле Тип Описание
error Обязательный string Код ошибки
message string Описание ошибки
system string Системная ошибки парсинга данных запроса
Укажите ключ API в правом верхнем углу, чтобы попробовать использовать метод

Примеры кода

const axios = require('axios');

const response = await axios.delete('https://api.selsup.ru/api/promotion/${promotionId}',
  {
    headers: {
      'Authorization': 'YOUR_API_KEY',
      'Content-Type': 'application/json'
    }
  }
);

console.log(response.data);
import axios from 'axios';

const response = await axios.delete<any>('https://api.selsup.ru/api/promotion/${promotionId}',
  {
    headers: {
      'Authorization': 'YOUR_API_KEY',
      'Content-Type': 'application/json'
    }
  }
);

console.log(response.data);
import requests

headers = {
    'Authorization': 'YOUR_API_KEY',
    'Content-Type': 'application/json'
}

response = requests.delete(
    'https://api.selsup.ru/api/promotion/${promotionId}',
    headers=headers
)

print(response.json())
package main

import (
    "bytes"
    "encoding/json"
    "fmt"
    "net/http"
)

func main() {
    client := &http.Client{}

    req, _ := http.NewRequest("delete", "https://api.selsup.ru/api/promotion/${promotionId}", nil)
    req.Header.Set("Authorization", "YOUR_API_KEY")
    req.Header.Set("Content-Type", "application/json")

    resp, err := client.Do(req)
    if err != nil {
        panic(err)
    }
    defer resp.Body.Close()

    var result map[string]interface{}
    json.NewDecoder(resp.Body).Decode(&result)
    fmt.Println(result)
}
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.net.URI;

HttpClient client = HttpClient.newHttpClient();

HttpRequest request = HttpRequest.newBuilder()
    .uri(URI.create("https://api.selsup.ru/api/promotion/${promotionId}"))
    .header("Authorization", "YOUR_API_KEY")
    .header("Content-Type", "application/json")
    .delete(HttpRequest.BodyPublishers.noBody())
    .build();

HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
<?php
$curl = curl_init();

curl_setopt_array($curl, [
    CURLOPT_URL => 'https://api.selsup.ru/api/promotion/${promotionId}',
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST => 'delete',
    CURLOPT_HTTPHEADER => [
        'Authorization: YOUR_API_KEY',
        'Content-Type: application/json'
    ]
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
?>
curl -X delete \
  'https://api.selsup.ru/api/promotion/{promotionId}' \
  -H 'Authorization: YOUR_API_KEY' \
  -H 'Content-Type: application/json'

🔗 Обновить данные

Метод ставит задачу обновления данных по акциям ОЗОН в очередь
POST /api/promotion/update/{service}

Параметры пути PATH

Название Тип Обязательный Описание
service "NONE""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" Да Параметр service

Параметры запроса QUERY

Название Тип Обязательный Описание
organizationId integer Нет Параметр organizationId

Тело ответа

✓ 200 OK
Content-Type: application/json
Поле Тип Описание
id integer Идентификатор задачи
status string Текущий статус задачи
type string Тип задачи
name string Данные задачи в json - могут быть пустыми
clientId integer
entityId integer Сущность, к которой относится задача
progress integer Прогресс выполнения задачи в процентах
processedQuantity integer Количество обработанных записей задачи
organizationId integer Организация задачи, может быть 0, если не зависит от организации
priority integer Приоритет задачи - чем выше тем быстрее задача запустится
properties string Параметры задачи
message string Сообщение с результатом выполнения задачи
messageParams string Параметры сообщения с результатом выполнения задачи
createdDate string Дата добавления задачи в очередь
startDate string Дата запуска задачи
finishDate string Дата завершения задачи
url string Ссылка на скачивание файла с результатом задачи
inputFileUrl string Ссылка на загруженный файл
retryNumber integer Счётчик перезапуска задачи.
userId integer Пользователь запустивший задачу
retryDate string Запланированная дата перезапуска
debug boolean Запуск задачи в режиме отладки с большим логированием
forcedStart boolean Ручной запуск задачи
service string Сервис
lang string Язык на котором сейчас запущена таска
⚠ 400 Ошибка с данными запроса
Content-Type: application/json
Поле Тип Описание
error Обязательный string Код ошибки
localMessage Обязательный string Текст ошибки на языке пользователя
params object Дополнительные параметры ошибки
⚠ 403 Доступ запрещен
Content-Type: application/json
Поле Тип Описание
error Обязательный string Код ошибки
✗ 500 Внутренняя ошибка сервера
Content-Type: application/json
Поле Тип Описание
error Обязательный string Код ошибки
message string Описание ошибки
system string Системная ошибки парсинга данных запроса
Укажите ключ API в правом верхнем углу, чтобы попробовать использовать метод

Примеры кода

const axios = require('axios');

const params = {
  organizationId: 'АО "Торговый дом"',
};

const response = await axios.post('https://api.selsup.ru/api/promotion/update/${service}',
  {
    params,
    headers: {
      'Authorization': 'YOUR_API_KEY',
      'Content-Type': 'application/json'
    }
  }
);

console.log(response.data);
import axios from 'axios';

interface QueryParams {
  organizationId?: number;
}

const params: QueryParams = {
  organizationId: 'АО "Торговый дом"',
};

const response = await axios.post<any>('https://api.selsup.ru/api/promotion/update/${service}',
  {
    params,
    headers: {
      'Authorization': 'YOUR_API_KEY',
      'Content-Type': 'application/json'
    }
  }
);

console.log(response.data);
import requests

headers = {
    'Authorization': 'YOUR_API_KEY',
    'Content-Type': 'application/json'
}

params = {
    'organizationId': 'АО "Торговый дом"',
}

response = requests.post(
    'https://api.selsup.ru/api/promotion/update/${service}',
    headers=headers,
    params=params
)

print(response.json())
package main

import (
    "bytes"
    "encoding/json"
    "fmt"
    "net/http"
)

func main() {
    client := &http.Client{}

    req, _ := http.NewRequest("post", "https://api.selsup.ru/api/promotion/update/${service}?organizationId=%D0%90%D0%9E%20%22%D0%A2%D0%BE%D1%80%D0%B3%D0%BE%D0%B2%D1%8B%D0%B9%20%D0%B4%D0%BE%D0%BC%22", nil)
    req.Header.Set("Authorization", "YOUR_API_KEY")
    req.Header.Set("Content-Type", "application/json")

    resp, err := client.Do(req)
    if err != nil {
        panic(err)
    }
    defer resp.Body.Close()

    var result map[string]interface{}
    json.NewDecoder(resp.Body).Decode(&result)
    fmt.Println(result)
}
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.net.URI;

HttpClient client = HttpClient.newHttpClient();

HttpRequest request = HttpRequest.newBuilder()
    .uri(URI.create("https://api.selsup.ru/api/promotion/update/${service}?organizationId=%D0%90%D0%9E%20%22%D0%A2%D0%BE%D1%80%D0%B3%D0%BE%D0%B2%D1%8B%D0%B9%20%D0%B4%D0%BE%D0%BC%22"))
    .header("Authorization", "YOUR_API_KEY")
    .header("Content-Type", "application/json")
    .post(HttpRequest.BodyPublishers.noBody())
    .build();

HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
<?php
$curl = curl_init();

$params = [
    'organizationId' => 'АО "Торговый дом"',
];

$url = 'https://api.selsup.ru/api/promotion/update/${service}?' . http_build_query($params);

curl_setopt_array($curl, [
    CURLOPT_URL => $url,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST => 'post',
    CURLOPT_HTTPHEADER => [
        'Authorization: YOUR_API_KEY',
        'Content-Type: application/json'
    ]
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
?>
curl -X post \
  'https://api.selsup.ru/api/promotion/update/{service}?organizationId=%D0%90%D0%9E%20%22%D0%A2%D0%BE%D1%80%D0%B3%D0%BE%D0%B2%D1%8B%D0%B9%20%D0%B4%D0%BE%D0%BC%22' \
  -H 'Authorization: YOUR_API_KEY' \
  -H 'Content-Type: application/json'

🔗 Добавить удаляет товары из акции

Метод удаляет товары из акции
POST /api/promotion/deleteProductsInPromotion

Параметры запроса QUERY

Название Тип Обязательный Описание
promotionId integer Да Параметр promotionId
clientOrganizationId integer Да Параметр clientOrganizationId

Тело запроса *Обязательно

Content-Type: application/json
Массив из: ProductPromotion
Структура элемента:
ПолеТипОписание
categoryName string Категория
brandName string Бренд
subject string
purchasePrice number
deliveryCost number
additionalCost number
barcode string
instockQuantity integer
wildberriesStockCount integer
createdDate string
minPrice number
isDuplicate boolean
ozonArticle string
ozonStockCount integer
salesExpensesOnMpPercent number
taxeRate number
width integer
height integer
depth integer
ozonPurchasePercent number
warehouseRatio number
wildberriesCommission number Комиссия по тарифу FBM
wildberriesFbwCommission number Комиссия по тарифу FBW
wildberriesFbsCommission number Комиссия по тарифу FBS
wildberriesDbsCommission number Комиссия по тарифу DBS
wildberriesEdbsCommission number Комиссия по тарифу EDBS
wildberriesCAndCCommission number Комиссия по тарифу C&C
wildberriesBookingCommission number Комиссия за бронирование
wildberriesAdditionalExpenses number
ozonAdditionalExpenses number
ozonCommission number
wildberriesId integer
productId integer Идентификатор продукта
promotionId integer Идентификатор акции
ozonFbsCommission number Озон ФБС комиссия
ozonFboCommission number Озон ФБО комиссия
service string Сервис
acquiringPercent number Максимальный процент комиссии за эквайринг
currentPrice number Текущая цена со скидкой
currentPriceWithoutDiscount number Текущая цена без скидкой
plannedPrice number Планируемая цена под акцию
totalStockCount integer
commissionReduction number
profitDifference number
marginDifference number
markupDifference number
plannedAndMinPriceDiff number
incomeDifference number
currentDiscount number
productCreatedDate string
mainImageUrl string Ссылка на основное изображение
isProfitably boolean
taskId integer Идентификатор задачи
serviceArticle string Артикул на сервисе
article string Модель артикул
daysCountOnService integer Кол-во дней на сервисе
turnover integer Оборачиваемость
fboStock integer ФБО остаток
fbsStock integer ФБС остаток
newDiscountForPromotion number
saleLogistics number Логистика при продаже
returnLogistics number Обратная логистика
purchasePercent number Процент выкупа
totalLogistics number Логистика
commissions number Комиссия
currentProfit number Текущая прибыль
promotionProfit number Прибыль под акцию
currentMarginality number Текущая маржинальность
promotionMarginality number Маржинальность под акцию
currentMarkUp number Текущая наценка
promotionMarkUp number Наценка под акцию
additionalDiscountForPromotionRub number Дополнительная скидка под акции в руб
additionalDiscountForPromotionPercent number Дополнительная скидка под акции в %
isDeleted boolean Удаленный?
organizationId integer Идентификатор организации
clientId integer Идентификатор клиента
addMode string Тип добавления товара в акцию: автоматически или вручную продавцом.
ozonAverageExpenses number
isActive boolean Товар в акции или нет
changeName string Кто вносил корректировки
changeDate string Дата когда вносили изменения
productName string Название продукта
id integer Порядковый номер в общем списке, для фронта
totalCount integer Общее кол-во
serviceCard string Идентификатор продукта на сервисе
isNotFound boolean
isArchived boolean
productCommissions string

Тело ответа

✓ 200 OK
Content-Type: application/json
Тип ответа: OzonProduct
Элементы массива
Поле Тип Описание
product_id integer Нет Идентификатор товара.
action_price number Нет Цена товара по акции.
stock integer Нет Количество единиц товара в акции типа «Скидка на сток».
reason string Нет Причина, почему товар не добавлен в акцию.
⚠ 400 Ошибка с данными запроса
Content-Type: application/json
Поле Тип Описание
error Обязательный string Код ошибки
localMessage Обязательный string Текст ошибки на языке пользователя
params object Дополнительные параметры ошибки
⚠ 403 Доступ запрещен
Content-Type: application/json
Поле Тип Описание
error Обязательный string Код ошибки
✗ 500 Внутренняя ошибка сервера
Content-Type: application/json
Поле Тип Описание
error Обязательный string Код ошибки
message string Описание ошибки
system string Системная ошибки парсинга данных запроса
Укажите ключ API в правом верхнем углу, чтобы попробовать использовать метод

Примеры кода

const axios = require('axios');

const params = {
  promotionId: '123',
  clientOrganizationId: 'АО "Торговый дом"',
};

const response = await axios.post('https://api.selsup.ru/api/promotion/deleteProductsInPromotion',
  [
    {
      "categoryName": "Электроника",
      "brandName": "Бренд А",
      "subject": "Пример subject",
      "purchasePrice": 1999.99,
      "deliveryCost": 1500,
      "additionalCost": 1500,
      "barcode": "4600123456789",
      "instockQuantity": 10,
      "wildberriesStockCount": 42,
      "createdDate": "2024-01-15T10:30:00Z"
    }
  ],
  {
    params,
    headers: {
      'Authorization': 'YOUR_API_KEY',
      'Content-Type': 'application/json'
    }
  }
);

console.log(response.data);
import axios from 'axios';

interface QueryParams {
  promotionId?: number;
  clientOrganizationId?: number;
}

const params: QueryParams = {
  promotionId: '123',
  clientOrganizationId: 'АО "Торговый дом"',
};

const response = await axios.post<any>('https://api.selsup.ru/api/promotion/deleteProductsInPromotion',
  [
    {
      "categoryName": "Электроника",
      "brandName": "Бренд А",
      "subject": "Пример subject",
      "purchasePrice": 1999.99,
      "deliveryCost": 1500,
      "additionalCost": 1500,
      "barcode": "4600123456789",
      "instockQuantity": 10,
      "wildberriesStockCount": 42,
      "createdDate": "2024-01-15T10:30:00Z"
    }
  ],
  {
    params,
    headers: {
      'Authorization': 'YOUR_API_KEY',
      'Content-Type': 'application/json'
    }
  }
);

console.log(response.data);
import requests

headers = {
    'Authorization': 'YOUR_API_KEY',
    'Content-Type': 'application/json'
}

params = {
    'promotionId': '123',
    'clientOrganizationId': 'АО "Торговый дом"',
}

response = requests.post(
    'https://api.selsup.ru/api/promotion/deleteProductsInPromotion',
    headers=headers,
    params=params,
    json=[
    {
        'categoryName': 'Электроника',
        'brandName': 'Бренд А',
        'subject': 'Пример subject',
        'purchasePrice': 1999.99,
        'deliveryCost': 1500,
        'additionalCost': 1500,
        'barcode': '4600123456789',
        'instockQuantity': 10,
        'wildberriesStockCount': 42,
        'createdDate': '2024-01-15T10:30:00Z'
    }
]
)

print(response.json())
package main

import (
    "bytes"
    "encoding/json"
    "fmt"
    "net/http"
)

func main() {
    client := &http.Client{}

    payload := map[string]interface{}[
        {
                `categoryName`: `Электроника`,
                `brandName`: `Бренд А`,
                `subject`: `Пример subject`,
                `purchasePrice`: 1999.99,
                `deliveryCost`: 1500,
                `additionalCost`: 1500,
                `barcode`: `4600123456789`,
                `instockQuantity`: 10,
                `wildberriesStockCount`: 42,
                `createdDate`: `2024-01-15T10:30:00Z`
        }
]
    jsonData, _ := json.Marshal(payload)

    req, _ := http.NewRequest("post", "https://api.selsup.ru/api/promotion/deleteProductsInPromotion?promotionId=123&clientOrganizationId=%D0%90%D0%9E%20%22%D0%A2%D0%BE%D1%80%D0%B3%D0%BE%D0%B2%D1%8B%D0%B9%20%D0%B4%D0%BE%D0%BC%22", bytes.NewBuffer(jsonData))
    req.Header.Set("Authorization", "YOUR_API_KEY")
    req.Header.Set("Content-Type", "application/json")

    resp, err := client.Do(req)
    if err != nil {
        panic(err)
    }
    defer resp.Body.Close()

    var result map[string]interface{}
    json.NewDecoder(resp.Body).Decode(&result)
    fmt.Println(result)
}
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.net.URI;

HttpClient client = HttpClient.newHttpClient();

HttpRequest request = HttpRequest.newBuilder()
    .uri(URI.create("https://api.selsup.ru/api/promotion/deleteProductsInPromotion?promotionId=123&clientOrganizationId=%D0%90%D0%9E%20%22%D0%A2%D0%BE%D1%80%D0%B3%D0%BE%D0%B2%D1%8B%D0%B9%20%D0%B4%D0%BE%D0%BC%22"))
    .header("Authorization", "YOUR_API_KEY")
    .header("Content-Type", "application/json")
    .post(HttpRequest.BodyPublishers.ofString(
        "[{\"categoryName\":\"Электроника\",\"brandName\":\"Бренд А\",\"subject\":\"Пример subject\",\"purchasePrice\":1999.99,\"deliveryCost\":1500,\"additionalCost\":1500,\"barcode\":\"4600123456789\",\"instockQuantity\":10,\"wildberriesStockCount\":42,\"createdDate\":\"2024-01-15T10:30:00Z\"}]"
    ))
    .build();

HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
<?php
$curl = curl_init();

$params = [
    'promotionId' => '123',
    'clientOrganizationId' => 'АО "Торговый дом"',
];

$url = 'https://api.selsup.ru/api/promotion/deleteProductsInPromotion?' . http_build_query($params);

curl_setopt_array($curl, [
    CURLOPT_URL => $url,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST => 'post',
    CURLOPT_POSTFIELDS => json_encode([
    {
        'categoryName': 'Электроника',
        'brandName': 'Бренд А',
        'subject': 'Пример subject',
        'purchasePrice': 1999.99,
        'deliveryCost': 1500,
        'additionalCost': 1500,
        'barcode': '4600123456789',
        'instockQuantity': 10,
        'wildberriesStockCount': 42,
        'createdDate': '2024-01-15T10:30:00Z'
    }
]),
    CURLOPT_HTTPHEADER => [
        'Authorization: YOUR_API_KEY',
        'Content-Type: application/json'
    ]
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
?>
curl -X post \
  'https://api.selsup.ru/api/promotion/deleteProductsInPromotion?promotionId=123&clientOrganizationId=%D0%90%D0%9E%20%22%D0%A2%D0%BE%D1%80%D0%B3%D0%BE%D0%B2%D1%8B%D0%B9%20%D0%B4%D0%BE%D0%BC%22' \
  -H 'Authorization: YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '[
  {
    "categoryName": "Электроника",
    "brandName": "Бренд А",
    "subject": "Пример subject",
    "purchasePrice": 1999.99,
    "deliveryCost": 1500,
    "additionalCost": 1500,
    "barcode": "4600123456789",
    "instockQuantity": 10,
    "wildberriesStockCount": 42,
    "createdDate": "2024-01-15T10:30:00Z"
  }
]'

🔗 Добавить товары в акцию

Метод добавляет товары в акцию
POST /api/promotion/addProductsInPromotion

Параметры запроса QUERY

Название Тип Обязательный Описание
promotionId integer Да Параметр promotionId
clientOrganizationId integer Да Параметр clientOrganizationId

Тело запроса *Обязательно

Content-Type: application/json
Массив из: ProductPromotion
Структура элемента:
ПолеТипОписание
categoryName string Категория
brandName string Бренд
subject string
purchasePrice number
deliveryCost number
additionalCost number
barcode string
instockQuantity integer
wildberriesStockCount integer
createdDate string
minPrice number
isDuplicate boolean
ozonArticle string
ozonStockCount integer
salesExpensesOnMpPercent number
taxeRate number
width integer
height integer
depth integer
ozonPurchasePercent number
warehouseRatio number
wildberriesCommission number Комиссия по тарифу FBM
wildberriesFbwCommission number Комиссия по тарифу FBW
wildberriesFbsCommission number Комиссия по тарифу FBS
wildberriesDbsCommission number Комиссия по тарифу DBS
wildberriesEdbsCommission number Комиссия по тарифу EDBS
wildberriesCAndCCommission number Комиссия по тарифу C&C
wildberriesBookingCommission number Комиссия за бронирование
wildberriesAdditionalExpenses number
ozonAdditionalExpenses number
ozonCommission number
wildberriesId integer
productId integer Идентификатор продукта
promotionId integer Идентификатор акции
ozonFbsCommission number Озон ФБС комиссия
ozonFboCommission number Озон ФБО комиссия
service string Сервис
acquiringPercent number Максимальный процент комиссии за эквайринг
currentPrice number Текущая цена со скидкой
currentPriceWithoutDiscount number Текущая цена без скидкой
plannedPrice number Планируемая цена под акцию
totalStockCount integer
commissionReduction number
profitDifference number
marginDifference number
markupDifference number
plannedAndMinPriceDiff number
incomeDifference number
currentDiscount number
productCreatedDate string
mainImageUrl string Ссылка на основное изображение
isProfitably boolean
taskId integer Идентификатор задачи
serviceArticle string Артикул на сервисе
article string Модель артикул
daysCountOnService integer Кол-во дней на сервисе
turnover integer Оборачиваемость
fboStock integer ФБО остаток
fbsStock integer ФБС остаток
newDiscountForPromotion number
saleLogistics number Логистика при продаже
returnLogistics number Обратная логистика
purchasePercent number Процент выкупа
totalLogistics number Логистика
commissions number Комиссия
currentProfit number Текущая прибыль
promotionProfit number Прибыль под акцию
currentMarginality number Текущая маржинальность
promotionMarginality number Маржинальность под акцию
currentMarkUp number Текущая наценка
promotionMarkUp number Наценка под акцию
additionalDiscountForPromotionRub number Дополнительная скидка под акции в руб
additionalDiscountForPromotionPercent number Дополнительная скидка под акции в %
isDeleted boolean Удаленный?
organizationId integer Идентификатор организации
clientId integer Идентификатор клиента
addMode string Тип добавления товара в акцию: автоматически или вручную продавцом.
ozonAverageExpenses number
isActive boolean Товар в акции или нет
changeName string Кто вносил корректировки
changeDate string Дата когда вносили изменения
productName string Название продукта
id integer Порядковый номер в общем списке, для фронта
totalCount integer Общее кол-во
serviceCard string Идентификатор продукта на сервисе
isNotFound boolean
isArchived boolean
productCommissions string

Тело ответа

✓ 200 OK
Content-Type: application/json
Тип ответа: OzonProduct
Элементы массива
Поле Тип Описание
product_id integer Нет Идентификатор товара.
action_price number Нет Цена товара по акции.
stock integer Нет Количество единиц товара в акции типа «Скидка на сток».
reason string Нет Причина, почему товар не добавлен в акцию.
⚠ 400 Ошибка с данными запроса
Content-Type: application/json
Поле Тип Описание
error Обязательный string Код ошибки
localMessage Обязательный string Текст ошибки на языке пользователя
params object Дополнительные параметры ошибки
⚠ 403 Доступ запрещен
Content-Type: application/json
Поле Тип Описание
error Обязательный string Код ошибки
✗ 500 Внутренняя ошибка сервера
Content-Type: application/json
Поле Тип Описание
error Обязательный string Код ошибки
message string Описание ошибки
system string Системная ошибки парсинга данных запроса
Укажите ключ API в правом верхнем углу, чтобы попробовать использовать метод

Примеры кода

const axios = require('axios');

const params = {
  promotionId: '123',
  clientOrganizationId: 'АО "Торговый дом"',
};

const response = await axios.post('https://api.selsup.ru/api/promotion/addProductsInPromotion',
  [
    {
      "categoryName": "Электроника",
      "brandName": "Бренд А",
      "subject": "Пример subject",
      "purchasePrice": 1999.99,
      "deliveryCost": 1500,
      "additionalCost": 1500,
      "barcode": "4600123456789",
      "instockQuantity": 10,
      "wildberriesStockCount": 42,
      "createdDate": "2024-01-15T10:30:00Z"
    }
  ],
  {
    params,
    headers: {
      'Authorization': 'YOUR_API_KEY',
      'Content-Type': 'application/json'
    }
  }
);

console.log(response.data);
import axios from 'axios';

interface QueryParams {
  promotionId?: number;
  clientOrganizationId?: number;
}

const params: QueryParams = {
  promotionId: '123',
  clientOrganizationId: 'АО "Торговый дом"',
};

const response = await axios.post<any>('https://api.selsup.ru/api/promotion/addProductsInPromotion',
  [
    {
      "categoryName": "Электроника",
      "brandName": "Бренд А",
      "subject": "Пример subject",
      "purchasePrice": 1999.99,
      "deliveryCost": 1500,
      "additionalCost": 1500,
      "barcode": "4600123456789",
      "instockQuantity": 10,
      "wildberriesStockCount": 42,
      "createdDate": "2024-01-15T10:30:00Z"
    }
  ],
  {
    params,
    headers: {
      'Authorization': 'YOUR_API_KEY',
      'Content-Type': 'application/json'
    }
  }
);

console.log(response.data);
import requests

headers = {
    'Authorization': 'YOUR_API_KEY',
    'Content-Type': 'application/json'
}

params = {
    'promotionId': '123',
    'clientOrganizationId': 'АО "Торговый дом"',
}

response = requests.post(
    'https://api.selsup.ru/api/promotion/addProductsInPromotion',
    headers=headers,
    params=params,
    json=[
    {
        'categoryName': 'Электроника',
        'brandName': 'Бренд А',
        'subject': 'Пример subject',
        'purchasePrice': 1999.99,
        'deliveryCost': 1500,
        'additionalCost': 1500,
        'barcode': '4600123456789',
        'instockQuantity': 10,
        'wildberriesStockCount': 42,
        'createdDate': '2024-01-15T10:30:00Z'
    }
]
)

print(response.json())
package main

import (
    "bytes"
    "encoding/json"
    "fmt"
    "net/http"
)

func main() {
    client := &http.Client{}

    payload := map[string]interface{}[
        {
                `categoryName`: `Электроника`,
                `brandName`: `Бренд А`,
                `subject`: `Пример subject`,
                `purchasePrice`: 1999.99,
                `deliveryCost`: 1500,
                `additionalCost`: 1500,
                `barcode`: `4600123456789`,
                `instockQuantity`: 10,
                `wildberriesStockCount`: 42,
                `createdDate`: `2024-01-15T10:30:00Z`
        }
]
    jsonData, _ := json.Marshal(payload)

    req, _ := http.NewRequest("post", "https://api.selsup.ru/api/promotion/addProductsInPromotion?promotionId=123&clientOrganizationId=%D0%90%D0%9E%20%22%D0%A2%D0%BE%D1%80%D0%B3%D0%BE%D0%B2%D1%8B%D0%B9%20%D0%B4%D0%BE%D0%BC%22", bytes.NewBuffer(jsonData))
    req.Header.Set("Authorization", "YOUR_API_KEY")
    req.Header.Set("Content-Type", "application/json")

    resp, err := client.Do(req)
    if err != nil {
        panic(err)
    }
    defer resp.Body.Close()

    var result map[string]interface{}
    json.NewDecoder(resp.Body).Decode(&result)
    fmt.Println(result)
}
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.net.URI;

HttpClient client = HttpClient.newHttpClient();

HttpRequest request = HttpRequest.newBuilder()
    .uri(URI.create("https://api.selsup.ru/api/promotion/addProductsInPromotion?promotionId=123&clientOrganizationId=%D0%90%D0%9E%20%22%D0%A2%D0%BE%D1%80%D0%B3%D0%BE%D0%B2%D1%8B%D0%B9%20%D0%B4%D0%BE%D0%BC%22"))
    .header("Authorization", "YOUR_API_KEY")
    .header("Content-Type", "application/json")
    .post(HttpRequest.BodyPublishers.ofString(
        "[{\"categoryName\":\"Электроника\",\"brandName\":\"Бренд А\",\"subject\":\"Пример subject\",\"purchasePrice\":1999.99,\"deliveryCost\":1500,\"additionalCost\":1500,\"barcode\":\"4600123456789\",\"instockQuantity\":10,\"wildberriesStockCount\":42,\"createdDate\":\"2024-01-15T10:30:00Z\"}]"
    ))
    .build();

HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
<?php
$curl = curl_init();

$params = [
    'promotionId' => '123',
    'clientOrganizationId' => 'АО "Торговый дом"',
];

$url = 'https://api.selsup.ru/api/promotion/addProductsInPromotion?' . http_build_query($params);

curl_setopt_array($curl, [
    CURLOPT_URL => $url,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST => 'post',
    CURLOPT_POSTFIELDS => json_encode([
    {
        'categoryName': 'Электроника',
        'brandName': 'Бренд А',
        'subject': 'Пример subject',
        'purchasePrice': 1999.99,
        'deliveryCost': 1500,
        'additionalCost': 1500,
        'barcode': '4600123456789',
        'instockQuantity': 10,
        'wildberriesStockCount': 42,
        'createdDate': '2024-01-15T10:30:00Z'
    }
]),
    CURLOPT_HTTPHEADER => [
        'Authorization: YOUR_API_KEY',
        'Content-Type: application/json'
    ]
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
?>
curl -X post \
  'https://api.selsup.ru/api/promotion/addProductsInPromotion?promotionId=123&clientOrganizationId=%D0%90%D0%9E%20%22%D0%A2%D0%BE%D1%80%D0%B3%D0%BE%D0%B2%D1%8B%D0%B9%20%D0%B4%D0%BE%D0%BC%22' \
  -H 'Authorization: YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '[
  {
    "categoryName": "Электроника",
    "brandName": "Бренд А",
    "subject": "Пример subject",
    "purchasePrice": 1999.99,
    "deliveryCost": 1500,
    "additionalCost": 1500,
    "barcode": "4600123456789",
    "instockQuantity": 10,
    "wildberriesStockCount": 42,
    "createdDate": "2024-01-15T10:30:00Z"
  }
]'

🔗 Создать акцию

Метод создает акцию
POST /api/promotion/

Тело запроса *Обязательно

Content-Type: application/json
ПолеТипОписание
promotionId integer Идентификатор акции
id integer Порядковый номер в списке запроса
totalCount integer Общее кол-во акций
name string Название акции
dateStart string Дата и время начало
dateEnd string Дата и время окончания
changeCommission boolean Меняется ли комиссия или нет
changeCommissionAmount number На какой процент сокращается комиссия
createdDate string Дата создания
service string Сервис
isDeleted boolean Идентификатор удаления
description string Описание акции
promotionIdOnMp integer Идентификатор акции на МП
clientId integer Идентификатор клиента
organizationId integer Идентификатор организации
candidateCount integer Кол-во кандидатов в акцию
inPromotionCount integer Кол-во участников в акции
auto boolean Признак автоматической акции
hotsale boolean Признак hotsale акции
candidateCountOnMp integer Кол-во кандидатов в акции на маркетплейсе
inPromotionCountOnMp integer Кол-во участников в акции на маркетплейсе

Тело ответа

✓ 200 OK
Content-Type: application/json
Поле Тип Описание
promotionId integer Идентификатор акции
id integer Порядковый номер в списке запроса
totalCount integer Общее кол-во акций
name string Название акции
dateStart string Дата и время начало
dateEnd string Дата и время окончания
changeCommission boolean Меняется ли комиссия или нет
changeCommissionAmount number На какой процент сокращается комиссия
createdDate string Дата создания
service string Сервис
isDeleted boolean Идентификатор удаления
description string Описание акции
promotionIdOnMp integer Идентификатор акции на МП
clientId integer Идентификатор клиента
organizationId integer Идентификатор организации
candidateCount integer Кол-во кандидатов в акцию
inPromotionCount integer Кол-во участников в акции
auto boolean Признак автоматической акции
hotsale boolean Признак hotsale акции
candidateCountOnMp integer Кол-во кандидатов в акции на маркетплейсе
inPromotionCountOnMp integer Кол-во участников в акции на маркетплейсе
⚠ 400 Ошибка с данными запроса
Content-Type: application/json
Поле Тип Описание
error Обязательный string Код ошибки
localMessage Обязательный string Текст ошибки на языке пользователя
params object Дополнительные параметры ошибки
⚠ 403 Доступ запрещен
Content-Type: application/json
Поле Тип Описание
error Обязательный string Код ошибки
✗ 500 Внутренняя ошибка сервера
Content-Type: application/json
Поле Тип Описание
error Обязательный string Код ошибки
message string Описание ошибки
system string Системная ошибки парсинга данных запроса
Укажите ключ API в правом верхнем углу, чтобы попробовать использовать метод

Примеры кода

const axios = require('axios');

const response = await axios.post('https://api.selsup.ru/api/promotion/',
  {
    "promotionId": 123,
    "id": "Иванович",
    "totalCount": 10000,
    "name": "Иван",
    "dateStart": "2024-01-15T10:30:00Z",
    "dateEnd": "2024-01-15T10:30:00Z",
    "changeCommission": true,
    "changeCommissionAmount": 2500,
    "createdDate": "2024-01-15T10:30:00Z",
    "service": "NONE"
  },
  {
    headers: {
      'Authorization': 'YOUR_API_KEY',
      'Content-Type': 'application/json'
    }
  }
);

console.log(response.data);
import axios from 'axios';

const response = await axios.post<any>('https://api.selsup.ru/api/promotion/',
  {
    "promotionId": 123,
    "id": "Иванович",
    "totalCount": 10000,
    "name": "Иван",
    "dateStart": "2024-01-15T10:30:00Z",
    "dateEnd": "2024-01-15T10:30:00Z",
    "changeCommission": true,
    "changeCommissionAmount": 2500,
    "createdDate": "2024-01-15T10:30:00Z",
    "service": "NONE"
  },
  {
    headers: {
      'Authorization': 'YOUR_API_KEY',
      'Content-Type': 'application/json'
    }
  }
);

console.log(response.data);
import requests

headers = {
    'Authorization': 'YOUR_API_KEY',
    'Content-Type': 'application/json'
}

response = requests.post(
    'https://api.selsup.ru/api/promotion/',
    headers=headers,
    json={
    'promotionId': 123,
    'id': 'Иванович',
    'totalCount': 10000,
    'name': 'Иван',
    'dateStart': '2024-01-15T10:30:00Z',
    'dateEnd': '2024-01-15T10:30:00Z',
    'changeCommission': true,
    'changeCommissionAmount': 2500,
    'createdDate': '2024-01-15T10:30:00Z',
    'service': 'NONE'
}
)

print(response.json())
package main

import (
    "bytes"
    "encoding/json"
    "fmt"
    "net/http"
)

func main() {
    client := &http.Client{}

    payload := map[string]interface{}{
        `promotionId`: 123,
        `id`: `Иванович`,
        `totalCount`: 10000,
        `name`: `Иван`,
        `dateStart`: `2024-01-15T10:30:00Z`,
        `dateEnd`: `2024-01-15T10:30:00Z`,
        `changeCommission`: true,
        `changeCommissionAmount`: 2500,
        `createdDate`: `2024-01-15T10:30:00Z`,
        `service`: `NONE`
}
    jsonData, _ := json.Marshal(payload)

    req, _ := http.NewRequest("post", "https://api.selsup.ru/api/promotion/", bytes.NewBuffer(jsonData))
    req.Header.Set("Authorization", "YOUR_API_KEY")
    req.Header.Set("Content-Type", "application/json")

    resp, err := client.Do(req)
    if err != nil {
        panic(err)
    }
    defer resp.Body.Close()

    var result map[string]interface{}
    json.NewDecoder(resp.Body).Decode(&result)
    fmt.Println(result)
}
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.net.URI;

HttpClient client = HttpClient.newHttpClient();

HttpRequest request = HttpRequest.newBuilder()
    .uri(URI.create("https://api.selsup.ru/api/promotion/"))
    .header("Authorization", "YOUR_API_KEY")
    .header("Content-Type", "application/json")
    .post(HttpRequest.BodyPublishers.ofString(
        "{\"promotionId\":123,\"id\":\"Иванович\",\"totalCount\":10000,\"name\":\"Иван\",\"dateStart\":\"2024-01-15T10:30:00Z\",\"dateEnd\":\"2024-01-15T10:30:00Z\",\"changeCommission\":true,\"changeCommissionAmount\":2500,\"createdDate\":\"2024-01-15T10:30:00Z\",\"service\":\"NONE\"}"
    ))
    .build();

HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
<?php
$curl = curl_init();

curl_setopt_array($curl, [
    CURLOPT_URL => 'https://api.selsup.ru/api/promotion/',
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST => 'post',
    CURLOPT_POSTFIELDS => json_encode({
    'promotionId': 123,
    'id': 'Иванович',
    'totalCount': 10000,
    'name': 'Иван',
    'dateStart': '2024-01-15T10:30:00Z',
    'dateEnd': '2024-01-15T10:30:00Z',
    'changeCommission': true,
    'changeCommissionAmount': 2500,
    'createdDate': '2024-01-15T10:30:00Z',
    'service': 'NONE'
}),
    CURLOPT_HTTPHEADER => [
        'Authorization: YOUR_API_KEY',
        'Content-Type: application/json'
    ]
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
?>
curl -X post \
  'https://api.selsup.ru/api/promotion/' \
  -H 'Authorization: YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{
  "promotionId": 123,
  "id": "Иванович",
  "totalCount": 10000,
  "name": "Иван",
  "dateStart": "2024-01-15T10:30:00Z",
  "dateEnd": "2024-01-15T10:30:00Z",
  "changeCommission": true,
  "changeCommissionAmount": 2500,
  "createdDate": "2024-01-15T10:30:00Z",
  "service": "NONE"
}'

🔗 Поиск товаров в акциях

Метод возвращает все продукты в акции по фильтру
GET /api/promotion/product/find

Параметры запроса QUERY

Название Тип Обязательный Описание
dateFrom Date Нет Дата начала акции
dateTo Date Нет Дата окончания акции
promotionId integer Нет Идентификатор акции
service "NONE""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" Нет Сервис
reDownload boolean Нет Идентификатор, что нужно перезакачать данные с МП
clientOrganizationId integer Нет Идентификатор организации
minMargin number Нет Минимальная маржа, руб
minMarginPercent number Нет Минимальная маржинальность, %
isActive boolean Нет передавать только если надо вывести уже примененные акции, в таком случае передается true. В остальных случаях можно не передавать, по дефолту будет false
isDeleted boolean Нет Параметр isDeleted
query string Нет по названию или артикулу товара
promotionIdOnMp integer Нет Идентификатор акции на сервисе
categoryId integer Нет Идентификатор категории
categoryIds integer Нет Идентификатор категорий
clientId integer Нет Идентификатор клиента
inStock boolean Нет В наличии
isNotFound boolean Нет Ошибочные товары (карточки не были найдены)
limit integer Нет Ограничение на количество записей. Максимальное значение - 500
page integer Нет Номер страницы начиная с 1
count boolean Нет Возвратить в ответе общее количество записей
sortBy "CATEGORYNAME""BRANDNAME""PRODUCTNAME""ARTICLE""BARCODE""SERVICEARTICLE""CURRENTPRICEWITHOUTDISCOUNT""CURRENTPRICE""PLANNEDPRICE""CURRENTDISCOUNT""NEWDISCOUNTFORPROMOTION""CURRENTPROFIT""PROMOTIONPROFIT""CURRENTMARGINALITY""PROMOTIONMARGINALITY""CURRENTMARKUP""PLANNEDMARKUPRATIO""OZONPRODUCTIDONMP""WILDBERRIESPRODUCTIDONMP""PURCHASEPERCENT""FBOSTOCK""FBSSTOCK""TURNOVER" Нет Поле для сортировки
ascending boolean Нет Порядок сортировки - по возрастанию?. Работает только при получении списка.

Тело ответа

✓ 200 OK
Content-Type: application/json
Поле Тип Описание
rows Array of ProductPromotion Строки с результатом поиска
Структура ProductPromotion
Поле Тип Описание
categoryName string Категория
brandName string Бренд
subject string
purchasePrice number
deliveryCost number
additionalCost number
barcode string
instockQuantity integer
wildberriesStockCount integer
createdDate string
minPrice number
isDuplicate boolean
ozonArticle string
ozonStockCount integer
salesExpensesOnMpPercent number
taxeRate number
width integer
height integer
depth integer
ozonPurchasePercent number
warehouseRatio number
wildberriesCommission number Комиссия по тарифу FBM
wildberriesFbwCommission number Комиссия по тарифу FBW
wildberriesFbsCommission number Комиссия по тарифу FBS
wildberriesDbsCommission number Комиссия по тарифу DBS
wildberriesEdbsCommission number Комиссия по тарифу EDBS
wildberriesCAndCCommission number Комиссия по тарифу C&C
wildberriesBookingCommission number Комиссия за бронирование
wildberriesAdditionalExpenses number
ozonAdditionalExpenses number
ozonCommission number
wildberriesId integer
productId integer Идентификатор продукта
promotionId integer Идентификатор акции
ozonFbsCommission number Озон ФБС комиссия
ozonFboCommission number Озон ФБО комиссия
service string Сервис
acquiringPercent number Максимальный процент комиссии за эквайринг
currentPrice number Текущая цена со скидкой
currentPriceWithoutDiscount number Текущая цена без скидкой
plannedPrice number Планируемая цена под акцию
totalStockCount integer
commissionReduction number
profitDifference number
marginDifference number
markupDifference number
plannedAndMinPriceDiff number
incomeDifference number
currentDiscount number
productCreatedDate string
mainImageUrl string Ссылка на основное изображение
isProfitably boolean
taskId integer Идентификатор задачи
serviceArticle string Артикул на сервисе
article string Модель артикул
daysCountOnService integer Кол-во дней на сервисе
turnover integer Оборачиваемость
fboStock integer ФБО остаток
fbsStock integer ФБС остаток
newDiscountForPromotion number
saleLogistics number Логистика при продаже
returnLogistics number Обратная логистика
purchasePercent number Процент выкупа
totalLogistics number Логистика
commissions number Комиссия
currentProfit number Текущая прибыль
promotionProfit number Прибыль под акцию
currentMarginality number Текущая маржинальность
promotionMarginality number Маржинальность под акцию
currentMarkUp number Текущая наценка
promotionMarkUp number Наценка под акцию
additionalDiscountForPromotionRub number Дополнительная скидка под акции в руб
additionalDiscountForPromotionPercent number Дополнительная скидка под акции в %
isDeleted boolean Удаленный?
organizationId integer Идентификатор организации
clientId integer Идентификатор клиента
addMode string Тип добавления товара в акцию: автоматически или вручную продавцом.
ozonAverageExpenses number
isActive boolean Товар в акции или нет
changeName string Кто вносил корректировки
changeDate string Дата когда вносили изменения
productName string Название продукта
id integer Порядковый номер в общем списке, для фронта
totalCount integer Общее кол-во
serviceCard string Идентификатор продукта на сервисе
isNotFound boolean
isArchived boolean
productCommissions string
total integer Общее количество найденных записей. Возвращается только, когда count = true
page integer Номер запрошенной страницы
hasNextPage boolean Есть ли следующая страница
emptyPurchase integer Показатель пустой закупочной цены
⚠ 400 Ошибка с данными запроса
Content-Type: application/json
Поле Тип Описание
error Обязательный string Код ошибки
localMessage Обязательный string Текст ошибки на языке пользователя
params object Дополнительные параметры ошибки
⚠ 403 Доступ запрещен
Content-Type: application/json
Поле Тип Описание
error Обязательный string Код ошибки
✗ 500 Внутренняя ошибка сервера
Content-Type: application/json
Поле Тип Описание
error Обязательный string Код ошибки
message string Описание ошибки
system string Системная ошибки парсинга данных запроса
Укажите ключ API в правом верхнем углу, чтобы попробовать использовать метод

Примеры кода

const axios = require('axios');

const params = {
  dateFrom: '2024-01-15T10:30:00Z',
  dateTo: '2024-01-15T10:30:00Z',
  promotionId: '123',
  service: 'NONE',
  reDownload: 'true',
  clientOrganizationId: 'АО "Торговый дом"',
  minMargin: '1',
  minMarginPercent: '0.15',
  isActive: 'true',
  isDeleted: 'false',
  query: 'Пример query',
  promotionIdOnMp: '123',
  categoryId: '123',
  categoryIds: '',
  clientId: '123',
  inStock: 'true',
  isNotFound: 'true',
  limit: '100',
  page: '1',
  count: 'Россия',
  sortBy: 'CATEGORYNAME',
  ascending: 'true',
};

const response = await axios.get('https://api.selsup.ru/api/promotion/product/find',
  {
    params,
    headers: {
      'Authorization': 'YOUR_API_KEY',
      'Content-Type': 'application/json'
    }
  }
);

console.log(response.data);
import axios from 'axios';

interface QueryParams {
  dateFrom?: string;
  dateTo?: string;
  promotionId?: number;
  service?: string;
  reDownload?: string;
  clientOrganizationId?: number;
  minMargin?: number;
  minMarginPercent?: number;
  isActive?: string;
  isDeleted?: string;
  query?: string;
  promotionIdOnMp?: number;
  categoryId?: number;
  categoryIds?: string;
  clientId?: number;
  inStock?: string;
  isNotFound?: string;
  limit?: number;
  page?: number;
  count?: string;
  sortBy?: string;
  ascending?: string;
}

const params: QueryParams = {
  dateFrom: '2024-01-15T10:30:00Z',
  dateTo: '2024-01-15T10:30:00Z',
  promotionId: '123',
  service: 'NONE',
  reDownload: 'true',
  clientOrganizationId: 'АО "Торговый дом"',
  minMargin: '1',
  minMarginPercent: '0.15',
  isActive: 'true',
  isDeleted: 'false',
  query: 'Пример query',
  promotionIdOnMp: '123',
  categoryId: '123',
  categoryIds: '',
  clientId: '123',
  inStock: 'true',
  isNotFound: 'true',
  limit: '100',
  page: '1',
  count: 'Россия',
  sortBy: 'CATEGORYNAME',
  ascending: 'true',
};

const response = await axios.get<any>('https://api.selsup.ru/api/promotion/product/find',
  {
    params,
    headers: {
      'Authorization': 'YOUR_API_KEY',
      'Content-Type': 'application/json'
    }
  }
);

console.log(response.data);
import requests

headers = {
    'Authorization': 'YOUR_API_KEY',
    'Content-Type': 'application/json'
}

params = {
    'dateFrom': '2024-01-15T10:30:00Z',
    'dateTo': '2024-01-15T10:30:00Z',
    'promotionId': '123',
    'service': 'NONE',
    'reDownload': 'true',
    'clientOrganizationId': 'АО "Торговый дом"',
    'minMargin': '1',
    'minMarginPercent': '0.15',
    'isActive': 'true',
    'isDeleted': 'false',
    'query': 'Пример query',
    'promotionIdOnMp': '123',
    'categoryId': '123',
    'categoryIds': '',
    'clientId': '123',
    'inStock': 'true',
    'isNotFound': 'true',
    'limit': '100',
    'page': '1',
    'count': 'Россия',
    'sortBy': 'CATEGORYNAME',
    'ascending': 'true',
}

response = requests.get(
    'https://api.selsup.ru/api/promotion/product/find',
    headers=headers,
    params=params
)

print(response.json())
package main

import (
    "bytes"
    "encoding/json"
    "fmt"
    "net/http"
)

func main() {
    client := &http.Client{}

    req, _ := http.NewRequest("get", "https://api.selsup.ru/api/promotion/product/find?dateFrom=2024-01-15T10%3A30%3A00Z&dateTo=2024-01-15T10%3A30%3A00Z&promotionId=123&service=NONE&reDownload=true&clientOrganizationId=%D0%90%D0%9E%20%22%D0%A2%D0%BE%D1%80%D0%B3%D0%BE%D0%B2%D1%8B%D0%B9%20%D0%B4%D0%BE%D0%BC%22&minMargin=1&minMarginPercent=0.15&isActive=true&isDeleted=false&query=%D0%9F%D1%80%D0%B8%D0%BC%D0%B5%D1%80%20query&promotionIdOnMp=123&categoryId=123&categoryIds=&clientId=123&inStock=true&isNotFound=true&limit=100&page=1&count=%D0%A0%D0%BE%D1%81%D1%81%D0%B8%D1%8F&sortBy=CATEGORYNAME&ascending=true", nil)
    req.Header.Set("Authorization", "YOUR_API_KEY")
    req.Header.Set("Content-Type", "application/json")

    resp, err := client.Do(req)
    if err != nil {
        panic(err)
    }
    defer resp.Body.Close()

    var result map[string]interface{}
    json.NewDecoder(resp.Body).Decode(&result)
    fmt.Println(result)
}
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.net.URI;

HttpClient client = HttpClient.newHttpClient();

HttpRequest request = HttpRequest.newBuilder()
    .uri(URI.create("https://api.selsup.ru/api/promotion/product/find?dateFrom=2024-01-15T10%3A30%3A00Z&dateTo=2024-01-15T10%3A30%3A00Z&promotionId=123&service=NONE&reDownload=true&clientOrganizationId=%D0%90%D0%9E%20%22%D0%A2%D0%BE%D1%80%D0%B3%D0%BE%D0%B2%D1%8B%D0%B9%20%D0%B4%D0%BE%D0%BC%22&minMargin=1&minMarginPercent=0.15&isActive=true&isDeleted=false&query=%D0%9F%D1%80%D0%B8%D0%BC%D0%B5%D1%80%20query&promotionIdOnMp=123&categoryId=123&categoryIds=&clientId=123&inStock=true&isNotFound=true&limit=100&page=1&count=%D0%A0%D0%BE%D1%81%D1%81%D0%B8%D1%8F&sortBy=CATEGORYNAME&ascending=true"))
    .header("Authorization", "YOUR_API_KEY")
    .header("Content-Type", "application/json")
    .get(HttpRequest.BodyPublishers.noBody())
    .build();

HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
<?php
$curl = curl_init();

$params = [
    'dateFrom' => '2024-01-15T10:30:00Z',
    'dateTo' => '2024-01-15T10:30:00Z',
    'promotionId' => '123',
    'service' => 'NONE',
    'reDownload' => 'true',
    'clientOrganizationId' => 'АО "Торговый дом"',
    'minMargin' => '1',
    'minMarginPercent' => '0.15',
    'isActive' => 'true',
    'isDeleted' => 'false',
    'query' => 'Пример query',
    'promotionIdOnMp' => '123',
    'categoryId' => '123',
    'categoryIds' => '',
    'clientId' => '123',
    'inStock' => 'true',
    'isNotFound' => 'true',
    'limit' => '100',
    'page' => '1',
    'count' => 'Россия',
    'sortBy' => 'CATEGORYNAME',
    'ascending' => 'true',
];

$url = 'https://api.selsup.ru/api/promotion/product/find?' . http_build_query($params);

curl_setopt_array($curl, [
    CURLOPT_URL => $url,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST => 'get',
    CURLOPT_HTTPHEADER => [
        'Authorization: YOUR_API_KEY',
        'Content-Type: application/json'
    ]
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
?>
curl -X get \
  'https://api.selsup.ru/api/promotion/product/find?dateFrom=2024-01-15T10%3A30%3A00Z&dateTo=2024-01-15T10%3A30%3A00Z&promotionId=123&service=NONE&reDownload=true&clientOrganizationId=%D0%90%D0%9E%20%22%D0%A2%D0%BE%D1%80%D0%B3%D0%BE%D0%B2%D1%8B%D0%B9%20%D0%B4%D0%BE%D0%BC%22&minMargin=1&minMarginPercent=0.15&isActive=true&isDeleted=value&query=%D0%9F%D1%80%D0%B8%D0%BC%D0%B5%D1%80%20query&promotionIdOnMp=123&categoryId=123&categoryIds=&clientId=123&inStock=true&isNotFound=true&limit=100&page=1&count=%D0%A0%D0%BE%D1%81%D1%81%D0%B8%D1%8F&sortBy=CATEGORYNAME&ascending=true' \
  -H 'Authorization: YOUR_API_KEY' \
  -H 'Content-Type: application/json'

🔗 Поиск акции

Метод возвращает все акции по фильтру
GET /api/promotion/find

Параметры запроса QUERY

Название Тип Обязательный Описание
dateFrom Date Нет Дата начала акции
dateTo Date Нет Дата окончания акции
promotionId integer Нет Идентификатор акции
service "NONE""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" Нет Сервис
reDownload boolean Нет Идентификатор, что нужно перезакачать данные с МП
clientOrganizationId integer Нет Идентификатор организации
minMargin number Нет Минимальная маржа, руб
minMarginPercent number Нет Минимальная маржинальность, %
isActive boolean Нет передавать только если надо вывести уже примененные акции, в таком случае передается true. В остальных случаях можно не передавать, по дефолту будет false
isDeleted boolean Нет Параметр isDeleted
query string Нет по названию или артикулу товара
promotionIdOnMp integer Нет Идентификатор акции на сервисе
categoryId integer Нет Идентификатор категории
categoryIds integer Нет Идентификатор категорий
clientId integer Нет Идентификатор клиента
inStock boolean Нет В наличии
isNotFound boolean Нет Ошибочные товары (карточки не были найдены)
limit integer Нет Ограничение на количество записей. Максимальное значение - 500
page integer Нет Номер страницы начиная с 1
count boolean Нет Возвратить в ответе общее количество записей
sortBy "CATEGORYNAME""BRANDNAME""PRODUCTNAME""ARTICLE""BARCODE""SERVICEARTICLE""CURRENTPRICEWITHOUTDISCOUNT""CURRENTPRICE""PLANNEDPRICE""CURRENTDISCOUNT""NEWDISCOUNTFORPROMOTION""CURRENTPROFIT""PROMOTIONPROFIT""CURRENTMARGINALITY""PROMOTIONMARGINALITY""CURRENTMARKUP""PLANNEDMARKUPRATIO""OZONPRODUCTIDONMP""WILDBERRIESPRODUCTIDONMP""PURCHASEPERCENT""FBOSTOCK""FBSSTOCK""TURNOVER" Нет Поле для сортировки
ascending boolean Нет Порядок сортировки - по возрастанию?. Работает только при получении списка.

Тело ответа

✓ 200 OK
Content-Type: application/json
Поле Тип Описание
rows Array of Promotion Строки с результатом поиска
Структура Promotion
Поле Тип Описание
promotionId integer Идентификатор акции
id integer Порядковый номер в списке запроса
totalCount integer Общее кол-во акций
name string Название акции
dateStart string Дата и время начало
dateEnd string Дата и время окончания
changeCommission boolean Меняется ли комиссия или нет
changeCommissionAmount number На какой процент сокращается комиссия
createdDate string Дата создания
service string Сервис
isDeleted boolean Идентификатор удаления
description string Описание акции
promotionIdOnMp integer Идентификатор акции на МП
clientId integer Идентификатор клиента
organizationId integer Идентификатор организации
candidateCount integer Кол-во кандидатов в акцию
inPromotionCount integer Кол-во участников в акции
auto boolean Признак автоматической акции
hotsale boolean Признак hotsale акции
candidateCountOnMp integer Кол-во кандидатов в акции на маркетплейсе
inPromotionCountOnMp integer Кол-во участников в акции на маркетплейсе
total integer Общее количество найденных записей. Возвращается только, когда count = true
page integer Номер запрошенной страницы
hasNextPage boolean Есть ли следующая страница
emptyPurchase integer Показатель пустой закупочной цены
⚠ 400 Ошибка с данными запроса
Content-Type: application/json
Поле Тип Описание
error Обязательный string Код ошибки
localMessage Обязательный string Текст ошибки на языке пользователя
params object Дополнительные параметры ошибки
⚠ 403 Доступ запрещен
Content-Type: application/json
Поле Тип Описание
error Обязательный string Код ошибки
✗ 500 Внутренняя ошибка сервера
Content-Type: application/json
Поле Тип Описание
error Обязательный string Код ошибки
message string Описание ошибки
system string Системная ошибки парсинга данных запроса
Укажите ключ API в правом верхнем углу, чтобы попробовать использовать метод

Примеры кода

const axios = require('axios');

const params = {
  dateFrom: '2024-01-15T10:30:00Z',
  dateTo: '2024-01-15T10:30:00Z',
  promotionId: '123',
  service: 'NONE',
  reDownload: 'true',
  clientOrganizationId: 'АО "Торговый дом"',
  minMargin: '1',
  minMarginPercent: '0.15',
  isActive: 'true',
  isDeleted: 'false',
  query: 'Пример query',
  promotionIdOnMp: '123',
  categoryId: '123',
  categoryIds: '',
  clientId: '123',
  inStock: 'true',
  isNotFound: 'true',
  limit: '100',
  page: '1',
  count: 'Россия',
  sortBy: 'CATEGORYNAME',
  ascending: 'true',
};

const response = await axios.get('https://api.selsup.ru/api/promotion/find',
  {
    params,
    headers: {
      'Authorization': 'YOUR_API_KEY',
      'Content-Type': 'application/json'
    }
  }
);

console.log(response.data);
import axios from 'axios';

interface QueryParams {
  dateFrom?: string;
  dateTo?: string;
  promotionId?: number;
  service?: string;
  reDownload?: string;
  clientOrganizationId?: number;
  minMargin?: number;
  minMarginPercent?: number;
  isActive?: string;
  isDeleted?: string;
  query?: string;
  promotionIdOnMp?: number;
  categoryId?: number;
  categoryIds?: string;
  clientId?: number;
  inStock?: string;
  isNotFound?: string;
  limit?: number;
  page?: number;
  count?: string;
  sortBy?: string;
  ascending?: string;
}

const params: QueryParams = {
  dateFrom: '2024-01-15T10:30:00Z',
  dateTo: '2024-01-15T10:30:00Z',
  promotionId: '123',
  service: 'NONE',
  reDownload: 'true',
  clientOrganizationId: 'АО "Торговый дом"',
  minMargin: '1',
  minMarginPercent: '0.15',
  isActive: 'true',
  isDeleted: 'false',
  query: 'Пример query',
  promotionIdOnMp: '123',
  categoryId: '123',
  categoryIds: '',
  clientId: '123',
  inStock: 'true',
  isNotFound: 'true',
  limit: '100',
  page: '1',
  count: 'Россия',
  sortBy: 'CATEGORYNAME',
  ascending: 'true',
};

const response = await axios.get<any>('https://api.selsup.ru/api/promotion/find',
  {
    params,
    headers: {
      'Authorization': 'YOUR_API_KEY',
      'Content-Type': 'application/json'
    }
  }
);

console.log(response.data);
import requests

headers = {
    'Authorization': 'YOUR_API_KEY',
    'Content-Type': 'application/json'
}

params = {
    'dateFrom': '2024-01-15T10:30:00Z',
    'dateTo': '2024-01-15T10:30:00Z',
    'promotionId': '123',
    'service': 'NONE',
    'reDownload': 'true',
    'clientOrganizationId': 'АО "Торговый дом"',
    'minMargin': '1',
    'minMarginPercent': '0.15',
    'isActive': 'true',
    'isDeleted': 'false',
    'query': 'Пример query',
    'promotionIdOnMp': '123',
    'categoryId': '123',
    'categoryIds': '',
    'clientId': '123',
    'inStock': 'true',
    'isNotFound': 'true',
    'limit': '100',
    'page': '1',
    'count': 'Россия',
    'sortBy': 'CATEGORYNAME',
    'ascending': 'true',
}

response = requests.get(
    'https://api.selsup.ru/api/promotion/find',
    headers=headers,
    params=params
)

print(response.json())
package main

import (
    "bytes"
    "encoding/json"
    "fmt"
    "net/http"
)

func main() {
    client := &http.Client{}

    req, _ := http.NewRequest("get", "https://api.selsup.ru/api/promotion/find?dateFrom=2024-01-15T10%3A30%3A00Z&dateTo=2024-01-15T10%3A30%3A00Z&promotionId=123&service=NONE&reDownload=true&clientOrganizationId=%D0%90%D0%9E%20%22%D0%A2%D0%BE%D1%80%D0%B3%D0%BE%D0%B2%D1%8B%D0%B9%20%D0%B4%D0%BE%D0%BC%22&minMargin=1&minMarginPercent=0.15&isActive=true&isDeleted=false&query=%D0%9F%D1%80%D0%B8%D0%BC%D0%B5%D1%80%20query&promotionIdOnMp=123&categoryId=123&categoryIds=&clientId=123&inStock=true&isNotFound=true&limit=100&page=1&count=%D0%A0%D0%BE%D1%81%D1%81%D0%B8%D1%8F&sortBy=CATEGORYNAME&ascending=true", nil)
    req.Header.Set("Authorization", "YOUR_API_KEY")
    req.Header.Set("Content-Type", "application/json")

    resp, err := client.Do(req)
    if err != nil {
        panic(err)
    }
    defer resp.Body.Close()

    var result map[string]interface{}
    json.NewDecoder(resp.Body).Decode(&result)
    fmt.Println(result)
}
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.net.URI;

HttpClient client = HttpClient.newHttpClient();

HttpRequest request = HttpRequest.newBuilder()
    .uri(URI.create("https://api.selsup.ru/api/promotion/find?dateFrom=2024-01-15T10%3A30%3A00Z&dateTo=2024-01-15T10%3A30%3A00Z&promotionId=123&service=NONE&reDownload=true&clientOrganizationId=%D0%90%D0%9E%20%22%D0%A2%D0%BE%D1%80%D0%B3%D0%BE%D0%B2%D1%8B%D0%B9%20%D0%B4%D0%BE%D0%BC%22&minMargin=1&minMarginPercent=0.15&isActive=true&isDeleted=false&query=%D0%9F%D1%80%D0%B8%D0%BC%D0%B5%D1%80%20query&promotionIdOnMp=123&categoryId=123&categoryIds=&clientId=123&inStock=true&isNotFound=true&limit=100&page=1&count=%D0%A0%D0%BE%D1%81%D1%81%D0%B8%D1%8F&sortBy=CATEGORYNAME&ascending=true"))
    .header("Authorization", "YOUR_API_KEY")
    .header("Content-Type", "application/json")
    .get(HttpRequest.BodyPublishers.noBody())
    .build();

HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
<?php
$curl = curl_init();

$params = [
    'dateFrom' => '2024-01-15T10:30:00Z',
    'dateTo' => '2024-01-15T10:30:00Z',
    'promotionId' => '123',
    'service' => 'NONE',
    'reDownload' => 'true',
    'clientOrganizationId' => 'АО "Торговый дом"',
    'minMargin' => '1',
    'minMarginPercent' => '0.15',
    'isActive' => 'true',
    'isDeleted' => 'false',
    'query' => 'Пример query',
    'promotionIdOnMp' => '123',
    'categoryId' => '123',
    'categoryIds' => '',
    'clientId' => '123',
    'inStock' => 'true',
    'isNotFound' => 'true',
    'limit' => '100',
    'page' => '1',
    'count' => 'Россия',
    'sortBy' => 'CATEGORYNAME',
    'ascending' => 'true',
];

$url = 'https://api.selsup.ru/api/promotion/find?' . http_build_query($params);

curl_setopt_array($curl, [
    CURLOPT_URL => $url,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST => 'get',
    CURLOPT_HTTPHEADER => [
        'Authorization: YOUR_API_KEY',
        'Content-Type: application/json'
    ]
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
?>
curl -X get \
  'https://api.selsup.ru/api/promotion/find?dateFrom=2024-01-15T10%3A30%3A00Z&dateTo=2024-01-15T10%3A30%3A00Z&promotionId=123&service=NONE&reDownload=true&clientOrganizationId=%D0%90%D0%9E%20%22%D0%A2%D0%BE%D1%80%D0%B3%D0%BE%D0%B2%D1%8B%D0%B9%20%D0%B4%D0%BE%D0%BC%22&minMargin=1&minMarginPercent=0.15&isActive=true&isDeleted=value&query=%D0%9F%D1%80%D0%B8%D0%BC%D0%B5%D1%80%20query&promotionIdOnMp=123&categoryId=123&categoryIds=&clientId=123&inStock=true&isNotFound=true&limit=100&page=1&count=%D0%A0%D0%BE%D1%81%D1%81%D0%B8%D1%8F&sortBy=CATEGORYNAME&ascending=true' \
  -H 'Authorization: YOUR_API_KEY' \
  -H 'Content-Type: application/json'