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

Настройка вебхуков

Нотификации (webhooks) — это POST-запросы, которые Lamoda отправляет на ваш URL при изменении статуса заказа, товара или FBO-поставки.

Чек-лист подключения

Действие Кто делает
1 Реализовать endpoint для приёма POST-запросов Вы
2 Предоставить URL для получения нотификаций (валидный HTTPS URL, макс. 1024 символа) Вы → KAM
3 Добавить IP Lamoda в whitelist (получить у KAM) Вы
4 Предоставить логин и пароль для Basic Auth (опционально) Вы → KAM
5 Настроить подписку на нужные события KAM (или вы через API)

Требования к endpoint

URL

Ваш endpoint должен:

  • Принимать POST-запросы
  • Быть доступен 24/7
  • Работать по HTTPS (URL проходит валидацию @Assert\Url)
  • Отвечать быстро (рекомендуется < 5 сек)

Аутентификация

Lamoda поддерживает два режима аутентификации при отправке вебхуков:

Тип Описание
none Без аутентификации (по умолчанию). Рекомендуем ограничить доступ по IP.
basic HTTP Basic Auth. Lamoda передаёт заголовок Authorization: Basic <base64(username:password)> при каждом запросе. Укажите логин и пароль при настройке подписки.

Если при создании или редактировании подписки указаны username и password — аутентификация автоматически переключается на basic. Иначе используется none.

Коды ответа

Код Поведение Lamoda
2xx Нотификация успешно доставлена. Сообщению присваивается статус sent.
4xx Ошибка клиента. Сообщению присваивается статус failed с описанием ошибки http request failed. Проверьте URL, аутентификацию и формат ответа.
5xx Ошибка сервера. Lamoda повторяет отправку с увеличивающимся интервалом.
Connection timeout Повторная отправка. Ошибка: http connection timeout.
Connection refused Повторная отправка. Ошибка: http connection failed.

Повторная отправка (retry)

При ошибке доставки (5xx, timeout, connection refused) Lamoda повторяет отправку с увеличивающимся интервалом. Retry-логика управляется инфраструктурой очередей сообщений.

Если все попытки доставки исчерпаны:

Сообщение получает статус failed и сохраняется в системе. Вы можете переотправить недоставленные нотификации через метод GET /api/v1/notifications/resend.

Обеспечьте высокую доступность вашего endpoint, чтобы минимизировать количество недоставленных нотификаций.

Типы нотификаций

Основные типы webhook-нотификаций, доступных для подписки:

Тип (type) Описание
statusChanged Изменился статус заказа (событие orderStatusChanged)
itemStatusChanged Изменился статус товара в заказе (событие itemRepresentStatusChanged)
fulfilmentShipmentStatusChanged Изменился статус FBO-поставки

Подробнее о каждом типе и структуре данных — см. Типы нотификаций.

Дополнительные REST-события, доступные для подписки:

Событие Описание
orderCreated Создан новый заказ
orderAndItemsStatusChanged Изменился статус заказа и/или его товаров (комбинированное событие)
shipmentOutReceivedRest FBS-отгрузка принята курьером
fulfilmentShipmentValidationRest Результат валидации FBO-поставки
moderationRejected Модерация номенклатуры отклонена
moderationApproved Модерация номенклатуры одобрена
nomenclatureSubscriptionUpdated Обновлена подписка на номенклатуру
purchaseOrderDirectFlowCreated Создан заказ на закупку (прямой поток)
purchaseOrderReverseFlowCreated Создан заказ на закупку (обратный поток)
supplierReturnCancelProcessedEvent Обработана отмена возврата поставщику

Не все события доступны для самостоятельной подписки — только те, у которых флаг configurable = true. Уточните у KAM список доступных событий для вашего аккаунта.

Управление подписками через API

Подписками на нотификации можно управлять через Lamoda B2B Platform Partner API:

Метод Описание
GET /notification/subscriptions Список подписок (с пагинацией, фильтрацией и сортировкой)
GET /notification/subscriptions/{id} Детали подписки
POST /notification/subscriptions/ Создание подписки
PUT /notification/subscriptions/{id} Редактирование подписки (URL, enabled, auth)

Создание подписки

POST /notification/subscriptions/
Authorization: Bearer YOUR_TOKEN
Content-Type: application/json

{
  "partner": 12345,
  "event": "orderStatusChanged",
  "address": "https://your-domain.com/lamoda/webhook",
  "username": "lamoda_webhook",
  "password": "your_secret"
}

Если username и password не указаны — подписка создаётся без аутентификации.

Ограничение: нельзя создать две подписки с одинаковым event + address для одного партнёра (уникальный constraint).

Редактирование подписки

PUT /notification/subscriptions/{id}
Authorization: Bearer YOUR_TOKEN
Content-Type: application/json

{
  "address": "https://new-domain.com/lamoda/webhook",
  "enabled": true,
  "username": "new_user",
  "password": "new_password"
}

