Маркировка Честный знак: API (1.0)

Download OpenAPI specification:Download

Support Team: admin@selsup.ru License: Apache 2.0

Общая информация

Введение

SelSup API — программный интерфейс для работы с сервисом SelSup. Он даёт возможность обмениваться информацией между системой продавца и SelSup.

Методы API позволяют использовать весь функционал сервиса SelSup для работы с маркетплейсами Ozon, Wildberries, Aliexpress, Яндекс.Маркет, СберМегаМаркет, Леруа Мерлен, кассами Эвотор и Авито. Работать со службами доставки.

SelSup позволяет создавать карточки на всех маркетплейсах, заполнять параметры, вести учет остатков товаров, принимать заказы по FBS с маркетплейсов и интернет-магазина, обновлять остатки на позиции, по которым пришел заказ. Вести аналитику продаж и учет финансов.

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

По умолчанию GET запросы используются для получения данных, все запросы на изменение данных отправляются методоми POST, DELETE, PUT, PATCH

Авторизация

Как передавать токен авторизации в запросах

curl "https://api.selsup.ru/api/product/findProduct" \
  -H "Authorization: token"

Проверьте, что у вас указан токен API вместо <token>. Он указан на странице добавления нового токена

Перейдите на страницу настройки API: https://selsup.ru/application/integration/api

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

Токен необходимо передавать в заголовке Authorization: токен

Webhooks

SelSup может отправлять запросы на внешние сервисы и так же получать информацию от внешних сервисов, в случае каких-то событий. Такими событиями могут быть:

  • получение заказа с маркетплейса или от покупателя, в этом случае передается полная информация о заказе
  • изменение остатка на товары, передается информация о товаре и новый остаток
  • изменение цены на товар

Вы можете настроить Webhook, который будет отправлять HTTP/HTTPS запрос на адрес, который будет указан в кабинете. Возможна отправка POST или GET запроса в нужном формате с необходимыми заголовками.

Так вы сможете настроить интеграцию с любой собственной системой или сайтом.

Примеры решений

Поиск товаров

Для поиска товаров используйте метод /api/product/find Он позволяет найти товары по фильтрам и поисковому запросу, либо просто получить все товары по порядку.

Для выбора всех товаров лучше передавать sortBy=ID, чтобы новые товары не изменяли порядок сортировки и отдавались в конце. Параметр count=true, позволяет отдать в ответе значение поля total - общего количества данных по запросу. Значение true необходимо передавать только в первом запросе или вообще не передавать, просто последовательно выбирать данные по страницам, пока количество товаров в ответе не будет меньше размера limit.

Метод не отдает полную информацию о товаре, только основные поля, которые отображаются на списке товаров. Чтобы получить полную информацию о карточке, необходимо запросить ее по ID модели из ответа rows[0].view.model.id и использовать метод /api/model/{modelId} для получения полной информации о карточке. Если вы хотите изменить товар, получив данные из ответа метода, можно использовать метод PATCH, который объединит данные с уже сохраненными, чтобы не затереть какие-то параметры.

Информация о карточке

Получает полную информацию о карточке модели со всеми полями. У модели есть список цветов colors и у каждого цвета есть список размеров: sizes.

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

Чтобы получить дополнительные параметры, передавайте параметр params=true и в ответе values будет отдаваться список значений для цвета, модели или товара.

Полный список полей

Позволяет получить всю информацию о карточке товара, включая все заполненные параметры для последующего изменения информации о товаре через метод POST/PUT model. В списке services передаются маркетплейсы или сервисы, в которые необходимо отправить карточку после сохранения.

Создание модели

Метод позволяет создать новый товар

Позволяет создавать карточку товара. Карточка состоит из нескольких цветов, у каждого цвета может быть несколько размеров. Если в вашей категории товаров нет разделения по цветам и размерам - то просто создается карточка с одним цветом и одним размером. Цвет указывать не обязательно, как и значения поля размера. Обязательно указывать только артикул у модели.

Штрих-коды если не указаны, будут автоматически сгенерированы SelSup, либо нужно указывать явно штрих-коды в карточке товара.

Редактирование модели

Полный список полей

Позволяет изменить информацию у существующей модели, добавить цвета или размеры. Так же при редактировании модели можно выставлять свойство hasChanges=false, чтобы не изменять некоторые цвета или размеры.

