Интеграции

Входящие вебхуки

Три потока данных, которые платформа принимает извне: готовые заказы, подтверждения оплаты и статусы доставки.

Приём заказа из внешней системы

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

POST /orders/integrations/vitrine/webhook — минимальный запрос
{
  "vitrineOrderId": "V-100500",
  "recipient": {
    "fullName": "Петров Пётр Петрович",
    "phone": "+79990000000"
  },
  "items": [
    { "article": "ART-1", "size": "M", "quantity": 1, "priceKopeks": 450000 }
  ],
  "delivery": {
    "city": "Москва",
    "cityCode": 44,
    "pvzCode": "MSK123",
    "deliveryCostKopeks": 30000
  }
}

Обязательны номер заказа во внешней системе, имя и телефон получателя и непустой список позиций. Имя разбирается позиционно: фамилия, имя, отчество. Всё остальное — необязательно, включая трек-номер и ссылку на накладную ниже.

POST /orders/integrations/vitrine/webhook — со всеми необязательными полями
{
  "vitrineOrderId": "V-100500",
  "recipient": {
    "fullName": "Петров Пётр Петрович",
    "phone": "+79990000000",
    "email": "ivanov@example.com"
  },
  "items": [
    { "article": "ART-1", "size": "M", "quantity": 1, "priceKopeks": 450000 }
  ],
  "delivery": {
    "city": "Москва",
    "cityCode": 44,
    "pvzCode": "MSK123",
    "pvzAddress": "Москва, ул. Тверская, 1",
    "deliveryCostKopeks": 30000
  },
  "cdekOrderUuid": "72753a1d-9862-4a6e-b1f4-7cc39e0c1234",
  "cdekTrackingNumber": "1234567890",
  "waybillUrl": "https://vitrine.market/docs/waybill-100500.pdf",
  "promoCode": "SUMMER10",
  "comment": "Позвонить за час до доставки",
  "orderDate": "2026-09-01T10:15:00+03:00"
}

Поля запроса

ПараметрТипОбязателенОписание
vitrineOrderIdstringдаНомер заказа во внешней системе. По нему платформа отличает повтор от нового заказа.
recipient.fullNamestringдаФИО получателя одной строкой, через пробел. Разбирается позиционно: фамилия, имя, отчество.
recipient.phonestringдаТелефон получателя, в любом формате, который присылает Vitrine.
recipient.emailstringнетПочта получателя, для письма с чеком/статусом.
items[].articlestringдаАртикул Витрины — сверяется с полем «Артикул Витрины» в карточке товара вашего магазина.
items[].sizestringдаНазвание легаси-размера, как оно указано у товара (без учёта регистра). Для товара только на атрибутах (без исторического «Размера») сопоставить нечем — см. предупреждение ниже.
items[].quantitynumberдаКоличество, целое положительное число.
items[].priceKopeksnumberнетЦена позиции в копейках. Не прислали — берётся цена размера или товара из каталога.
delivery.citystringнетпо умолчанию ""Город доставки.
delivery.cityCodenumberнетКод города СДЕК.
delivery.pvzCodestringнетКод пункта выдачи СДЕК.
delivery.pvzAddressstringнетАдрес пункта выдачи — показывается в карточке заказа и покупателю.
delivery.deliveryCostKopeksnumberнетпо умолчанию 0Стоимость доставки в копейках, войдёт в total заказа.
cdekOrderUuidstringнетID отправления в СДЕК, если Vitrine сама регистрирует отправление.
cdekTrackingNumberstringнетТрек-номер СДЕК — попадёт в карточку заказа и в личный кабинет покупателя.
waybillUrlstringнетСсылка на накладную или другой сопроводительный документ отправления.
promoCodestringнетКод применённого промокода, для отчётности — повторно скидку платформа не считает.
commentstringнетКомментарий к заказу, виден в админке.
orderDatestring (ISO 8601)нетДата фактического оформления заказа в Vitrine. Не прислали или дата битая — берётся момент приёма вебхука.

Подключение магазина

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

  1. В админке магазина: Настройки → API-токены → выпустить ключ с правом orders.create_vitrine. Ключ показывается один раз — сохраните его.
  2. В карточке каждого товара, который продаётся через Vitrine.market, заполните поле «Артикул Витрины» — по нему платформа сопоставляет позиции заказа с каталогом. Артикул уникален в рамках вашего магазина: два бренда на платформе могут независимо использовать одинаковые коды.
  3. Отдайте команде Vitrine.market адрес https://api.amarix.ru/orders/integrations/vitrine/webhook и ключ из первого шага — они настроят его на своей стороне под ваш магазин.

Позиции сопоставляются с товарами по отдельному полю артикула и по названию размера. Если сопоставить не удалось, заказ не создаётся вовсе — частично он не примется.

Ошибки

КодОтвет сервераКогда возникаетЧто делать
200{"ok":true,"duplicate":true,"order":{...}}Заказ с таким номером уже принимали.Это не ошибка: повтор безопасен, второй заказ не создастся.
201{"ok":true,"duplicate":false,"order":{"id":15243,"orderNumber":"...","hash":"..."}}Заказ создан.—
400{"error":"..."}Нет номера заказа внешней витрины, нет получателя, пустой список позиций или некорректное количество.—
401{"error":"Unauthorized"}Ключ не принят.—
403{"error":"Forbidden: Missing permission orders.create_vitrine"}У ключа нет права принимать заказы витрины.Это отдельное право, его нужно запросить при выпуске ключа.
422{"error":"..."}Артикул не удалось сопоставить с товаром, либо у товара нет такого размера.Сверьте артикулы: сопоставление идёт по отдельному полю товара, а не по названию.

Подтверждение оплаты

Банк сообщает платформе, что заказ оплачен. Этот вебхук настроен между платформой и банком напрямую, разработчику бренда трогать его не нужно — но полезно знать, что происходит после оплаты, потому что оттуда тянется вся цепочка.

По подтверждению платформа списывает товар со склада, регистрирует отправление у перевозчика, получает трек-номер, уведомляет сотрудников и отправляет письмо покупателю.

Статусы доставки

Перевозчик присылает события о движении посылки, платформа обновляет статус доставки и, если нужно, статус самого заказа.

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