SelSup Developers

Справочник товаров · API Reference

Бренды

Создавайте и находите бренды, связывайте их с Ozon и 1С, управляйте логотипами и безопасно объединяйте дубликаты.

9 методов/api/brandСтабильныйМашинное описание ↗
{ }

У каждого товара SelSup должен быть бренд. Если у товара нет торговой марки, заранее создайте отдельный бренд «Без бренда» и используйте его идентификатор в карточках.

/api/brand

Готовые сценарии

Готовые сценарии

01

Найти или создать бренд перед созданием товара

Сначала ищите точное название. Если rows пуст, создайте бренд и сохраните brandId для карточки товара.

  1. Вызовите GET /api/brand/find с query и count=true.
  2. Сравните name без учёта регистра на своей стороне.
  3. Если совпадения нет, отправьте POST /api/brand с name.
  4. Используйте brandId из ответа при создании модели товара.
02

Синхронизировать справочник с 1С

Храните ключ 1С в oneCId и выбирайте изменения страницами, чтобы не загружать весь справочник одним запросом.

  1. Запрашивайте страницы по 50–500 записей, сортируя по BRANDID.
  2. В первом запросе включите count=true, чтобы получить total.
  3. Создавайте отсутствующие записи или обновляйте найденные по brandOneCId.
03

Убрать дубликат без потери связей товаров

Объединение переносит модели с удаляемого бренда на основной, а затем удаляет дубликат. Операция необратима.

  1. Проверьте оба бренда по идентификаторам.
  2. Передайте основной brandId и дубликат removeBrandId.
  3. Повторно запросите основной бренд и проверьте связанные товары.

Модель данных

Что реально возвращается в Brand

Поля логотипа появляются после загрузки изображения. Служебные поля общей модели, которые не участвуют в этом API, здесь намеренно не показаны.

Brand10 полей
brandIdinteger

Идентификатор бренда внутри аккаунта SelSup.

read-only
namestring

Название бренда. Пробелы по краям удаляются при сохранении.

Обязательно
logoUrlstring

Публичная ссылка на текущий логотип.

read-only
logoSizeinteger

Размер логотипа в байтах.

read-only
logoWidthinteger

Ширина логотипа в пикселях.

read-only
logoHeightinteger

Высота логотипа в пикселях.

read-only
deletedboolean

Признак архивного бренда.

ozonNamestring

Название бренда в каталоге Ozon.

nullable
ozonIdinteger · int64

Идентификатор бренда в Ozon.

nullable
oneCIdstring

Внешний идентификатор бренда в 1С.

nullable

Контракт ошибок

Как API возвращает прикладные ошибки

Код ошибки одинаков для всех локалей, а текст для пользователя переводится сервером. Поэтому бизнес-логику стройте по error, а localMessage используйте только для отображения.

error

Стабильный машинный код ошибки для логики интеграции.

localMessage

Готовое сообщение на языке пользователя API-токена.

params

Значения

Язык localMessage определяется полем lang пользователя, которому принадлежит API-токен. Язык страницы документации и заголовок Accept-Language его не переключают; если язык пользователя не указан, используется русский.

RUПользователь с локалью ru
{
  "error": "error_brand_already_exists",
  "localMessage": "Бренд Base уже существует",
  "params": {
    "name": "Base"
  }
}
ENПользователь с локалью en
{
  "error": "error_brand_already_exists",
  "localMessage": "Brand Base already exists",
  "params": {
    "name": "Base"
  }
}

Методы

Методы

GET

Найти бренды

/api/brand/find
Токен с правами чтения

Основной метод для списков, поиска и синхронизации. Возвращает только бренды текущего аккаунта и поддерживает стабильную постраничную выборку.

i

total возвращается только при count=true. Для следующих страниц параметр count можно отключить.

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