Работа с параметрами карточки

У каждой структуры ProductModel, ProductView и Product, есть список значений параметров. У каждого параметра есть идентификатор, который зачастую уникален в рамках всех категорий маркетплейса. Один параметр может повторяться в разных категориях. Мы всегда пытаемся максимально сохранять идентификатор параметра при любых изменения на маркетплейсе.

Значения можно определять на разных уровнях, при этом Product имеет самый высший приоритет, потом идут по порядку значения со следующим приоритетом: ProductView, ProductModel, Category

В некоторых случаях, на маркетплейс не могут быть переданы значения, записанные у размера, например на Wildberries, тк карточка Wildberries соответствует ProductView. Уровень параметра, указанный в Param.level служит лишь для определения уровня по умолчанию, на котором должно быть определено значение параметра.

Если у параметра проставлено multiValueAllowed, то может быть несколько ParamValue с одинаковым paramId для передачи параметров, у которых может быть несколько значений

В зависимости от типа параметра Param.valueType, должны проставляться соответствующие поля в значении ParamValue.

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

https://params.selsup.ru/knowledge/getParams?ozonCategoryId=91025609&wildberriesTypeId=105&avitoCategoryId=103

Поиск значений параметра

Список значений может отдаваться для параметров с Param.valueType: "ENUM" или "TEXT" В этом случае у них обязательно будет проставлен Param.displayType: "SUGGEST", который говорит о том, что список значений нужно получать из ответа метода:

https://options.selsup.ru/option/fetchOption?aliexpressCategoryId=201236503&paramId=60019&useCategoryOption=true&query=123&limit=10

Полученные значения необходимо подставлять в качестве option у ParamValue в карточке товара. У значения всегда есть name, а вот идентификатор может вообще отсутствовать или может соответствовать идентификаторам значений на маркетплейсах

Поиск категорий

Позволяет найти категории по запросу или фильтру. Категории SelSup могут связываться с категориями маркетплейсов, могут хранить параметры, которые автоматически проставляются в карточках при создании, если параметр не заполнен в модели. Идентификатор категории необходимо использовать для создания товара.

Поиск бренда

Позволяет найти бренды по запросу или фильтру. Идентификатор бренда необходимо использовать для создания товара.

Создание заказа с сайта

Вы можете передавать новые заказы в SelSup по API, например с вашего интернет-магазина. В запросе необходимо передавать информацию о заказе и список товаров в заказе. В качестве уникального ключа, для того, чтобы не создавать дубликаты заказов используйте externalOrderId - номер заказа на сайте интернет-магазина.

Поле organizationId нужно обязательно передавать, если у вас в аккаунте несколько организаций.

Для передачи товаров необходимо предварительно связать товары сайта, с товарами в SelSup, чтобы потом передавать productId - идентификатор товара в SelSup. Сделать это можно, импортировав все товары методом findProduct

В позиции заказа в товаре quantity обязательно нужно передавать, как и цену товара price.

Создание отгрузки на маркетплейс

Вы можете передавать новые заказы в SelSup по API, например с вашего интернет-магазина. В запросе необходимо передавать информацию о заказе и список товаров в заказе. В качестве уникального ключа, для того, чтобы не создавать дубликаты используется externalOrderId

Возможные ошибки

В результате отдается JSON заказа, с проставленным значение id

{
  "message": "error_empty_warehouse"
}

В случае ошибки отдается код ответа 400, а в теле отдается message - с кодом ошибки и messageParams - дополнительные параметры сообщения об ошибке. Любые коды, отличные от 200 - ошибка запроса

Сообщение Причина
error_empty_warehouse Не указан параметр warehouseId для заказа на маркетплейс type=FBM
error_no_organization Не указано поле organizationId, если в аккаунте несколько организаций
error_no_marketplace Не указан service, для type=FBS или type=FBM заказов
error_no_quantity_for_order_product Не указано количество товара у позиции заказа products[index].quantity
error_no_price_for_order_product Не указана цена у позиции заказа products[index].price

Получение списка заказов

С помощью запроса вы можете получить список заказов:

Параметр count отвечает за подсчет общего количества заказов по указанному запросу. Лучше передавать значение false, если вам не нужно знать общее количество заказов, тк подсчет количества может занимать продолжительное время, особенно если по запросу выбирается большое количество заказов. Лучше запрашивать постоянно изменяя параметр page, чтобы выбрать все данные, пока количество равно лимиту, который вы передаете в запросе.

