Перейти к основному содержимому

Заказы

Заказы дают платформе выручку, историю покупок и статусы — на них строятся сегменты вроде «покупал за последние 90 дней» и расчёт выручки по товарам.

Заказ привязывается к клиенту и к товарам по вашим идентификаторам, поэтому клиенты и товары должны быть переданы раньше заказов.


Отправка заказов

POST /orders/sync
{
"orders": [
{
"ID": "8801",
"ACCOUNT_NUMBER": "8801/2026",
"USER_ID": "1042",
"PRICE": 14800,
"CURRENCY": "RUB",
"STATUS_ID": "P",
"PAYED": "Y",
"CANCELED": "N",
"DATE_INSERT": "2026-09-14 11:02:30",
"DATE_PAYED": "2026-09-14 11:09:12",
"DATE_CANCELED": null,
"BASKET": [
{ "PRODUCT_ID": "5501", "NAME": "Куртка зимняя Аврора", "PRICE": 12900, "QUANTITY": 1 },
{ "PRODUCT_ID": "5601", "NAME": "Футболка Базовая, M", "PRICE": 1900, "QUANTITY": 1 }
],
"DELIVERY_ID": "3",
"DELIVERY_NAME": "Курьер",
"DELIVERY_PRICE": 0,
"PAY_SYSTEM_ID": "5",
"PAY_SYSTEM_NAME": "Онлайн-оплата",
"PAYMENT_ID": "9001",
"PAYMENT_SUM": 14800,
"PAYMENT_PAID": "Y",
"PAYMENT_DATE_PAID": "2026-09-14 11:09:12"
}
],
"statuses": [
{ "ID": "N", "NAME": "Новый", "SORT": 100 },
{ "ID": "P", "NAME": "Оплачен", "SORT": 200 },
{ "ID": "F", "NAME": "Выполнен", "SORT": 300 }
]
}

Требования и особенности:

  • orders — непустой массив; за один запрос не больше 50 заказов;
  • регистр имён полей не важен: USER_ID, User_Id и user_id платформа считает одним и тем же полем. Это относится и к обёрткам orders/statuses, и к позициям BASKET;
  • ID обязателен — это ваш идентификатор заказа;
  • USER_ID — ваш идентификатор клиента. Если такой клиент не передавался, заказ не принимается со статусом USER_NOT_FOUND;
  • BASKET[].PRODUCT_ID — ваш идентификатор товара;
  • даты — строкой в формате ГГГГ-ММ-ДД ЧЧ:ММ:СС;
  • statuses передавайте вместе с заказами: платформа создаёт у себя отсутствующие статусы, чтобы в кабинете они назывались так же, как у вас.

Поля заказа

ПолеОбязательноОписание
IDдаВаш идентификатор заказа
USER_IDдаВаш идентификатор клиента
PRICEнетНе используется: сумму заказа платформа считает сама из состава корзины. Поле можно передавать для наглядности, на результат оно не влияет
CURRENCYнетВалюта заказа. По умолчанию — базовая валюта проекта
ACCOUNT_NUMBERнетНомер заказа для человека, если он отличается от ID
STATUS_IDнетКод статуса. Должен присутствовать в массиве statuses
PAYEDнетОплачен ли заказ: Y/N
CANCELEDнетОтменён ли заказ: Y/N
DATE_INSERTнетДата оформления. Если не передана — дата приёма запроса
DATE_PAYEDнетДата оплаты. Учитывается при PAYED: "Y"
DATE_CANCELEDнетДата отмены. Учитывается при CANCELED: "Y"
BASKETнет, но важноСостав заказа. Именно из него считается сумма: без корзины заказ сохранится с нулевой суммой и не попадёт в выручку
statusesнетСправочник статусов, поле верхнего уровня рядом с orders. Передаётся вместе с заказами, чтобы статусы назывались у вас и в кабинете одинаково

Состав заказа

ПолеОбязательноОписание
PRODUCT_IDдаВаш идентификатор товара
NAMEдаНазвание позиции на момент заказа
PRICEдаЦена за единицу в заказе
QUANTITYдаКоличество

Цена позиции берётся из заказа как есть и не пересчитывается по текущей цене товара — история сохраняется корректно.

Доставка и оплата

Блоки необязательные. Если передаёте — платформа создаёт у себя службу доставки и платёжную систему с вашими названиями и в дальнейшем узнаёт их по вашим идентификаторам.

Все поля ниже необязательные, но внутри блока есть зависимости: доставка обрабатывается только при наличии DELIVERY_ID, оплата — только при наличии PAY_SYSTEM_ID.

ПолеОбязательноОписание
DELIVERY_IDнетВаш идентификатор службы доставки. Без него остальные поля доставки игнорируются
DELIVERY_NAMEда, если есть DELIVERY_IDНазвание службы доставки
DELIVERY_PRICEнетСтоимость доставки
PAY_SYSTEM_IDнетВаш идентификатор способа оплаты. Без него остальные поля оплаты игнорируются
PAY_SYSTEM_NAMEда, если есть PAY_SYSTEM_IDНазвание способа оплаты
PAYMENT_IDнетВаш идентификатор платежа. По нему платёж обновляется, а не дублируется
PAYMENT_SUMнетСумма платежа. Если не передана — сумма заказа
PAYMENT_PAIDнетОплачен ли платёж: Y/N
PAYMENT_DATE_PAIDнетДата оплаты платежа

Ответ

{
"success": true,
"code": 200,
"message": "Заказы обработаны",
"data": {
"results": [
{ "order_id": "8801", "local_order_id": 512, "status": "created" },
{ "order_id": "8802", "status": "USER_NOT_FOUND", "user_id": "1099", "message": "Пользователь не найден" }
]
}
}
Значение statusЧто означает
createdЗаказ создан, в local_order_id — его номер в CDP
updatedЗаказ найден по вашему ID и обновлён
USER_NOT_FOUNDКлиент из USER_ID не передавался. Пришлите клиента и повторите заказ
errorЗаказ не принят, причина в message

Повторная отправка и изменение статуса

Смена статуса, факт оплаты, отмена — это повторная отправка того же заказа с новыми значениями. Отдельных методов для этого нет.

Присылайте заказ целиком при каждом изменении. Платформа находит его по вашему ID, обновляет поля и дополнительно фиксирует переходы статусов и факты оплаты и отмены в отдельных журналах — на них опираются сегменты и сценарии вроде «оплатил заказ».

Одновременные запросы по одному заказу

Обработка одного заказа защищена от одновременного изменения: если два запроса по одному ID придут параллельно, второй дождётся первого. Специально разносить их по времени не нужно.


Удаление заказа

POST /orders/delete
{ "order_id": "8801" }
ПолеОбязательноОписание
order_idдаВаш идентификатор заказа. Без него — ошибка, "code": 400

Заказ удаляется из CDP полностью. Если заказа с таким идентификатором нет, метод отвечает успехом и "deleted": false — повторный вызов безопасен.

{
"success": true,
"code": 200,
"data": { "order_id": "8801", "deleted": true }
}
Отмена — не удаление

Если заказ отменён, а не стёрт из вашей системы, присылайте его через /orders/sync с "CANCELED": "Y". Так сохранится история и отмена попадёт в статистику. Удаление имеет смысл только для заказов, созданных по ошибке.


Что дальше