ПолеТипОбязательноОписание
query string Нет Часть названия бренда, поиск по вхождению.
deleted boolean Нет true — только архивные, false — только активные. Без параметра возвращаются оба типа.
brandOneCId string Нет Точное совпадение по внешнему идентификатору 1С.
hasOzonId boolean Нет true — вернуть только бренды, связанные с Ozon.
limitПо умолчанию: 50 integer Нет Число записей на странице, не более 500.
pageПо умолчанию: 1 integer Нет Номер страницы, начиная с 1.
countПо умолчанию: false boolean Нет Добавить общее число найденных записей в total.
sortBy stringNAME, BRANDID Нет NAME — по названию, BRANDID — по внутреннему идентификатору.
ascendingПо умолчанию: false boolean Нет true — по возрастанию, false — по убыванию.
curl --request GET 'https://api.selsup.ru/api/brand/find?query=Base&limit=50&page=1&count=true&sortBy=NAME&ascending=true' \
  --header 'Authorization: YOUR_API_TOKEN'

Успешный ответ

200
ПолеТипОбязательноОписание
rows Brand[] Да Бренды текущей страницы.
Структура элемента массива Brand
ПолеТипОбязательноОписание
brandId integer Нет Идентификатор бренда внутри аккаунта SelSup.
name string Да Название бренда. Пробелы по краям удаляются при сохранении.
logoUrl string Нет Публичная ссылка на текущий логотип.
logoSize integer Нет Размер логотипа в байтах.
logoWidth integer Нет Ширина логотипа в пикселях.
logoHeight integer Нет Высота логотипа в пикселях.
deletedПо умолчанию: false boolean Нет Признак архивного бренда.
ozonName string Нет Название бренда в каталоге Ozon.
ozonId integer · int64 Нет Идентификатор бренда в Ozon.
oneCId string Нет Внешний идентификатор бренда в 1С.
totalУсловие: count=true integer Нет Общее число совпадений; присутствует только при count=true.
page integer Да Номер текущей страницы.
hasNextPage boolean Да true, если можно запросить следующую страницу.
{
  "rows": [
    {
      "brandId": 8124,
      "name": "Base",
      "deleted": false,
      "ozonName": "BASE"
    }
  ],
  "total": 1,
  "page": 1,
  "hasNextPage": false
}
Ошибки3

Прикладные ошибки обычно возвращаются как JSON с полями error, localMessage и params. Ориентируйтесь на error; локализованный текст может меняться. Как API возвращает прикладные ошибки ↑

401auth_required
Требуется авторизация

Заголовок Authorization отсутствует, пуст или содержит недействительный токен.

400error_access_denied
Недостаточно прав

Токен существует, но его роль не позволяет выполнить операцию.

500error_unknown
Непредвиденная ошибка

Внутренняя ошибка. Сохраните время запроса и обратитесь в поддержку, не повторяя мутацию вслепую.

GET

Получить все бренды

/api/brand/all
Токен с правами чтения

Возвращает полный список брендов аккаунта, отсортированный по названию.

i

Для больших справочников и регулярной синхронизации используйте /find с пагинацией.

curl --request GET 'https://api.selsup.ru/api/brand/all' \
  --header 'Authorization: YOUR_API_TOKEN'

Успешный ответ

200
Структура элемента массива Brand[]
ПолеТипОбязательноОписание
brandId integer Нет Идентификатор бренда внутри аккаунта SelSup.
name string Да Название бренда. Пробелы по краям удаляются при сохранении.
logoUrl string Нет Публичная ссылка на текущий логотип.
logoSize integer Нет Размер логотипа в байтах.
logoWidth integer Нет Ширина логотипа в пикселях.
logoHeight integer Нет Высота логотипа в пикселях.
deletedПо умолчанию: false boolean Нет Признак архивного бренда.
ozonName string Нет Название бренда в каталоге Ozon.
ozonId integer · int64 Нет Идентификатор бренда в Ozon.
oneCId string Нет Внешний идентификатор бренда в 1С.
[
  {
    "brandId": 8124,
    "name": "Base",
    "deleted": false
  },
  {
    "brandId": 8125,
    "name": "Air",
    "deleted": false
  }
]
Ошибки3

Прикладные ошибки обычно возвращаются как JSON с полями error, localMessage и params. Ориентируйтесь на error; локализованный текст может меняться. Как API возвращает прикладные ошибки ↑

401auth_required
Требуется авторизация

Заголовок Authorization отсутствует, пуст или содержит недействительный токен.

400error_access_denied
Недостаточно прав

Токен существует, но его роль не позволяет выполнить операцию.