Получение изменений заказов

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

curl "https://api.selsup.ru/api/order/find?type=FBS&modifiedDate=2024-06-20T15:00:00Z" \
  -H "Authorization: <token>"

Остатки в SelSup

Остатки товаров в SelSup привязываются к SKU - единице хранения на складе. Каждому товару присваивается свой номер SKU и в дальнейшем можно указать одинаковый SKU для нескольких разных товаров в SelSup.

Вы можете использовать две схемы хранения остатков в SelSup: 1)Когда на каждую штуку товара клеится отдельный уникальный код, по которому можно отслеживать всю историю товара и вы всегда можете отделить каждую единицу товара друг от друга. Данный уникальный стикер позволяет вам клеить его в удобное для быстрого поиска место товара, что существенно ускоряет сборку товаров на складе и их идентификацию - особенно если вы работаете с кодами маркировки честного знака 2)Когда остаток хранится просто к привязки к ячейке по штрих-коду. В этом случае в остатке записывается количество - сколько лежит определенного товара в данной ячейке.

Изменение остатков

Полный список полей

curl -X POST "https://api.selsup.ru/api/wms/changeStock?skuId=123&stock=5&warehouseId=123" \
  -H "Authorization: <token>"

В результате отдается 200 код ответа или 400 в случае ошибки

Позволяет для SKU изменить остатки товаров на складе. Работает для всех схем хранения, как с уникальными кодами, так и без них

Добавление функций в магазин приложений

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

React-расширения

Вы можете разрабатывать расширения для SelSup реализуя функциональные React компоненты, которые встраиваются в различные места кабинета SelSup и взаимодействуют с API SelSup или API внешних сервисов. Внешнему сервису необходимо разрешить принимать запросы с домена selsup.ru. При этом вы можете использовать все стандартные компоненты SelSup и добавлять свои собственные

Клонируйте репозиторий демо-компонента SelSup и начните разрабатывать React-расширение.

https://github.com/SelSup/component

Backend интеграции

Вы можете реализовать на Java один из вариантов интеграции: маркетплейс (интеграция по остаткам, заказам, товарам, ценам) или служба доставки, реализовав соответствующий интерфейс SelSup. Код компонента попадет в основную ветку SelSup и будет доступен для использования вашим платным или бесплатным расширением. Вы сможете обновлять функции вашего расширения и изменения будут регулярно попадать в новые релизы SelSup.

Маркировка Честный знак

Методы для работы с маркировкой товаров через систему Честный знак

Обновить код маркировки

Получает актуальный статус кода маркировки

path Parameters
markId
required
integer <int64>
orderId
required
integer <int64>

Responses

Создать или найти код маркировки

Проверяет наличие коды маркировки, если находит - возвращает его, если не находит - создает новый код

query Parameters
code
required
string
organizationId
required
integer <int64>

Responses

Обновить код маркировки

Получает актуальный статус кода маркировки из Честного знака

path Parameters
id
required
integer <int64>

Responses

Обновить коды маркировки

Получает актуальный статус кода маркировки. В теле запроса передается массив идентификаторов кодов маркировки SelSup.

Request Body schema: application/json
required
Array
integer <int64>

Responses

Request samples

Content type
application/json
[
  • 0
]

Помечает маркировку нанесенной

Добавляет маркировку для формирования отчета о нанесении

query Parameters
base64
boolean
Request Body schema: application/json
required
Array
string

Responses

Request samples

Content type
application/json
[
  • "string"
]

Обновить коды маркировки

Получает актуальный статус кода маркировки

path Parameters
orderId
required
integer <int64>

Responses

Обновить коды маркировки

Получает актуальный статус кода маркировки

path Parameters
orderId
required
integer <int64>

Responses

Ввод в оборот кодов маркировки

Создаёт документы на ввод в оборот и возвращает для подписания

Request Body schema: application/json
required
limit
integer <int32>

Ограничение на количество записей. Максимальное значение - 500

page
integer <int32>

Номер страницы начиная с 1

count
boolean

Возвратить в ответе общее количество записей

sortBy
string
Enum: "ID" "CREATEDDATE" "CODE" "STATUS" "ORDERID"

