API позволяет продавцам управлять заказами. Поддерживаются действия get-all, create и edit.
1. URL
https://api.onstor.ru/common/merchant/1.0/
2. Аутентификация
Запрос должен содержать действительный token в строке запроса, данных формы или JSON-теле. Токен определяет авторизованную сессию продавца.
Передача параметров
Параметры передаются через GET, POST или RAW JSON в теле запроса. Допускается любой из способов и их сочетание.
3. Справочник полей
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| order_id | int | Нет | Идентификатор заказа |
| external_id | string | Нет | Внешний идентификатор заказа |
| user | object | Да* | Объект клиента |
| type | int | Нет | 1 — доставка, 2 — самовывоз |
| destination_address | multilang | Да* | Адрес доставки на нескольких языках |
| destination_coordinates | object | Да** | Координаты доставки: { "lat": -58.3816, "lon":-34.6037 } |
| destination_info | string | Нет | Дополнительные сведения об адресе доставки |
| comment | string | Нет | Комментарий к заказу |
| cost | decimal | Нет | Стоимость товаров |
| discount | decimal | Нет | Сумма скидки |
| bonus | decimal | Нет | Сумма бонусов |
| promocode_amount | decimal | Нет | Сумма скидки по промокоду |
| tips | decimal | Нет | Сумма чаевых |
| fee | decimal | Нет | Сервисный сбор |
| vat | decimal | Нет | Сумма налога |
| delivery | decimal | Нет | Стоимость доставки |
| payment_commission | decimal | Нет | Комиссия за оплату |
| reserve | decimal | Нет | Сумма резерва |
| refund | decimal | Нет | Сумма возврата |
| total | decimal | Нет | Итоговая сумма |
| order_status | object / int | Нет | Статус заказа |
| time_create | datetime | Нет | Дата и время создания заказа |
| time_finish | datetime | Нет | Планируемая дата и время завершения |
| time_delivery | datetime | Нет | Фактическая дата и время доставки |
| courier | object | Нет | Объект курьера |
| asap | bool / int | Нет | 1 — как можно скорее, 0 — по расписанию / предзаказ |
| cutlery | int | Нет | Число персон / комплектов приборов |
| paid | bool | Нет | Признак завершённой оплаты |
| paid_refund | bool | Нет | Признак выполненного возврата |
| pay_type | object / int | Нет | Способ оплаты |
| pay_link | string | Нет | URL оплаты |
| currency | string | Нет | Код валюты |
| cart | array | Да* | Корзина заказа / список позиций |
Поле user
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| user | object | Да | Данные клиента, связанного с заказом. |
| user.phone | string | Да | Номер телефона клиента. |
| user.name | string | Да | Полное имя клиента. |
| user.email | string | Нет | Электронная почта клиента. |
Поле cart
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| cart | array | Да | Список позиций в заказе. |
| cart[].item | object | Да | Объект товара. |
| cart[].item.name | multilang object | Да | Название товара на нескольких языках. |
| cart[].item.description | multilang object | Нет | Описание товара на нескольких языках. |
| cart[].item.img | string | Нет | URL изображения товара. |
| cart[].qty | decimal | Да | Количество товара. |
| cart[].price | decimal | Да | Цена единицы товара. |
| cart[].discount | decimal | Нет | Сумма скидки на позицию корзины. |
* Обязательно для создания заказа в типовом сценарии доставки. Точные правила проверки зависят от бизнес-логики и настроек продавца.
** Для создания заказа обязательно передать точные координаты места назначения.
Значение многоязычного поля
Строка применяется ко всем языкам компании. В объекте значения назначаются соответствующим языкам; отсутствующие заполняются последним переданным значением. Коды языков, не включённых в настройках компании, игнорируются.
"destination_address": {
"es": "Buenos Aires, Calle Falsa 123",
"en": "Fake Street 123, Buenos Aires"
}
4. Структура ответа
{
"auth": {
"status": "OK",
"merchant": {
"id": 427,
"company": 228,
"country": {
"currency_code": "ILS"
}
},
"languages": [
{
"code": "ES",
"name": "Español"
},
{
"code": "EN",
"name": "English"
},
{
"code": "RU",
"name": "Русский"
}
]
},
"payload": {
"status": "OK",
"error": "",
"data": [...]
}
}
auth.status— статус аутентификации, напримерOKauth.error— описание ошибки аутентификации, еслиauth.statusравенERRORauth.merchant— данные авторизованного продавцаauth.languages— доступные языки продавца / компанииpayload.status— результат операции:OKилиERRORpayload.error— описание ошибки операции, еслиpayload.statusравенERRORpayload.request_id— идентификатор запроса API, например для отслеживания webhookpayload.data— объект или массив данных в зависимости от метода
5. Выбор возвращаемых полей
По умолчанию API возвращает все доступные поля. Передайте fields — массив публичных имён полей, чтобы ограничить ответ.
Пример запроса
{
"api": "order",
"method": "get-all",
"token": "...",
"limit": 100,
"offset": 0,
"fields": ["order_id", "external_id", "order_status"]
}
Примечания
- Имена в
fieldsдолжны точно совпадать с публичными именами из справочника полей. - Если
fieldsне передан, возвращаются все поля.
6. Получить заказы
Возвращает плоский список заказов продавца.
Запрос
Методы:GET / POST / тело RAW JSON
URL: https://api.onstor.ru/common/merchant/1.0/
Параметры
| Название | Тип | Описание | Обязательное |
|---|---|---|---|
| api | string | order |
Да |
| method | string | get-all |
Да |
| token | string | Токен аутентификации | Да |
| limit | integer | Максимальное число заказов (по умолчанию: 20) | Нет |
| offset | integer | Смещение пагинации (по умолчанию: 0) | Нет |
| fields | array | Список возвращаемых полей | Нет |
| filter | object | Правила фильтрации. См. раздел 7 «Фильтрация результатов» | Нет |
Пример запроса
{
"api": "order",
"method": "get-all",
"token": "...",
"limit": 50,
"offset": 0,
"fields": ["order_id", "external_id", "cart"],
"filter": {
"external_id": { "eq": "ext-1003" }
}
}
Пример ответа
{
"auth": {
"status": "OK"
},
"payload": {
"status": "OK",
"error": "",
"data": [
{
"order_id": 2289,
"external_id": "ext-1003",
"cart": [
{
"qty": 2,
"price": 10.50,
"total": 21.00
}
]
}
],
"total": 1,
"offset": false
}
}
Примечания:
offset = falseозначает отсутствие следующей страницы.fieldsограничивает возвращаемые поля.
7. Фильтрация результатов
Метод get-all поддерживает универсальный объект filter для фильтрации по правилам SQL.
Внутри filter используются публичные имена полей.
Поддерживаемые операторы
| Оператор | Описание | Пример |
|---|---|---|
| eq | Равно | "order_id":{"eq":10} |
| ne | Не равно | "paid":{"ne":1} |
| gt | Больше | "total":{"gt":100} |
| gte | Больше или равно | "total":{"gte":100} |
| lt | Меньше | "total":{"lt":100} |
| lte | Меньше или равно | "total":{"lte":100} |
| like | SQL LIKE (символ % указывается вручную) | "external_id":{"like":"%1003%"} |
| in | Входит в список | "order_id":{"in":[1,2,3]} |
| nin | Не входит в список | "order_id":{"nin":[1,2,3]} |
| between | Диапазон | "total":{"between":[10,50]} |
| is_null | Проверка NULL | "external_id":{"is_null":true} |
Простой фильтр AND
{
"filter": {
"paid": { "eq": 1 },
"total": { "gte": 10 }
}
}
Результат:
paid = 1 AND total >= 10
Группы AND / OR
{
"filter": {
"and": [
{ "paid": { "eq": 1 } },
{ "type": { "eq": 1 } }
],
"or": [
{ "external_id": { "like": "%web%" } },
{ "comment": { "like": "%web%" } }
]
}
}
Только OR
{
"filter": {
"or": [
{ "order_status": { "eq": 1 } },
{ "order_status": { "eq": 2 } }
]
}
}
Полный пример
{
"api": "order",
"method": "get-all",
"token": "...",
"limit": 50,
"offset": 0,
"fields": ["order_id", "external_id", "total", "paid"],
"filter": {
"and": [
{ "paid": { "eq": 1 } },
{ "total": { "between": [10, 50] } }
],
"or": [
{ "external_id": { "is_null": false } },
{ "comment": { "like": "%promo%" } }
]
}
}
Важные замечания
- Указывайте
%в выраженияхLIKEвручную. in: []всегда даёт ложное условие.nin: []всегда даёт истинное условие.- Для логических значений рекомендуется использовать
0/1.
8. Создать заказ
Создаёт новый заказ для авторизованного продавца.
Запрос
Методы:POST / тело RAW JSON
URL: https://api.onstor.ru/common/merchant/1.0/
Параметры
| Название | Тип | Описание | Обязательное |
|---|---|---|---|
| api | string | order |
Да |
| method | string | create |
Да |
| token | string | Токен аутентификации | Да |
| fields | array | Список возвращаемых полей | Нет |
| payload | array | Данные тела запроса | Да |
Пример запроса
{
"api": "order",
"method": "create",
"token": "...",
"payload": {
"external_id": "ext-1004",
"user": {
"phone": "+54 (911) 1234-5678",
"name": "Juan Perez",
"email": "juan@example.com"
},
"type": 1,
"destination_address": {
"es": "Buenos Aires, Calle Falsa 123",
"en": "Fake Street 123, Buenos Aires"
},
"destination_coordinates": { "lat": -58.3816, "lon":-34.6037 },
"destination_info": "Depto 4B, timbre Perez",
"comment": "Sin cebolla por favor",
"bonus": 10,
"promocode_amount": 5,
"tips": 2,
"fee": 1.5,
"vat": 3,
"delivery": 4,
"payment_commission": 0.5,
"odd": 0,
"promocode": "WELCOME",
"tips_percent": 5,
"order_status": null,
"time_finish": "2026-03-19 20:00:00",
"time_delivery": null,
"delivery_time": 0,
"asap": 1,
"cutlery": 2,
"platform": "ios",
"ver": "1.0.0",
"promocode_type": 1,
"promocode_discount": 5,
"currency": "ARS",
"cart": [
{
"item": {
"name": {
"es": "Hamburguesa",
"en": "Burger"
},
"description": {
"es": "Carne con queso",
"en": "Beef with cheese"
},
"img": "https://example.com/burger.jpg"
},
"qty": 2,
"price": 10.5,
"discount": 1.5
},
{
"item": {
"name": {
"es": "Papas fritas",
"en": "Fries"
},
"description": {
"es": "Papas crujientes",
"en": "Crispy fries"
},
"img": "https://example.com/fries.jpg"
},
"qty": 1,
"price": 5,
"discount": 0
}
]
}
}
Примечания
- Проверка вложенных полей зависит от настроек продавца и правил интеграции.
- Для доставки обычно обязательны адрес и координаты.
- В ответе могут быть дополнительные поля в зависимости от реализации.
9. Изменить заказ
Обновляет существующий заказ.
Запрос
Методы:POST / тело RAW JSON
URL: https://api.onstor.ru/common/merchant/1.0/
Параметры
| Название | Тип | Описание | Обязательное |
|---|---|---|---|
| api | string | order |
Да |
| method | string | edit |
Да |
| token | string | Токен аутентификации | Да |
| fields | array | Список возвращаемых полей | Нет |
| payload | array | Данные тела запроса | Да |
* Обычно нужен хотя бы один идентификатор заказа: order_id или external_id, в зависимости от реализации.
Пример запроса
{
"api": "order",
"method": "edit",
"token": "5486e371-631d-11f0-a416-fa163eed394d",
"fields": ["order_status"],
"payload": {
"external_id": "ext-1003",
"order_status": 4
}
}
Примечания
- Обновляются только переданные поля.
- Доступные для изменения поля зависят от бизнес-логики, статуса заказа и ограничений интеграции.
- Если заказ не найден или не может быть изменён, API возвращает
payload.status = "ERROR".