500error_unknown
Непредвиденная ошибка

Внутренняя ошибка. Сохраните время запроса и обратитесь в поддержку, не повторяя мутацию вслепую.

GET

Получить бренд по ID

/api/brand/{brandId}
Токен с правами чтения

Возвращает бренд текущего аккаунта по внутреннему идентификатору.

i

В текущей реализации неизвестный brandId возвращает пустое значение, а не ошибку 404. Проверяйте пустой ответ.

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

ПолеТипОбязательноОписание
brandId integer Да Идентификатор бренда в SelSup.
curl --request GET 'https://api.selsup.ru/api/brand/8124' \
  --header 'Authorization: YOUR_API_TOKEN'

Успешный ответ

200
Поля объекта Brand
ПолеТипОбязательноОписание
brandId integer Нет Идентификатор бренда внутри аккаунта SelSup.
name string Да Название бренда. Пробелы по краям удаляются при сохранении.
logoUrl string Нет Публичная ссылка на текущий логотип.
logoSize integer Нет Размер логотипа в байтах.
logoWidth integer Нет Ширина логотипа в пикселях.
logoHeight integer Нет Высота логотипа в пикселях.
deletedПо умолчанию: false boolean Нет Признак архивного бренда.
ozonName string Нет Название бренда в каталоге Ozon.
ozonId integer · int64 Нет Идентификатор бренда в Ozon.
oneCId string Нет Внешний идентификатор бренда в 1С.
{
  "brandId": 8124,
  "name": "Base",
  "deleted": false,
  "ozonName": "BASE",
  "ozonId": 100582
}
Ошибки3

Прикладные ошибки обычно возвращаются как JSON с полями error, localMessage и params. Ориентируйтесь на error; локализованный текст может меняться. Как API возвращает прикладные ошибки ↑

401auth_required
Требуется авторизация

Заголовок Authorization отсутствует, пуст или содержит недействительный токен.

400error_access_denied
Недостаточно прав

Токен существует, но его роль не позволяет выполнить операцию.

500error_unknown
Непредвиденная ошибка

Внутренняя ошибка. Сохраните время запроса и обратитесь в поддержку, не повторяя мутацию вслепую.

POST

Создать бренд

/api/brand
Токен с правами записи

Создаёт бренд в текущем аккаунте. Для обычного сценария достаточно поля name.

i

Название сравнивается без учёта регистра; «Base» и «base» считаются одним брендом.

Тело запроса

application/json
ПолеТипОбязательноОписание
name string Да Уникальное непустое название бренда.
ozonName string Нет Название из справочника Ozon, если известно.
ozonId integer · int64 Нет Идентификатор бренда Ozon, если карточки отправляются без предварительного импорта.
oneCId string Нет Стабильный внешний ключ бренда в 1С.
curl --request POST 'https://api.selsup.ru/api/brand' \
  --header 'Authorization: YOUR_API_TOKEN' \
  --header 'Content-Type: application/json' \
  --data '{
  "name": "Base",
  "ozonName": "BASE",
  "ozonId": 100582,
  "oneCId": "BRAND-001"
}'

Успешный ответ

200
Поля объекта Brand
ПолеТипОбязательноОписание
brandId integer Нет Идентификатор бренда внутри аккаунта SelSup.
name string Да Название бренда. Пробелы по краям удаляются при сохранении.
logoUrl string Нет Публичная ссылка на текущий логотип.
logoSize integer Нет Размер логотипа в байтах.
logoWidth integer Нет Ширина логотипа в пикселях.
logoHeight integer Нет Высота логотипа в пикселях.
deletedПо умолчанию: false boolean Нет Признак архивного бренда.
ozonName string Нет Название бренда в каталоге Ozon.
ozonId integer · int64 Нет Идентификатор бренда в Ozon.
oneCId string Нет Внешний идентификатор бренда в 1С.
{
  "brandId": 8124,
  "name": "Base",
  "deleted": false,
  "ozonName": "BASE",
  "ozonId": 100582,
  "oneCId": "BRAND-001"
}
Ошибки6

Прикладные ошибки обычно возвращаются как JSON с полями error, localMessage и params. Ориентируйтесь на error; локализованный текст может меняться. Как API возвращает прикладные ошибки ↑

