API позволяет продавцам получать списки и сведения о товарах, создавать, обновлять и удалять товары на платформе.
URL:
https://api.onstor.ru/common/merchant/1.0/
Аутентификация
Каждый запрос должен содержать действительный параметр token в строке запроса или JSON-теле. Он определяет авторизованную сессию продавца.
Справочник полей
| Поле | Тип | Описание |
|---|---|---|
| merchant_id | integer | Идентификатор связанного продавца |
| name | object | Название товара |
| description | object | Описание |
| image | string / object |
Метод get возвращает URL изображения.
При импорте изображения можно передать:
|
| tag_category | array | Категории тегов
|
| tag_product | object | Поля тегов товара
|
| info | array | Поля дополнительной информации
|
| addons | array | Дополнительные опции товара |
| parent_id | integer | Идентификатор родительского товара или категории |
| parent_public_id | string | Идентификатор родительского товара или категории по полю public_id |
| unset_parent | boolean |
Не применять parent_id к существующему товару. Позволяет обновлять данные без изменения структуры дерева. По умолчанию: false |
| is_category | boolean | Признак категории: true — категория, false — товар |
| price | float | Базовая цена товара |
| discount_type | integer | 1 — фиксированная, 2 — процентная, по умолчанию: 1 |
| discount | float | Размер скидки, по умолчанию: 0 |
| enable | boolean | Доступность, по умолчанию: true |
| sort_order | integer | Порядок отображения |
| created_at | string | Дата и время создания |
| updated_at | string | Дата и время последнего обновления |
| weight | integer | Вес товара |
| weight_g | integer | Вес одной единицы товара с упаковкой в граммах. По умолчанию: 0 — не указан. |
| length_mm | integer | Длина одной единицы товара с упаковкой в миллиметрах. По умолчанию: 0 — не указана. |
| width_mm | integer | Ширина одной единицы товара с упаковкой в миллиметрах. По умолчанию: 0 — не указана. |
| height_mm | integer | Высота одной единицы товара с упаковкой в миллиметрах. По умолчанию: 0 — не указана. |
| energy | integer | Энергетическая ценность в ккал |
| preparation_time | integer | Время в секундах |
| homepage_show | boolean | Показывать на главной странице |
| homepage_image | string / object | Изображение карточки на главной странице (см. описание поля img) |
| homepage_size | integer | Категория размера отображения |
| homepage_colors | array | Цветовая палитра интерфейса |
| alcohol_warning | boolean | Показывать предупреждение об алкоголе, по умолчанию: false |
| store_balance | integer | Доступное количество, по умолчанию: 1 |
| external_id | string | Идентификатор во внешней системе |
| external_parent_id | string | Идентификатор родителя во внешней системе |
| external_key | string | Ключ во внешней системе |
| product_id | integer | Уникальный идентификатор товара, по умолчанию: 0 |
| is_bulk | boolean | Признак весового товара: true — весовой, false — обычный. По умолчанию: false. |
| bulk_step | float | Шаг количества при добавлении весового товара в корзину, в килограммах. По умолчанию: 0. |
| bulk_reserve | float | Максимальное дополнительное количество при сборке весового товара, в килограммах. По умолчанию: 0. |
Структура ответа
{
"auth": {
"status": "OK",
"merchant": {
"id": "423",
"name": {
"EN": "Cafe Lebowski",
"IL": "קפה לבובסקי",
"ES": "Cafe Lebowski",
},
"company": "228"
},
"languages": [
{"code": "EN", "name": "English"},
{"code": "IL", "name": "עברית"},
{"code": "ES", "name": "Español"},
]
},
"payload": {
"status": "OK",
"error": "",
"request_id": 13,
"data": [...]
}
}
auth.status— статус аутентификации, напримерOKauth.error— описание ошибки, еслиauth.statusравенERRORauth.merchant— данные продавца с названиями на всех настроенных языкахauth.languages— доступные языки компанииpayload.status— результат операции:OK— успех,ERROR— ошибка. Подробности вpayload.error.payload.error— описание ошибки, еслиpayload.statusравенERRORpayload.request_id— идентификатор запроса API для отслеживания уведомлений webhookpayload.data— объект или массив результата в зависимости от метода: товары, сведения о товаре или структура групп
Выбор возвращаемых полей
По умолчанию API возвращает все поля. Чтобы ограничить ответ, передайте fields — массив публичных имён полей.
Пример
{
"api": "product",
"method": "get-all",
"token": "...",
"limit": 100,
"offset": 0,
"fields": ["product_id", "name", "price", "image", "external_id"]
}
Примечания
fieldsдолжен содержать публичные имена полей из справочника.- Если
fieldsне передан, возвращаются все поля. - Если ни одно имя в
fieldsне является допустимым, для каждой строки возвращается пустой объект. Пагинация сохраняется.
Вес и габариты для доставки
Поля weight_g, length_mm, width_mm и height_mm описывают одну единицу товара с упаковкой. Это параметры товара, а не итоговой посылки заказа. Поле weight остаётся самостоятельным и автоматически с weight_g не синхронизируется.
Все четыре поля доступны в get-all, get-product, в выборе fields, в filter и для записи через put-products. Допустимы целые числа от 0 до 4294967295, в том числе строки из цифр. Отрицательные, дробные значения, null и логические значения не принимаются: в payload.data возвращается ошибка соответствующего товара; его поля не изменяются.
При обновлении можно передать только изменяемые параметры. Пропущенные поля сохраняют прежние значения; 0 сбрасывает параметр в «не указан». У существующих товаров после добавления полей и у новых товаров без этих параметров значения равны 0.
Записать вес и габариты
{
"api": "product",
"method": "put-products",
"token": "...",
"fields": ["product_id", "weight_g", "length_mm", "width_mm", "height_mm"],
"payload": [{
"product_id": 12345,
"weight_g": 750,
"length_mm": 200,
"width_mm": 150,
"height_mm": 100
}]
}
Получить товары с известным весом
{
"api": "product",
"method": "get-all",
"token": "...",
"fields": ["product_id", "name", "weight_g", "length_mm", "width_mm", "height_mm"],
"filter": {"weight_g": {"gt": 0}}
}
1. Получить все товары
Возвращает плоский список всех товаров продавца.
Запрос
Методы: GET / POST
URL: https://api.onstor.ru/common/merchant/1.0/?api=product&method=get-all&token={token}&limit={limit}&offset={offset}
Обязательные параметры запроса
| Название | Тип | Описание | Обязательное |
|---|---|---|---|
| api | string | product | Да |
| method | string | get-all | Да |
| token | string | Токен аутентификации | Да |
| limit | integer | Максимальное число товаров (по умолчанию: 20) | Нет |
| offset | integer | Смещение пагинации (по умолчанию: 0) | Нет |
Ответ
Возвращает список товаров с метаданными и полями на настроенных языках.
2. Получить категории товаров
Получает группы товаров с учётом связей родителя и потомка.
Запрос
Метод: GET / POST
URL: https://api.onstor.ru/common/merchant/1.0/?api=product&method=get-categories&token={token}
Параметры запроса
| Название | Тип | Описание | Обязательное |
|---|---|---|---|
| api | string | product | Да |
| method | string | get-groups | Да |
| token | string | Токен аутентификации | Да |
3. Получить сведения о товаре
Возвращает подробные сведения об указанном товаре.
Запрос
Метод: GET / POST
URL: https://api.onstor.ru/common/merchant/1.0/?api=product&method=get-product&token={token}&product_id={product_id}
Параметры запроса
| Название | Тип | Описание | Обязательное |
|---|---|---|---|
| api | string | product | Да |
| method | string | get-product | Да |
| token | string | Токен аутентификации | Да |
| product_id | integer | Идентификатор товара | Да |
4. Фильтрация результатов
Методы get-all и get-categories поддерживают универсальный объект filter для SQL-фильтрации.
Внутри filter используются публичные имена полей.
Поддерживаемые операторы
| Оператор | Описание | Пример |
|---|---|---|
| eq | Равно | "price":{"eq":10} |
| ne | Не равно | "enable":{"ne":0} |
| gt | Больше | "price":{"gt":10} |
| gte | Больше или равно | "price":{"gte":10} |
| lt | Меньше | "price":{"lt":10} |
| lte | Меньше или равно | "price":{"lte":10} |
| like | SQL LIKE (символ % указывается вручную) | "name":{"like":"%cola%"} |
| in | Входит в список | "product_id":{"in":[1,2,3]} |
| nin | Не входит в список | "product_id":{"nin":[1,2,3]} |
| between | Диапазон | "price":{"between":[10,50]} |
| is_null | Проверка NULL | "external_id":{"is_null":true} |
Простой фильтр AND
{
"filter": {
"enable": {"eq": 1},
"price": {"gte": 10}
}
}
Результат:
enable = 1 AND price >= 10
Группы AND / OR
{
"filter": {
"and": [
{"enable":{"eq":1}},
{"is_category":{"eq":0}}
],
"or": [
{"name":{"like":"%cola%"}},
{"description":{"like":"%cola%"}}
]
}
}
Только OR
{
"filter": {
"or": [
{"discount_type":{"eq":1}},
{"discount_type":{"eq":2}}
]
}
}
Полный пример
{
"api": "product",
"method": "get-all",
"token": "...",
"limit": 50,
"offset": 0,
"fields": ["product_id","name","price","external_id"],
"filter": {
"and":[
{"enable":{"eq":1}},
{"price":{"between":[10,50]}}
],
"or":[
{"external_id":{"is_null":false}},
{"external_key":{"is_null":false}}
]
}
}
Важные замечания
- Указывайте
%в выраженияхLIKEвручную. in: []→ всегда false.nin: []→ всегда true.- Логические значения преобразуются автоматически; рекомендуется использовать
0/1.
5. Создать / обновить товары
Создаёт или обновляет данные товаров.
https://api.onstor.ru/common/merchant/1.0/
Примечание: отправляйте тело запроса как raw JSON (Content-Type: application/json).
Параметры запроса
| Название | Тип | Описание | Обязательное |
|---|---|---|---|
| api | string | product | Да |
| method | string | get-product | Да |
| token | string | Токен аутентификации | Да |
| payload | array | Данные товаров | Да |
| language | string | Код языка | Нет |
| translate | boolean | Переводить автоматически | Нет |
| webhook | string | URL уведомлений webhook | Нет |
Пример тела запроса
{
"api": "product",
"method": "put-products",
"token": "...",
"language": "EN",
"translate": true,
"webhook": "https://webhook.site/4082430c-24eb-4df8-9903-d895fa668b5f",
"payload": [...]
}
Если передан product_id или external_id существующего товара, запись обновляется. Если товар не найден, автоматически создаётся новый.
Иерархию товаров можно создать двумя способами:
-
Вложенность через
child:
Позволяет задать вложенные товары непосредственно в родительском объекте:"payload": [ { "name": "New Category", "external_id": "ext_id_cat_1", "description": {"EN": "Category Description"}, "image": "https://...", "child": [ { "name": "Product 1", "external_id": "ext_id_prod_1", "description": {"EN": "Description for Product 1"}, "image": "https://..." }, { "name": "Product 2", "external_id": "ext_id_prod_2", "description": {"EN": "Description for Product 2"}, "image": "https://..." } ] } ] -
Указав
parent_id:
Позволяет добавить товар в существующую родительскую категорию:{ "name": "Child Product", "external_id": "ext_id_new_child", "parent_id": 12345 }
Язык и перевод
Параметр language задаёт исходный язык контента. При translate = true система переводит контент на остальные языки компании продавца.
Контент можно передать строкой или объектом с кодами языков:
"name": "Some text""name": { "EN": "Some text" }
При частичных переводах автоматически заполняются только отсутствующие языки. Например, компания поддерживает EN, ES и IL, а в запросе передано:
{
"name": {
"EN": "Some text",
"ES": "Un poco de texto"
}
}
В этом случае автоматически создаётся только отсутствующий перевод IL.
Уведомления webhook
В поле webhook задаётся URL обратного вызова. На него отправляется POST-запрос, когда:
- Загруженные изображения (например,
imageи homepage_image) обработаны и готовы; - Автоматические переводы, запущенные через
translate: true, завершены.
Это позволяет обновлять клиентское приложение после завершения асинхронной обработки.
Тело webhook
После обработки изображений и перевода система отправляет POST-запрос на указанный URL webhook со следующим телом:
{
"request_id": "13",
"status": "OK"
}
request_idсоответствует payload.request_idиз ответаput-productsstatus—OKпри успехе илиERRORпри ошибке обработки
Требования к URL изображений
image и homepage_image должны содержать действительные общедоступные URL файлов изображений. Сервер загружает и обрабатывает изображения по этим адресам.
6. Удалить выбранные товары
https://api.onstor.ru/common/merchant/1.0/
Примечание: отправляйте тело запроса как raw JSON (Content-Type: application/json).
Параметры запроса
| Название | Тип | Описание | Обязательное |
|---|---|---|---|
| api | string | product | Да |
| method | string | delete-products | Да |
| token | string | Токен аутентификации | Да |
| payload | array | ID(s) | Да |
Удаляет один или несколько товаров по идентификаторам товаров.
Пример тела запроса
{
"api": "product",
"method": "delete-products",
"token": "...",
"use_external_id": true,
"payload": [12345, 54321]
}
Удаляет один или несколько товаров по внешним идентификаторам.
Пример тела запроса
{
"api": "product",
"method": "delete-products",
"token": "...",
"use_external_id": true,
"payload": ["external_id_1"]
}
7. Удалить все товары
Удаляет все товары продавца.
URL
https://api.onstor.ru/common/merchant/1.0/?api=product&method=delete-all&token={token}
Параметры запроса
| Название | Тип | Описание | Обязательное |
|---|---|---|---|
| api | string | product | Да |
| method | string | delete-all | Да |
| token | string | Токен аутентификации | Да |
Внимание: будут удалены все товары продавца. Перед выполнением убедитесь, что данные сохранены в резервной копии.