4
Стать партнером
4
{{ formatMonthYear(startMonth) }}
{{ d }}
{{ day.day }}
{{ formatMonthYear(endMonth) }}
{{ d }}
{{ day.day }}
Новость на модерации
Обновлено
18.12.2025
Содержание статьи

На этой странице собраны примеры всех типов нотификаций, которые отправляет Lamoda B2B Platform. Используйте эти примеры для тестирования и отладки интеграции.

Изменение статуса заказа (statusChanged)

Отправляется при изменении статуса заказа целиком.

Заказ подтверждён (Confirmed)

{
  "type": "statusChanged",
  "trackingId": "117391950",
  "sequenceNumber": 2,
  "data": {
    "id": "CZ117391950",
    "status": "Confirmed",
    "paymentMethod": "COD",
    "fullSum": "12000.00",
    "deliveryPrice": "250.00",
    "createdAt": "2025-01-20",
    "updatedAt": "2025-01-20 10:30:15",
    "dates": {
      "confirmed": "2025-01-20 10:30:00"
    },
    "confirmationFailedReason": null,
    "currency": "rub",
    "items": [
      {
        "id": 7598,
        "status": "Confirmed",
        "finalERPStatus": null,
        "sku": "SELLERSKU104",
        "size": "42",
        "description": "Кроссовки Nike Air Max",
        "paidPrice": 12000.00,
        "totalDiscount": "0.00",
        "datamatrix": null,
        "statusChangeReason": null
      }
    ],
    "shippingAddress": {
      "zipcode": "115114",
      "region": "Москва",
      "city": "Москва",
      "street": "Летниковская",
      "houseNum": "д.2 с1",
      "apartment": "909",
      "cityId": "7700000000000",
      "streetId": "77000000000170700",
      "buildingId": "770000000001707000001",
      "pickupPointId": null
    },
    "deliveryMethod": {
      "deliveryPrice": "250.00",
      "deliveryDate": "2025-01-22",
      "deliveryIntervalFrom": "15:00",
      "deliveryIntervalTo": "18:00",
      "deliveryIntervalId": 514877540,
      "hasIntervals": true,
      "shippingMethodName": "Курьерская доставка Lamoda Express",
      "shippingMethodCode": "lamoda",
      "serviceLevelTypeCode": "economy_b2b",
      "serviceLevelTypeName": "Без примерки",
      "cutOff": "2025-01-28 03:00:00",
      "shippingMethodTypeCode": "delivery_service"
    },
    "customer": {
      "firstName": "Иван",
      "lastName": "Петров",
      "middleName": "Сергеевич",
      "phone": "+79161234567",
      "email": "ivan.petrov@example.com"
    }
  }
}

Заказ доставлен (Delivered)

{
  "type": "statusChanged",
  "trackingId": "117391950",
  "sequenceNumber": 5,
  "data": {
    "id": "CZ117391950",
    "status": "Delivered",
    "paymentMethod": "COD",
    "fullSum": "12000.00",
    "deliveryPrice": "250.00",
    "createdAt": "2025-01-20",
    "updatedAt": "2025-01-22 17:48:00",
    "dates": {
      "confirmed": "2025-01-20 10:30:00",
      "shipped": "2025-01-21 08:15:00",
      "delivered": "2025-01-22 17:48:00"
    },
    "items": [
      {
        "id": 7598,
        "status": "Delivered",
        "finalERPStatus": "sold",
        "sku": "SELLERSKU104",
        "size": "42",
        "paidPrice": 12000.00,
        "datamatrix": "010460406000600021K4FNP6WPM93DH"
      }
    ]
  }
}

Изменение статуса товара (itemStatusChanged)

Отправляется при изменении статуса отдельного товара в заказе.

Частичный выкуп — один товар доставлен, второй не выкуплен