Важно: при включении ранее отключённой подписки (enabled: false → true) все накопленные deferred-сообщения автоматически отправляются на ваш endpoint.

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

Каждая подписка имеет один из следующих статусов:

Статус Описание
disabled Подписка отключена. Новые нотификации сохраняются со статусом deferred и будут отправлены при включении.
no messages Подписка активна, но нотификаций ещё не было (или последнее сообщение в обработке).
active Последняя нотификация доставлена успешно.
failing Последняя нотификация не доставлена. Проверьте доступность вашего endpoint.
has deferred messages Есть отложенные сообщения (подписка была отключена в момент генерации нотификации).

Статусы доставки сообщений

Каждое отдельное сообщение (нотификация) проходит через следующие статусы:

Статус Описание
new Сообщение создано и поставлено в очередь на отправку.
sent Сообщение успешно доставлено (ваш endpoint вернул 2xx).
failed Доставка не удалась после всех попыток. Можно переотправить через resend API.
deferred Подписка была отключена в момент генерации. Сообщение будет отправлено при включении подписки.

Типы ошибок доставки

При неудачной доставке сообщение содержит одну из следующих ошибок:

Ошибка Описание Что делать
http connection timeout Ваш сервер не ответил вовремя Оптимизируйте время обработки webhook. Принимайте нотификацию, возвращайте 200, обрабатывайте асинхронно.
http connection failed Не удалось подключиться к вашему серверу Проверьте доступность endpoint, DNS, firewall, IP whitelist.
http request failed Сервер вернул ошибку (4xx/5xx) Проверьте логи вашего сервера, корректность обработки POST-запроса.
notifications disabled Подписка была отключена Включите подписку — deferred-сообщения отправятся автоматически.
internal error Внутренняя ошибка Lamoda Переотправьте через resend API. Если повторяется — обратитесь к KAM.

Пример нотификации

{
  "type": "statusChanged",
  "trackingId": "117391950",
  "data": {
    "id": "CZ117391950",
    "status": "Delivered",
    "paymentMethod": "COD",
    "fullSum": "12000",
    "deliveryPrice": "250.00",
    "createdAt": "2025-12-01",
    "updatedAt": "2025-12-03 17:48:00",
    "currency": "rub",
    "items": [
      {
        "id": 7598,
        "status": "Delivered",
        "sku": "SELLER-SKU-001",
        "paidPrice": 12000,
        "size": "42",
        "datamatrix": null
      }
    ],
    "shippingAddress": {
      "city": "Москва",
      "street": "Летниковская",
      "houseNum": "д.2 с1",
      "apartment": "909"
    },
    "deliveryMethod": {
      "deliveryDate": "2025-12-03",
      "deliveryIntervalFrom": "15:00",
      "deliveryIntervalTo": "18:00",
      "shippingMethodName": "Курьерская доставка Lamoda Express"
    },
    "customer": {
      "firstName": "Иван",
      "lastName": "Петров",
      "phone": "+79001234567"
    }
  },
  "date": "2025-12-03 17:48:00",
  "sequenceNumber": 5
}

Пример обработчика (Python)

from flask import Flask, request, jsonify

app = Flask(__name__)

@app.route('/lamoda/webhook', methods=['POST'])
def handle_webhook():
    data = request.json
    
    notification_type = data.get('type')
    tracking_id = data.get('trackingId')
    sequence = data.get('sequenceNumber')
    
    print(f"Received: {notification_type}, "
          f"TrackingId: {tracking_id}, "
          f"Seq: {sequence}")
    
    # Дедупликация по sequenceNumber
    if is_already_processed(tracking_id, sequence):
        return jsonify({"status": "ok"}), 200
    
    # Обработка по типу нотификации
    if notification_type == 'statusChanged':
        process_order_status(data['data'])
    elif notification_type == 'itemStatusChanged':
        process_item_status(data['data'])
    elif notification_type == 'fulfilmentShipmentStatusChanged':
        process_shipment_status(data['data'])
    
    # Важно: вернуть 200 быстро!
    # Тяжёлую обработку выполняйте асинхронно.
    return jsonify({"status": "ok"}), 200

Рекомендации

  • Отвечайте 200 как можно быстрее. Принимайте нотификацию, ставьте в свою очередь, обрабатывайте асинхронно.
  • Используйте sequenceNumber для дедупликации. При переотправке или retry одна и та же нотификация может прийти повторно.
  • Игнорируйте неизвестные поля. Lamoda может добавлять новые поля в payload — это обратносовместимая операция.
  • Игнорируйте неизвестные типы. Если получили type, который не обрабатываете — просто верните 200.
  • Мониторьте статус подписки. Периодически проверяйте GET /notification/subscriptions — статус failing указывает на проблемы с доставкой.
  • Настройте fallback через polling. Даже с вебхуками рекомендуется периодически опрашивать GET /orders по updatedAt, чтобы не пропустить обновления.

См. также

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

Да Нет
0/1000 Отправить
Типы нотификаций в API
Статусы FBO в API
Спросить у Lamoda Seller Assistant в Telegram