Поле сортировки записей. Работает только при получении списка.

ascending
boolean

Порядок сортировки - по возрастанию?. Работает только при получении списка.

query
string

Запрос для поиска кодов маркировки. Ищет по самому коду

status
string
Enum: "CREATED" "PRINTED" "CIRCULATION" "TURNOVER" "TRANSFERRED" "RETIRED" "WRITTEN_OFF" "WITHDRAWN" "INVALID" "EMITTED"

Статус кода

applyStatus
string
Enum: "NONE" "NOT_REQUIRED" "SCANNED" "SUCCESS"

Статус нанесения

toIntroduce
boolean

Выбирает коды маркировки для ввода в оборот первый раз

organizationId
integer <int64>

Организация

orderId
integer <int64>

Заказ в котором был выдан код

documentId
integer <int64>

Документ, в котором был изменен статус кода

notSupplied
boolean

Не отгружался

turnover
boolean

Нужен вывод из оборота. Выбирает проданные заказы, чтобы сформировать документ на вывод из оборота

refund
boolean

Нужен возврат в оборот. Выбирает возвращенные заказы,чтобы сформировать документ на возврат в оборот

codes
Array of integers <int64> [ items <int64 > ]

Коды маркировки

Responses

Request samples

Content type
application/json
{
  • "limit": 0,
  • "page": 0,
  • "count": true,
  • "sortBy": "ID",
  • "ascending": true,
  • "query": "string",
  • "status": "CREATED",
  • "applyStatus": "NONE",
  • "toIntroduce": true,
  • "organizationId": 0,
  • "orderId": 0,
  • "documentId": 0,
  • "notSupplied": true,
  • "turnover": true,
  • "refund": true,
  • "codes": [
    ]
}

Импорт кодов маркировки

Импортирует всего коды маркировки организации из Честного знака

Responses

Обновляет карточку из Национального каталога

Обновляет карточку по данным из национального каталога

path Parameters
modelId
required
integer <int64>

Responses

Отправить отчет о нанесении

Позволяет отправить в Честный знак отчет о нанесении

Request Body schema: application/json
required
id
integer <int64>

Идентификатор документа. Проставляется автоматически

number
string

Номер документа. Проставляется автоматически после отправки документа в Честный знак

categoryClass
string
Enum: "SHOES" "LIGHT" "DRUGS" "CAMERA" "TYRES" "MILK" "WATER" "TOBACCO" "FURS" "BEER" "BICYCLES" "PERFUMES" "ELECTRONIC" "OTHER" "NONE" "FOOD" "WHEELCHAIRS" "OTP" "NCP" "BIO" "ANTISEPTIC" "NABEER" "SOFTDRINKS" "PETFOOD" "SEAFOOD" "MEAT" "TOYS" "TITAN" "RADIO" "OPTIC_FIBER" "VEGETABLE_OIL" "CONSERVE" "VETPHARMA" "CHEMISTRY"

Группы категорий Честного знака

type
string
Enum: "LP_INTRODUCE_GOODS" "LK_INDI_COMMISSIONING" "LP_INTRODUCE_OST" "LP_GOODS_IMPORT" "LK_RECEIPT" "LK_REMARK" "CROSSBORDER" "LK_KM_CANCELLATION" "LP_RETURN" "AGGREGATION_DOCUMENT" "APPLY"

Тип документа честный знак

status
string
Enum: "CREATED" "ERROR" "ACCEPTED" "SUCCESS"

Статус документа

content
string

Документ в формате JSON

orderId
integer <int64>

Заказ из которого создан документ

codes
Array of strings
object (ProductCode)

Код маркировки товара в Честном Знаке

signature
string

Открепленная подпись документа

Responses

Request samples

Content type
application/json
{
  • "id": 0,
  • "number": "string",
  • "categoryClass": "SHOES",
  • "type": "LP_INTRODUCE_GOODS",
  • "status": "CREATED",
  • "content": "string",
  • "orderId": 0,
  • "codes": [
    ],
  • "aggregate": {
    },
  • "signature": "string"
}

Агрегация кодов маркировки

Создаёт документы на агрегацию кодов маркировки

query Parameters
gln
required
string
productId
required
integer <int64>
Request Body schema: application/json
required
Array
id
integer <int64>