{
  "type": "itemStatusChanged",
  "trackingId": "117391951",
  "sequenceNumber": 6,
  "data": {
    "id": "CZ117391951",
    "status": "Delivered",
    "paymentMethod": "COD",
    "fullSum": "25000.00",
    "createdAt": "2025-01-20",
    "updatedAt": "2025-01-22 18:15:00",
    "dates": {
      "delivered": "2025-01-22 18:15:00"
    },
    "items": [
      {
        "id": 7599,
        "status": "Delivered",
        "finalERPStatus": "sold",
        "sku": "SELLERSKU201",
        "size": "M",
        "description": "Куртка зимняя",
        "paidPrice": 15000.00,
        "statusChangeReason": null
      },
      {
        "id": 7600,
        "status": "Not bought",
        "finalERPStatus": "rejected",
        "sku": "SELLERSKU202",
        "size": "L",
        "description": "Свитер шерстяной",
        "paidPrice": 10000.00,
        "statusChangeReason": "Размер не подошёл"
      }
    ]
  }
}

Возврат товара (Claimed → Claimed ok)

{
  "type": "itemStatusChanged",
  "trackingId": "117391950",
  "sequenceNumber": 8,
  "data": {
    "id": "CZ117391950",
    "status": "Delivered",
    "updatedAt": "2025-01-30 14:20:00",
    "items": [
      {
        "id": 7598,
        "status": "Claimed ok",
        "finalERPStatus": "claimed_ok",
        "sku": "SELLERSKU104",
        "size": "42",
        "paidPrice": 12000.00,
        "statusChangeReason": "Товар не подошёл по размеру",
        "datamatrix": "010460406000600021K4FNP6WPM93DH"
      }
    ]
  }
}

Изменение статуса поставки FBO (fulfilmentShipmentStatusChanged)

Поставка подтверждена (Confirmed)

{
  "type": "fulfilmentShipmentStatusChanged",
  "createdAt": "2025-01-15T11:00:00+03:00",
  "data": {
    "id": 12345,
    "shipmentId": "SHIP-2025-001234",
    "status": "confirmed",
    "itemQuantity": 100,
    "priceSum": 250000.00,
    "receipt": 0,
    "accepted": 0,
    "surplus": 0,
    "missing": 0,
    "damaged": 0,
    "items": [
      {
        "sku": "SELLER-SKU-001",
        "ean": "4600000000001",
        "quantity": 50,
        "price": 2500.00,
        "datamatrixes": ["010460406000600021K4FNP6WPM93DH", "010460406000600021K4FNP6WPM93DI"]
      },
      {
        "sku": "SELLER-SKU-002",
        "ean": "4600000000002",
        "quantity": 50,
        "price": 2500.00,
        "datamatrixes": []
      }
    ]
  }
}

Поставка принята по количеству (Received)

{
  "type": "fulfilmentShipmentStatusChanged",
  "createdAt": "2025-01-18T16:30:00+03:00",
  "data": {
    "id": 12345,
    "shipmentId": "SHIP-2025-001234",
    "status": "received",
    "itemQuantity": 100,
    "priceSum": 250000.00,
    "receipt": 97,
    "accepted": 0,
    "surplus": 2,
    "missing": 5,
    "damaged": 0,
    "unknownSurplus": 0,
    "items": [
      {
        "sku": "SELLER-SKU-001",
        "ean": "4600000000001",
        "quantity": 50,
        "receipt": 48,
        "accepted": 0,
        "surplus": 0,
        "missing": 2,
        "damaged": 0
      },
      {
        "sku": "SELLER-SKU-002",
        "ean": "4600000000002",
        "quantity": 50,
        "receipt": 49,
        "accepted": 0,
        "surplus": 2,
        "missing": 3,
        "damaged": 0
      }
    ]
  }
}

Поставка закрыта по качеству (Closed)