401auth_required
Требуется авторизация

Заголовок Authorization отсутствует, пуст или содержит недействительный токен.

400error_access_denied
Недостаточно прав

Токен существует, но его роль не позволяет выполнить операцию.

400error_empty_brand_name
Пустое название

name отсутствует, пуст или состоит только из пробелов.

400error_brand_already_exists
Бренд уже существует

В аккаунте уже есть бренд с таким названием без учёта регистра. params.name содержит конфликтующее имя.

400error_subscription_expired
Срок действия тарифа закончился

Оплатите тариф для продолжения использования сервиса. Для логики интеграции используйте код error_subscription_expired.

500error_unknown
Непредвиденная ошибка

Внутренняя ошибка. Сохраните время запроса и обратитесь в поддержку, не повторяя мутацию вслепую.

PUT

Обновить бренд

/api/brand/{brandId}
Токен с правами записи

Полностью обновляет редактируемые поля бренда. Идентификатор берётся из URL, brandId в JSON передавать не нужно.

i

Это PUT, поэтому передавайте все значения, которые нужно сохранить. Поля логотипа этим методом не меняются.

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

ПолеТипОбязательноОписание
brandId integer Да Идентификатор изменяемого бренда.

Тело запроса

application/json
ПолеТипОбязательноОписание
name string Да Новое уникальное название.
deletedПо умолчанию: false boolean Нет Архивный статус бренда.
ozonName string Нет Название бренда в Ozon.
ozonId integer · int64 Нет Идентификатор бренда в Ozon.
oneCId string Нет Идентификатор бренда в 1С.
curl --request PUT 'https://api.selsup.ru/api/brand/8124' \
  --header 'Authorization: YOUR_API_TOKEN' \
  --header 'Content-Type: application/json' \
  --data '{
  "name": "Base Studio",
  "deleted": false,
  "ozonName": "BASE STUDIO",
  "ozonId": 100582,
  "oneCId": "BRAND-001"
}'

Успешный ответ

200
Поля объекта Brand
ПолеТипОбязательноОписание
brandId integer Нет Идентификатор бренда внутри аккаунта SelSup.
name string Да Название бренда. Пробелы по краям удаляются при сохранении.
logoUrl string Нет Публичная ссылка на текущий логотип.
logoSize integer Нет Размер логотипа в байтах.
logoWidth integer Нет Ширина логотипа в пикселях.
logoHeight integer Нет Высота логотипа в пикселях.
deletedПо умолчанию: false boolean Нет Признак архивного бренда.
ozonName string Нет Название бренда в каталоге Ozon.
ozonId integer · int64 Нет Идентификатор бренда в Ozon.
oneCId string Нет Внешний идентификатор бренда в 1С.
{
  "brandId": 8124,
  "name": "Base Studio",
  "deleted": false,
  "ozonName": "BASE STUDIO",
  "ozonId": 100582,
  "oneCId": "BRAND-001"
}
Ошибки6

Прикладные ошибки обычно возвращаются как JSON с полями error, localMessage и params. Ориентируйтесь на error; локализованный текст может меняться. Как API возвращает прикладные ошибки ↑

401auth_required
Требуется авторизация

Заголовок Authorization отсутствует, пуст или содержит недействительный токен.

400error_access_denied
Недостаточно прав

Токен существует, но его роль не позволяет выполнить операцию.

400error_empty_brand_name
Пустое название

name отсутствует, пуст или состоит только из пробелов.

400error_brand_already_exists
Бренд уже существует

В аккаунте уже есть бренд с таким названием без учёта регистра. params.name содержит конфликтующее имя.

400error_subscription_expired
Срок действия тарифа закончился

Оплатите тариф для продолжения использования сервиса. Для логики интеграции используйте код error_subscription_expired.

500error_unknown
Непредвиденная ошибка

Внутренняя ошибка. Сохраните время запроса и обратитесь в поддержку, не повторяя мутацию вслепую.

DELETE

Удалить, архивировать или восстановить бренд

/api/brand/{brandId}
Токен с правами записи

При deleted=true SelSup пытается удалить бренд физически. Если на него есть ссылки, бренд помечается удалённым. deleted=false восстанавливает архивный бренд.

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

