ПВЗ

Ветка delivery_type PICKUP_POINT - выдача в пункте выдачи.

Сценарий 1: Доставка в ПВЗ СДЭК

Покупатель на витрине выбирает пункт СДЭК. В карточке заказа служба — delivery.provider_id: "CDEK", пункт — delivery.provider_location_id.

Заказ ORD-DBS-2026-302 приходит в NEW с delivery_type: "PICKUP_POINT". Мерчант подтверждает его, собирает на своём складе и передаёт в СДЭК. До пункта посылку везёт СДЭК, это вне API. Статусы в API ставит мерчант.

Допустимы два пути статусов:

  1. NEW → CONFIRMED → PACKED → DELIVERING → READY_FOR_PICKUP → DELIVERED или CANCELLED (не забрал или отказался).
  2. NEW → CONFIRMED → PACKED → DELIVERING или READY_FOR_PICKUP → DELIVERED или CANCELLED (не забрал или отказался).

Из PACKED можно перейти в DELIVERING (посылка едет в пункт), а затем в READY_FOR_PICKUP. Можно поставить READY_FOR_PICKUP сразу из PACKED. Когда покупатель забрал заказ, статус — DELIVERED. Если не забрал или отказался — CANCELLED.

Диаграмма последовательности

Пошаговое описание

  1. Опрос новых заказов. POST /v1/order/dbs/list с filter.status: ["NEW"] и limit. cursor — для следующей страницы. В будущем опрос изменений статусов — POST /v1/order/dbs/status/list.
  2. Карточка заказа. Тот же /v1/order/dbs/list. В delivery обязателен только delivery_type: "PICKUP_POINT". Пункт СДЭК — provider_id: "CDEK" и provider_location_id. Оба поля в схеме не обязательны. Если витрина их прислала, это выбранный пункт СДЭК. address_tail для ПВЗ не обязателен.
  3. Подтверждение. POST /v1/order/dbs/status/update → CONFIRMED, changed_by: "MERCHANT", changed_at (RFC3339).
  4. Слот, если его надо сдвинуть. Покупатель уже выбрал окно на витрине. POST /v1/order/dbs/timeslot/set — только когда новую дату согласовали с покупателем. Для ПВЗ шаг обычно не нужен.
  5. Экземпляр, если он нужен. POST /v1/order/dbs/exemplar/set до PACKED, например при requirements.requires_imei: true.
  6. Упаковка. POST /v1/order/dbs/status/update → PACKED. Заказ собран на складе мерчанта и готов к передаче в СДЭК.
  7. Код вручения, если он используется. POST /v1/order/dbs/handover-code/set. По договорённости витрины и мерчанта код можно передать покупателю или витрине. Пункт СДЭК этот код из API сам не получает.
  8. В пути в пункт СДЭК. POST /v1/order/dbs/status/update → DELIVERING. Посылку везёт СДЭК, это вне API. Шаг можно пропустить.
  9. Ждёт покупателя в пункте. POST /v1/order/dbs/status/update → READY_FOR_PICKUP. Статус ставят из DELIVERING или сразу из PACKED.
  10. Выдан. POST /v1/order/dbs/status/update → DELIVERED, когда покупатель забрал заказ в пункте.
  11. Не забрал или отказался. POST /v1/order/dbs/status/update → CANCELLED из READY_FOR_PICKUP. По второму пути отмена возможна и из DELIVERING.

Склад, с которого собирают заказ, — location_id в карточке. Пункт СДЭК — provider_location_id.

JSON — карточка заказа в пункт СДЭК

POST /v1/order/dbs/list. Обязательны filter и limit.

{
  "cursor": "",
  "limit": 100,
  "filter": {
    "status": ["NEW"]
  }
}
{
  "orders": [{
    "merchant_order_id": "ORD-DBS-2026-302",
    "client_order_id": "CLT-80002",
    "location_id": "wh-msk-dbs-01",
    "status": "NEW",
    "customer": {
      "name": "Иван Петров",
      "phone": "+79001112233"
    },
    "delivery": {
      "delivery_type": "PICKUP_POINT",
      "provider_id": "CDEK",
      "provider_location_id": "CDEK-MSK-0142"
    },
    "product_name": "Наушники",
    "prices": [{
      "price_type": "CUSTOMER_FINAL_PRICE",
      "value": 1299000
    }],
    "delivery_date": {
      "delivery_date_begin": "2026-06-16T10:00:00+03:00",
      "delivery_date_end": "2026-06-18T21:00:00+03:00"
    },
    "created_at": "2026-06-14T11:00:00+03:00"
  }],
  "next_cursor": "",
  "total": 1
}

location_id — склад сборки. provider_location_id — пункт СДЭК, куда поедет заказ.

JSON — статусы

Обязательны merchant_order_id, status, changed_at, changed_by.

Подтверждение:

{
  "merchant_order_id": "ORD-DBS-2026-302",
  "status": "CONFIRMED",
  "changed_at": "2026-06-14T12:00:00+03:00",
  "changed_by": "MERCHANT"
}

Упакован:

{
  "merchant_order_id": "ORD-DBS-2026-302",
  "status": "PACKED",
  "changed_at": "2026-06-14T15:00:00+03:00",
  "changed_by": "MERCHANT"
}

Едет в пункт:

{
  "merchant_order_id": "ORD-DBS-2026-302",
  "status": "DELIVERING",
  "changed_at": "2026-06-14T16:00:00+03:00",
  "changed_by": "MERCHANT"
}

Ждёт в пункте. Этот же вызов ставят сразу после PACKED, если шаг DELIVERING пропущен:

{
  "merchant_order_id": "ORD-DBS-2026-302",
  "status": "READY_FOR_PICKUP",
  "changed_at": "2026-06-15T10:00:00+03:00",
  "changed_by": "MERCHANT"
}

Выдан:

{
  "merchant_order_id": "ORD-DBS-2026-302",
  "status": "DELIVERED",
  "changed_at": "2026-06-16T18:20:00+03:00",
  "changed_by": "MERCHANT"
}

Не забрал или отказался:

{
  "merchant_order_id": "ORD-DBS-2026-302",
  "status": "CANCELLED",
  "changed_at": "2026-06-20T21:00:00+03:00",
  "changed_by": "MERCHANT"
}