{
  "type": "fulfilmentShipmentStatusChanged",
  "createdAt": "2025-01-20T10:00:00+03:00",
  "data": {
    "id": 12345,
    "shipmentId": "SHIP-2025-001234",
    "status": "closed",
    "itemQuantity": 100,
    "priceSum": 250000.00,
    "receipt": 97,
    "accepted": 95,
    "surplus": 2,
    "missing": 5,
    "damaged": 2,
    "unknownSurplus": 0,
    "items": [
      {
        "sku": "SELLER-SKU-001",
        "ean": "4600000000001",
        "quantity": 50,
        "receipt": 48,
        "accepted": 47,
        "surplus": 0,
        "missing": 2,
        "damaged": 1
      },
      {
        "sku": "SELLER-SKU-002",
        "ean": "4600000000002",
        "quantity": 50,
        "receipt": 49,
        "accepted": 48,
        "surplus": 2,
        "missing": 3,
        "damaged": 1
      }
    ]
  }
}

Изменение статуса отгрузки FBS (fulfilmentShipmentStatusChanged)

Отгрузка создана

{
  "type": "fulfilmentShipmentStatusChanged",
  "createdAt": "2025-01-21T09:00:00+03:00",
  "data": {
    "id": 98765,
    "shipmentId": "OUT-2025-005678",
    "direction": "out",
    "status": "created",
    "itemQuantity": 15,
    "priceSum": 45000.00,
    "updatedAt": "2025-01-21T09:00:00+03:00"
  }
}

Отгрузка подтверждена

{
  "type": "fulfilmentShipmentStatusChanged",
  "createdAt": "2025-01-21T09:15:00+03:00",
  "data": {
    "id": 98765,
    "shipmentId": "OUT-2025-005678",
    "direction": "out",
    "status": "confirmed",
    "itemQuantity": 15,
    "priceSum": 45000.00,
    "updatedAt": "2025-01-21T09:15:00+03:00"
  }
}

Структура полей нотификации

Общие поля

Поле Тип Описание
type string Тип нотификации
trackingId string ID для отслеживания (номер заказа без префикса)
sequenceNumber integer Порядковый номер изменения (для идемпотентности)
createdAt datetime Время создания нотификации
data object Полные данные объекта (заказ, поставка)

Поля товара в заказе

Поле Тип Описание
id integer ID товара в заказе
status string Текущий статус товара
finalERPStatus string Финальный ERP-статус (sold, rejected, claimed_ok и т.д.)
sku string Артикул товара
paidPrice number Оплаченная цена
datamatrix string Код маркировки (UIT)
statusChangeReason string Причина изменения статуса

Использование sequenceNumber

Идемпотентность: Поле sequenceNumber увеличивается с каждым изменением статуса. Используйте его для:
  • Проверки порядка обработки нотификаций
  • Игнорирования устаревших нотификаций (если получили sequenceNumber=5, а потом пришла 3 — игнорируем)
  • Отладки и расследования инцидентов
def handle_notification(notification):
    order_id = notification['data']['id']
    seq = notification['sequenceNumber']
    
    # Получаем последний обработанный sequenceNumber
    last_seq = get_last_sequence(order_id)
    
    if seq <= last_seq:
        # Уже обработали или более свежую версию
        log.info(f"Skipping old notification: {seq} <= {last_seq}")
        return
    
    # Обрабатываем
    process_notification(notification)
    save_sequence(order_id, seq)

Обработка нотификаций

Важно: Нотификация всегда содержит полную информацию о заказе со всеми товарами. Даже если изменился статус одного товара, вы получите данные всех товаров в заказе.

Рекомендуемый алгоритм обработки

  1. Получить нотификацию
  2. Проверить sequenceNumber (не устарела ли)
  3. Извлечь type и направить в соответствующий обработчик
  4. Обновить локальные данные
  5. Вернуть HTTP 200 OK
# Пример обработчика на Python (Flask)
@app.route('/webhook', methods=['POST'])
def handle_webhook():
    notification = request.json
    notification_type = notification.get('type')
    
    handlers = {
        'statusChanged': handle_order_status,
        'itemStatusChanged': handle_item_status,
        'fulfilmentShipmentStatusChanged': handle_shipment_status
    }
    
    handler = handlers.get(notification_type)
    if handler:
        handler(notification)
    
    return 'OK', 200

См. также

Помогла эта информация?

Да Нет

Спасибо за отзыв

Отправить
Адреса доставки в API
Переотправка уведомлений в API
Спросить у Lamoda Seller Assistant в Telegram