ПолеТипОбязательноОписание
brandId integer Да Идентификатор бренда.

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

ПолеТипОбязательноОписание
deleted boolean Да true — удалить или архивировать; false — восстановить.
curl --request DELETE 'https://api.selsup.ru/api/brand/8124?deleted=true' \
  --header 'Authorization: YOUR_API_TOKEN'

Успешный ответ

200
brand_has_been_removed

Бренд физически удалён.

brand_signed_as_deleted

Удаление невозможно из-за связей; бренд перемещён в архив.

brand_has_been_restore

Бренд восстановлен из архива.

"brand_signed_as_deleted"
Ошибки3

Прикладные ошибки обычно возвращаются как JSON с полями error, localMessage и params. Ориентируйтесь на error; локализованный текст может меняться. Как API возвращает прикладные ошибки ↑

401auth_required
Требуется авторизация

Заголовок Authorization отсутствует, пуст или содержит недействительный токен.

400error_access_denied
Недостаточно прав

Токен существует, но его роль не позволяет выполнить операцию.

500error_unknown
Непредвиденная ошибка

Внутренняя ошибка. Сохраните время запроса и обратитесь в поддержку, не повторяя мутацию вслепую.

POST

Загрузить логотип

/api/brand/{brandId}/image
Токен с правами записи

Загружает изображение как multipart/form-data. Если логотип уже существует, он заменяется.

i

Передавайте бинарный файл в поле file; JSON для этого метода не используется.

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

ПолеТипОбязательноОписание
brandId integer Да Идентификатор бренда.

Тело запроса

multipart/form-data
ПолеТипОбязательноОписание
file binary Да Файл изображения поддерживаемого формата.
curl --request POST 'https://api.selsup.ru/api/brand/8124/image' \
  --header 'Authorization: YOUR_API_TOKEN' \
  --form 'file=@./logo.png'

Успешный ответ

200
Поля объекта Brand
ПолеТипОбязательноОписание
brandId integer Нет Идентификатор бренда внутри аккаунта SelSup.
name string Да Название бренда. Пробелы по краям удаляются при сохранении.
logoUrl string Нет Публичная ссылка на текущий логотип.
logoSize integer Нет Размер логотипа в байтах.
logoWidth integer Нет Ширина логотипа в пикселях.
logoHeight integer Нет Высота логотипа в пикселях.
deletedПо умолчанию: false boolean Нет Признак архивного бренда.
ozonName string Нет Название бренда в каталоге Ozon.
ozonId integer · int64 Нет Идентификатор бренда в Ozon.
oneCId string Нет Внешний идентификатор бренда в 1С.
{
  "brandId": 8124,
  "name": "Base",
  "logoUrl": "https://files.selsup.ru/brand/8124.png",
  "logoSize": 18420,
  "logoWidth": 512,
  "logoHeight": 512,
  "deleted": false
}
Ошибки7

Прикладные ошибки обычно возвращаются как JSON с полями error, localMessage и params. Ориентируйтесь на error; локализованный текст может меняться. Как API возвращает прикладные ошибки ↑

401auth_required
Требуется авторизация

Заголовок Authorization отсутствует, пуст или содержит недействительный токен.

400error_access_denied
Недостаточно прав

Токен существует, но его роль не позволяет выполнить операцию.

400error_brand_to_found
Бренд для логотипа не найден

brandId не существует в текущем аккаунте. Код сохранён в документации в том виде, в котором его возвращает API.

400error_wrong_image_format
Неподдерживаемое изображение

Файл не удалось прочитать как изображение поддерживаемого формата.

400error_max_upload_size_exceeded
Файл слишком большой

Размер multipart-запроса превысил допустимый лимит сервера.

400error_subscription_expired
Срок действия тарифа закончился

Оплатите тариф для продолжения использования сервиса. Для логики интеграции используйте код error_subscription_expired.

500error_unknown
Непредвиденная ошибка

Внутренняя ошибка. Сохраните время запроса и обратитесь в поддержку, не повторяя мутацию вслепую.

DELETE

Удалить логотип

/api/brand/{brandId}/image
Токен с правами записи

