Orders. Заказы
Методы для работы с заказами покупателей: получение заказов клиента или конкретного заказа, создание заказа, изменение его данных, добавление, изменение и удаление строк, справочники типов оплаты и доставки.
Как получить ключ, как формируются запросы и какие бывают ответы и ошибки — в статье Общие сведения. Здесь описаны только особенности методов раздела orders.
Методы
| Метод | Адрес | Что делает |
|---|---|---|
| Типы оплаты | /api/orders/get_payment_types | Справочник доступных типов оплаты |
| Типы доставки | /api/orders/get_delivery_types | Справочник доступных типов доставки |
| Заказы | /api/orders | Возвращает заказы клиента или всех клиентов |
| Один заказ | /api/orders/get_order | Возвращает заказ по ид или коду |
| Создать заказ | /api/orders/add_order | Создаёт заказ клиента со строками |
| Изменить заказ | /api/orders/update_order | Меняет данные заказа |
| Добавить строки | /api/orders/add_orders_item | Добавляет строки в заказ |
| Изменить строки | /api/orders/update_order_item | Меняет строки заказа |
| Удалить строки | /api/orders/delete_orders_item | Удаляет строки заказа |
Где передавать параметры. Ключ apikey и формат format принимаются и в адресной строке, и в теле POST-запроса. Параметры id и external_id в методах update_order, add_orders_item, update_order_item и delete_orders_item читаются только из адресной строки (GET); в остальных методах их можно передавать и в теле POST. Данные заказа и строк передаются в параметрах order и items в формате JSON: используйте POST.
Что означают id и external_id. В методах orders и add_order это идентификаторы клиента, а в остальных методах — идентификаторы заказа. Код заказа во внешней системе (external_id) хранится в поле guid заказа.
Справочники
GET https://[компания].myvirtualpos.ru/api/orders/get_payment_types?apikey=MySecret GET https://[компания].myvirtualpos.ru/api/orders/get_delivery_types?apikey=MySecret
Методы возвращают только доступные к выбору типы. Ид из этих справочников указывается в payment_type_id и delivery_type_id при создании заказа.
{
"success": 1,
"payment_types": [
{ "type": { "id": 1, "name": "Оплата при получении" } },
{ "type": { "id": 2, "name": "Оплата онлайн" } }
]
}
Для типов доставки список приходит в поле delivery_types, структура такая же. Если типов нет, success равен 0, а список — null.
Получение заказов
GET https://[компания].myvirtualpos.ru/api/orders?apikey=MySecret&id=40823&days=90
Параметры запроса
| id | Число. Ид клиента: вернутся заказы этого клиента. Если не указан вместе с external_id, возвращаются заказы всех клиентов |
| external_id | Строка. Код клиента во внешней системе. Работает так же, как id |
| datefrom | Дата ГГГГММДД. Заказы, созданные с этой даты. Снимает ограничение days |
| dateto | Дата ГГГГММДД. Заказы, созданные не позднее этой даты |
| datechangefrom | Дата ГГГГММДД. Заказы, изменённые с этой даты |
| days | Число. Глубина поиска в днях по дате создания. По умолчанию 30. Не применяется, если указан datefrom |
| format | json (по умолчанию) или xml |
Условия объединяются по «и». Заказы возвращаются по убыванию ид: новые первыми. Если клиент не найден, метод возвращает ошибку «Клиент не найден».
Ограничение в 30 дней. Без datefrom отбираются заказы только за последние 30 дней (или за days). Для более старых заказов задайте days или datefrom.
Получение одного заказа
GET https://[компания].myvirtualpos.ru/api/orders/get_order?apikey=MySecret&id=24237
| id | Число. Ид заказа |
| external_id | Строка. Код заказа во внешней системе (поле guid). Используется, если не указан id |
Ответ по структуре совпадает с ответом метода orders, с одним заказом в списке. Ограничения по дате нет.
Структура ответа
| success | 1 — данные получены |
| type | Тип данных, orders (в методе orders и get_order) |
| count | Количество заказов в ответе |
| orders | Список заказов. Каждый обёрнут в объект order |
Поля заказа
Пустые значения в JSON приходят как null, в XML — как пустой элемент.
| id | Число. Ид заказа |
| external_id | Строка. Код заказа во внешней системе |
| customer_id | Число. Ид клиента. Пусто у заказов без клиента |
| state | Строка. Статус заказа, см. раздел «Статусы заказа» |
| assembled | Логическое. Заказ собран и готов к выдаче |
| cancelled | Логическое. Заказ отменён |
| completed | Логическое. Заказ завершён |
| paid | Число. 1 — заказ оплачен |
| created_date | Строка. Дата и время создания, формат гггг-мм-дд чч:мм:сс |
| amount | Строка. Сумма заказа по строкам |
| discount | Число. Общая скидка |
| shipping_address | Строка. Адрес доставки |
| shipping_cost | Строка. Стоимость доставки |
| comment | Строка. Комментарий |
| pickup_receipt_id | Число. Ид чека, которым заказ выдан покупателю |
| pickup_from_warehouse_id, pickup_from_warehouse_name | Ид и название точки продаж, откуда заказ выдаётся |
| delivery_type_id, delivery_type_name | Ид и название типа доставки |
| payment_type_id, payment_type_name | Ид и название типа оплаты |
| items | Список строк заказа. Каждая обёрнута в объект item |
В XML логические поля (assembled, cancelled, completed) для значения «нет» приходят пустыми элементами.
Строка заказа
| item_id | Число. Ид товара |
| item_external_id | Строка. Код товара, сохранённый в строке заказа |
| item_name | Строка. Название товара |
| image | Строка. Полный адрес изображения товара, пусто если изображения нет |
| quantity | Строка. Количество |
| unit_base_price | Строка. Цена за единицу по прайс-листу без скидки |
| discount | Строка. Скидка по строке |
| amount | Строка. Сумма по строке с учётом скидки |
Статусы заказа
Статус хранится в поле state. Набор статусов настраивается в системе; в базовой поставке:
| Значение | Название |
|---|---|
NEW | Новый |
PREPARING | Комплектуется |
PAYMENT_EXPECTED | Готов к оплате |
PREPARED | Готов к выдаче |
CARRIER | Отправлен |
SHIPPED | Получен |
COMPLETED | Завершён |
CANCELED | Отменён |
RETURNED | Возврат |
CHANGED | Изменён |
Актуальный список — в разделе настройки статусов заказов панели управления.
Пример ответа
{
"success": 1,
"count": 1,
"type": "orders",
"orders": [
{
"order": {
"id": 24238,
"paid": 1,
"customer_id": 40823,
"state": "NEW",
"assembled": false,
"cancelled": false,
"completed": false,
"shipping_address": "г. Москва, ул. Тверская, д. 3",
"shipping_cost": "130.00",
"pickup_receipt_id": null,
"comment": "После шести",
"external_id": "WEB-1001",
"created_date": "2026-09-26 10:31:01",
"amount": "200.00",
"discount": 10,
"pickup_from_warehouse_id": 6,
"pickup_from_warehouse_name": "Точка на Тверской",
"delivery_type_id": 1,
"delivery_type_name": "Самовывоз",
"payment_type_id": 1,
"payment_type_name": "Оплата при получении",
"items": [
{
"item": {
"item_id": 795,
"item_external_id": null,
"item_name": "Форма для наращивания",
"image": "https://[компания].myvirtualpos.ru/data/images/795_1612871937.3154.jpg",
"quantity": "2.000",
"unit_base_price": "100.00",
"discount": "10.00",
"amount": "190.00"
}
}
]
}
}
]
}
Тот же ответ при format=xml (сокращённо):
<?xml version="1.0" encoding="UTF-8"?> <root> <success>1</success> <count>1</count> <orders> <order> <id>24238</id> <customer_id>40823</customer_id> <state>NEW</state> <assembled/> <!-- остальные поля заказа --> <items> <item> <item_id>795</item_id> <quantity>2.000</quantity> <!-- остальные поля строки --> </item> </items> </order> </orders> </root>
Создание заказа
POST https://[компания].myvirtualpos.ru/api/orders/add_order?apikey=MySecret&id=40823
order={"delivery_type_id":1,"payment_type_id":1,"items":[{"item_id":795,"quantity":2,"unit_base_price":100,"discount":10}]}
Параметры
| id | Число. Ид клиента, для которого создаётся заказ |
| external_id | Строка. Код клиента во внешней системе. Используется, если не указан id. Один из двух обязателен |
| order | JSON-объект заказа, см. ниже. Обязателен |
| enable_lock | 1 — зарезервировать товар в заказе на складе. Без параметра резерв не выполняется |
Поля объекта order
| delivery_type_id | Число. Ид типа доставки. Обязательно |
| payment_type_id | Число. Ид типа оплаты. Обязательно |
| items | Массив строк заказа. Обязателен и не должен быть пустым |
| external_id | Строка. Код заказа во внешней системе, до 1024 символов |
| shipping_address | Строка. Адрес доставки |
| shipping_cost | Число. Стоимость доставки |
| comment | Строка. Комментарий |
| pickup_from_warehouse_id | Число. Ид точки продаж, откуда заказ выдаётся покупателю |
| pickup_from_warehouse_external_id | Строка. Код точки продаж во внешней системе |
| pickup_receipt_id | Число. Ид чека выдачи |
Поля строки заказа (items)
| item_id | Число. Ид товара |
| item_external_id | Строка. Код товара во внешней системе; используется, если не указан item_id. Должен существовать в системе |
| quantity | Число. Количество |
| unit_base_price | Число. Цена за единицу по прайс-листу |
| discount | Число. Скидка на всю строку |
| lot_number | Строка. Серия (партия) |
| external_id | Строка. Код строки во внешней системе |
Сумма строки рассчитывается автоматически: unit_base_price × quantity − discount.
Ответ
{
"success": 1,
"order": {
"delivery_type_id": 1,
"payment_type_id": 1,
"customer_id": 40823,
"shipping_address": "г. Москва, ул. Тверская, д. 3",
"shipping_cost": "130.00",
"pickup_from_warehouse_id": 6,
"external_id": "WEB-1001",
"comment": "После шести",
"items": [
{ "item": { "item_id": 795, "quantity": 2, "unit_base_price": 100, "discount": 10, "amount": 190 } }
],
"order_id": 24238
}
}
В ответе возвращаются переданные данные заказа, а ид созданного заказа — в поле order_id. Полные данные заказа можно получить методом get_order.
Изменение заказа
POST https://[компания].myvirtualpos.ru/api/orders/update_order?apikey=MySecret&id=24238
order={"paid":1,"state":"PREPARED","comment":"Оплачен"}
| id | Число. Ид заказа. Только GET |
| external_id | Строка. Код заказа во внешней системе. Только GET |
| order | JSON-объект с изменяемыми полями заказа: например paid, state, comment, shipping_address, shipping_cost. Нельзя передать пустой объект |
Ответ содержит полные данные заказа в том же формате, что и метод get_order: {«success»:1,«order»:{…}}. Если указан state, это должен быть код существующего статуса заказа.
Ид заказа в этом методе — ид заказа, а не клиента. Метод не проверяет, кому принадлежит заказ.
Строки заказа
POST https://[компания].myvirtualpos.ru/api/orders/add_orders_item?apikey=MySecret&id=24238
items=[{"item_id":5565,"quantity":1,"unit_base_price":50,"discount":5}]
Три метода работают с массивом items в формате JSON. Заказ определяется параметром id или external_id (только GET). Операции над несколькими строками выполняются в одной транзакции: при ошибке в любой строке не сохраняется ничего.
| add_orders_item | Добавляет строки. Каждая строка — объект с item_id, quantity, unit_base_price, discount, lot_number. Если товар уже есть в заказе, вернётся ошибка |
| update_order_item | Меняет строки. Строка определяется товаром (item_id), остальные поля — новые значения. Если товара нет в заказе, вернётся ошибка |
| delete_orders_item | Удаляет строки. В объекте достаточно указать item_id |
Во всех случаях в объекте строки нужно указать item_id; вместо него можно передать external_id — код товара из поля guid номенклатуры. Сумма строки пересчитывается по правилу unit_base_price × quantity − discount.
Ответ каждого метода: {«success»:1,«order»:{…}} с полными данными заказа после изменения.
Примеры запросов
| Задача | Запрос |
|---|---|
| Типы оплаты и доставки | /api/orders/get_payment_types?apikey=MySecret, /api/orders/get_delivery_types?apikey=MySecret |
| Заказы клиента за 90 дней | /api/orders?apikey=MySecret&id=40823&days=90 |
| Заказы клиента по коду из внешней системы | /api/orders?apikey=MySecret&external_id=CRM-1001&datefrom=20260101 |
| Заказы всех клиентов, изменённые с даты | /api/orders?apikey=MySecret&datechangefrom=20260925&days=3650 |
| Заказ по ид | /api/orders/get_order?apikey=MySecret&id=24238 |
| Заказ по коду | /api/orders/get_order?apikey=MySecret&external_id=WEB-1001 |
Ошибки
Ошибка авторизации и общие ошибки описаны в статье Общие сведения. Ошибки приходят с кодом HTTP 200 и success равным 0:
| Сообщение | Метод | Причина | Что делать |
|---|---|---|---|
| Клиент не найден | orders | Клиент не найден по id или external_id | Проверьте идентификатор клиента |
| Вы не указали идентификатор заказа в поле [id] или [external_id | get_order | Нет id и external_id | Передайте один из них |
| Заказ не найден / Order not found | get_order, update_order, строки | Заказ не найден | Проверьте ид заказа |
| You have to specify customer's [id] or [external_id] | add_order | Нет идентификатора клиента | Передайте id или external_id клиента |
| Customer not found | add_order | Клиент не найден | Проверьте идентификатор клиента |
| Parameter [order] not found | add_order | Не передан order | Передайте JSON заказа |
| Parameter [order] must contain a non-empty array [items] | add_order | Нет строк заказа | Добавьте хотя бы одну строку |
| Json error: … | add_order, строки | Некорректный JSON | Проверьте формат order или items |
| Error while saving: … | add_order, update_order | Заказ не сохранён: не указан тип доставки или оплаты, несуществующий тип, товар не найден | Исправьте данные; текст после двоеточия поясняет причину |
| Товар со внешним идентификатором '…' не найден | add_order | Нет товара с таким item_external_id | Проверьте код товара |
| Не заданы параметр [order] / Не заданы параметры заказа | update_order | Нет order или он пустой | Передайте изменяемые поля |
| Некорректный формат запрроса | update_order | order не JSON | Проверьте формат |
| Неизвестный статус заказа [state]: … | update_order | Такого статуса нет | Используйте существующий статус |
| Parameter [items] not found | строки | Не передан items | Передайте JSON строк |
| You have to specify order's [id] or [external_id] | строки | Нет ид заказа | Передайте id заказа |
| Order`s item is already exists | add_orders_item | Товар уже есть в заказе | Используйте update_order_item |
| Order`s item is not exists | update_order_item, delete_orders_item | Товара нет в заказе | Проверьте item_id |
Если заказов, подходящих под условия, нет, метод orders возвращает успешный ответ с count равным 0 и пустым списком.