Идентификатор кода маркировки

code
string

Длинный код маркировки товара, содержащий штрих-код, серию и другую информацию

productId
integer <int64>

Карточка товара на которую был выпущен код маркировки

object (Product)

Товар - уникальный с точки зрения подтребительских свойств товар.

suzProductId
string

GTIN на товар из заказа СУЗ в рамках которого был выпущен данный код маркировки

createdDate
string <date-time>
orderId
integer <int64>

Идентификатор заказа в котором получался данный код маркировки

supplyOrderId
integer <int64>

Идентификатор заказа в котором отгружен данный код маркировки

createdUser
string
crptApiError
string

Текст ошибки при работе с API Честного знака

status
string
Enum: "CREATED" "PRINTED" "CIRCULATION" "TURNOVER" "TRANSFERRED" "RETIRED" "WRITTEN_OFF" "WITHDRAWN" "INVALID" "EMITTED"

Статус кода маркировки

clientId
integer <int64>
hash
integer <int32>

Хэш от уникальной части кода маркировки для быстрого поиска кода

organizationId
integer <int64>
documentId
integer <int32>
owner
string
primaryDocumentType
string
Enum: "RECEIPT" "CORRECTION_RECEIPT" "CONSIGNMENT_NOTE" "UTD" "CUSTOMS_DECLARATION" "DESTRUCTION_ACT" "OTHER"
primaryDocumentNumber
string
primaryDocumentDate
string
primaryDocumentCustomName
string
emissionType
string
Enum: "LOCAL" "FOREIGN" "REMAINS" "CROSSBORDER" "REMARK" "COMMISSION" "AGGREGATION"
packageType
string
Enum: "UNIT" "BUNDLE" "GROUP" "SET" "ATK"
salePrice
number <double>
orderService
string
Enum: "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"

Сервис

orderNumber
string
orderDate
string <date-time>
categoryClass
string
Enum: "SHOES" "LIGHT" "DRUGS" "CAMERA" "TYRES" "MILK" "WATER" "TOBACCO" "FURS" "BEER" "BICYCLES" "PERFUMES" "ELECTRONIC" "OTHER" "NONE" "FOOD" "WHEELCHAIRS" "OTP" "NCP" "BIO" "ANTISEPTIC" "NABEER" "SOFTDRINKS" "PETFOOD" "SEAFOOD" "MEAT" "TOYS" "TITAN" "RADIO" "OPTIC_FIBER" "VEGETABLE_OIL" "CONSERVE" "VETPHARMA" "CHEMISTRY"

Группы категорий Честного знака

applyStatus
string
Enum: "NONE" "NOT_REQUIRED" "SCANNED" "SUCCESS"

Responses

Request samples

Content type
application/json
[
  • {
    }
]

Поиск кодов маркировки

Возвращает список кодов маркировки по страницам

query Parameters
query
string

Запрос для поиска кодов маркировки. Ищет по самому коду

status
string

Статус кода

applyStatus
string

Статус нанесения

toIntroduce
string

Выбирает коды маркировки для ввода в оборот первый раз

organizationId
string

Организация

orderId
string

Заказ в котором был выдан код

documentId
string

Документ, в котором был изменен статус кода

notSupplied
string

Не отгружался

turnover
string

Нужен вывод из оборота. Выбирает проданные заказы, чтобы сформировать документ на вывод из оборота

refund
string

Нужен возврат в оборот. Выбирает возвращенные заказы,чтобы сформировать документ на возврат в оборот

codes
string

Коды маркировки

limit
string

Ограничение на количество записей. Максимальное значение - 500

page
string

Номер страницы начиная с 1

count
string

Возвратить в ответе общее количество записей

sortBy
string

Поле сортировки записей. Работает только при получении списка.

ascending
string

Порядок сортировки - по возрастанию?. Работает только при получении списка.

Responses

Товары

Модели

Категории

Бренды

Производители

Фотосессии

Знания

Ключевые слова

Параметры

Цены

Акции

Реклама

Заказы

Заказы со своего склада (FBS)

Поставки

Возвраты

Сервис Мой склад

Доставка

Покупатели

Закупки

Поставщики

Остатки

Склады

Аналитика

Гипотезы

Документы

Экспорт

Импорт

Задачи

Настройки

Клиент

Билинг