Удаляет файл логотипа и обнуляет его размеры в записи бренда.

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

ПолеТипОбязательноОписание
brandId integer Да Идентификатор бренда.
curl --request DELETE 'https://api.selsup.ru/api/brand/8124/image' \
  --header 'Authorization: YOUR_API_TOKEN'

Успешный ответ

200
Поля объекта Brand
ПолеТипОбязательноОписание
brandId integer Нет Идентификатор бренда внутри аккаунта SelSup.
name string Да Название бренда. Пробелы по краям удаляются при сохранении.
logoUrl string Нет Публичная ссылка на текущий логотип.
logoSize integer Нет Размер логотипа в байтах.
logoWidth integer Нет Ширина логотипа в пикселях.
logoHeight integer Нет Высота логотипа в пикселях.
deletedПо умолчанию: false boolean Нет Признак архивного бренда.
ozonName string Нет Название бренда в каталоге Ozon.
ozonId integer · int64 Нет Идентификатор бренда в Ozon.
oneCId string Нет Внешний идентификатор бренда в 1С.
{
  "brandId": 8124,
  "name": "Base",
  "logoSize": 0,
  "logoWidth": 0,
  "logoHeight": 0,
  "deleted": false
}
Ошибки7

Прикладные ошибки обычно возвращаются как JSON с полями error, localMessage и params. Ориентируйтесь на error; локализованный текст может меняться. Как API возвращает прикладные ошибки ↑

401auth_required
Требуется авторизация

Заголовок Authorization отсутствует, пуст или содержит недействительный токен.

400error_access_denied
Недостаточно прав

Токен существует, но его роль не позволяет выполнить операцию.

400error_brand_to_found
Бренд для логотипа не найден

brandId не существует в текущем аккаунте. Код сохранён в документации в том виде, в котором его возвращает API.

400error_empty_brand_logo
У бренда нет логотипа

Удаление запрошено для бренда, у которого логотип не задан.

400error_cant_remove_brand_logo
Логотип не удалось удалить

Хранилище не смогло удалить файл или обновить данные бренда.

400error_subscription_expired
Срок действия тарифа закончился

Оплатите тариф для продолжения использования сервиса. Для логики интеграции используйте код error_subscription_expired.

500error_unknown
Непредвиденная ошибка

Внутренняя ошибка. Сохраните время запроса и обратитесь в поддержку, не повторяя мутацию вслепую.

POST

Объединить дубликаты

/api/brand/{brandId}/merge/{removeBrandId}
Токен с правами записи

Переносит модели товаров с removeBrandId на brandId, затем физически удаляет removeBrandId.

i

Операция необратима. brandId — бренд, который останется; removeBrandId — дубликат, который будет удалён.

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

ПолеТипОбязательноОписание
brandId integer Да Идентификатор основного бренда.
removeBrandId integer Да Идентификатор удаляемого дубликата.
curl --request POST 'https://api.selsup.ru/api/brand/8124/merge/9012' \
  --header 'Authorization: YOUR_API_TOKEN'

Успешный ответ

200

Тело ответа пустое.

Ошибки5

Прикладные ошибки обычно возвращаются как JSON с полями error, localMessage и params. Ориентируйтесь на error; локализованный текст может меняться. Как API возвращает прикладные ошибки ↑

401auth_required
Требуется авторизация

Заголовок Authorization отсутствует, пуст или содержит недействительный токен.

400error_access_denied
Недостаточно прав

Токен существует, но его роль не позволяет выполнить операцию.

400error_brand_not_found
Бренд не найден

Один из брендов для объединения не существует в текущем аккаунте.

400error_subscription_expired
Срок действия тарифа закончился

Оплатите тариф для продолжения использования сервиса. Для логики интеграции используйте код error_subscription_expired.

500error_unknown
Непредвиденная ошибка

Внутренняя ошибка. Сохраните время запроса и обратитесь в поддержку, не повторяя мутацию вслепую.

Authorization

Токен для тестовых запросов

Токен хранится только в localStorage этого браузера и отправляется исключительно в заголовке Authorization запросов к api.selsup.ru.

Попробовать

Параметры реального запроса

Реальный ответ API

Выполните запрос, чтобы увидеть ответ SelSup.