C&C
Ветка delivery_type CLICK_AND_COLLECT - самовывоз с точки продавца.
Сценарий C&C-1: самовывоз с точки продавца — happy path
Click & Collect — delivery_type: "CLICK_AND_COLLECT": покупатель забирает заказ на точке продавца, а не в ПВЗ сети и не курьером. В OpenAPI тип локации CLICK_AND_COLLECT одновременно является складом и пунктом вывоза — отдельный WAREHOUSE для той же точки не создают.
DBS Seller API — это API витрины. Мерчант вызывает эти методы у витрины.
Заказ ORD-DBS-2026-303 приходит в NEW на локацию cnc-msk-tverskaya-01. Допустимы два пути:
NEW→CONFIRMED→PACKED→DELIVERING→READY_FOR_PICKUP→DELIVEREDилиCANCELLED(не забрал или отказался).NEW→CONFIRMED→PACKED→READY_FOR_PICKUP→DELIVEREDилиCANCELLED(не забрал или отказался). Второй путь — тот же, но шагDELIVERINGпропускают.
Покупатель забирает заказ в магазине → DELIVERED. Код вручения (handover-code/set) — опционально: по договорённости витрины и мерчанта мерчант может передать код покупателю или витрине.
Диаграмма последовательности
Пошаговое описание
- Опрос обновлений. На MVP — POST
/v1/order/dbs/list(filter,limit; опциональноcursor). В будущем опрос изменений статусов — POST/v1/order/dbs/status/list(filter,limit; вfilter—status, опциональноupdated_at; ответ — массивorder_updates). - Карточка заказа. POST
/v1/order/dbs/list— вdeliveryтолько обязательноеdelivery_type: "CLICK_AND_COLLECT". Точка выдачи в заказе —location_id(локация типаCLICK_AND_COLLECT). Полеdelivery.provider_location_idв схеме есть, но as-is привязывает его кPICKUP_POINT. Для C&C точку идентифицируют черезlocation_id, не черезprovider_location_id.address_tailвdeliveryдля C&C не обязателен (в отличие отCOURIERиEXPRESS). - Подтверждение. POST
/v1/order/dbs/status/update→CONFIRMED,changed_by: "MERCHANT",changed_at(RFC3339). - Экземпляр товара (опционально). POST
/v1/order/dbs/exemplar/set— если есть необходимость (напримерrequirements.requires_imei: true), доPACKED. - Упаковка. POST
/v1/order/dbs/status/update→PACKED. Заказ собран в магазине и готов к выкладке на выдачу. - В пути на точку. POST
/v1/order/dbs/status/update→DELIVERING. Товар передан к выдаче на точке C&C. Шаг можно пропустить и изPACKEDсразу поставитьREADY_FOR_PICKUP. - Код вручения опционально. POST
/v1/order/dbs/handover-code/set— послеPACKED. Мерчант передаёт код витрине. По договорённости витрины и мерчанта код показывают покупателю. Касса точки этот код из витрины не получает: сверка на точке. Если код записан, показать его кассе C&C. - Готов к выдаче. POST
/v1/order/dbs/status/update→READY_FOR_PICKUP. Статус ставят изDELIVERINGили сразу изPACKED. - Выдан. POST
/v1/order/dbs/status/update→DELIVERED— покупатель забрал заказ.
Полигон доставки для точки C&C не создавать: витрина берёт локации в статусе ACTIVE, у которых в location_types есть CLICK_AND_COLLECT. Остатки грузят на эту же локацию (stock/update с location_id).
Возврат: тип обратной доставки CLICK_AND_COLLECT в схеме не используется (return.delivery).
Порядок работы в магазине
- Точка C&C создана (
location_typesсодержитCLICK_AND_COLLECT), остатки прогружены на этотlocation_id. - Заказ
NEW—list(MVP); в будущемstatus/list. status/update→CONFIRMED.- Опционально
exemplar/set, если есть необходимость. - Сборка в магазине
cnc-msk-tverskaya-01. status/update→PACKED.status/update→DELIVERING, либо сразуREADY_FOR_PICKUP, безDELIVERING.- Опционально
handover-code/set: мерчант передаёт код витрине. По договорённости витрины и мерчанта код показывают покупателю. Касса этот код из витрины не получает. - Передача на точку выдачи.
status/update→READY_FOR_PICKUP.- Выдача покупателю, сверка кода на точке.
status/update→DELIVERED.
exemplar/set — опционально, если есть необходимость, до PACKED. handover-code/set — опционально, после PACKED.
JSON-примеры
В примерах запроса — все поля из required соответствующей схемы. Поля вне required в тексте помечены как опциональные.
Шаг 0 — POST /v1/location/create (точка C&C)
У LocationCreateItem обязательны location_types, name, latitude, longitude, limits (length, width, height, weight), working_schedule (day, schedule.time_start, schedule.time_end), is_accepts_returns. Опционально: merchant_location_id, address_tail, payment_methods, storage_period_days, instruction.
{
"locations": [
{
"merchant_location_id": "cnc-msk-tverskaya-01",
"location_types": [
"CLICK_AND_COLLECT"
],
"name": "Самовывоз DBS Тверская",
"address_tail": "125009, г. Москва, ул. Тверская, д. 1",
"latitude": 55.757,
"longitude": 37.615,
"is_accepts_returns": false,
"limits": {
"length": 80,
"width": 60,
"height": 60,
"weight": 20
},
"working_schedule": [
{
"day": "MONDAY",
"schedule": {
"time_start": "10:00",
"time_end": "21:00"
}
},
{
"day": "TUESDAY",
"schedule": {
"time_start": "10:00",
"time_end": "21:00"
}
},
{
"day": "WEDNESDAY",
"schedule": {
"time_start": "10:00",
"time_end": "21:00"
}
},
{
"day": "THURSDAY",
"schedule": {
"time_start": "10:00",
"time_end": "21:00"
}
},
{
"day": "FRIDAY",
"schedule": {
"time_start": "10:00",
"time_end": "21:00"
}
},
{
"day": "SATURDAY",
"schedule": {
"time_start": "10:00",
"time_end": "20:00"
}
},
{
"day": "SUNDAY",
"schedule": {
"time_start": "10:00",
"time_end": "20:00"
}
}
],
"payment_methods": [
"ALREADY_PAID",
"CARD"
],
"storage_period_days": 7,
"instruction": "Вход со стороны Тверской, стойка «Самовывоз» справа от касс."
}
]
}
Ответ create: у элемента обязательны name и status. location_id в required нет (пустая строка, если позиция не создана).
{
"locations": [
{
"location_id": "cnc-msk-tverskaya-01",
"merchant_location_id": "cnc-msk-tverskaya-01",
"name": "Самовывоз DBS Тверская",
"status": "DRAFT"
}
]
}
Статус локации дальше — POST /v1/location/list (filter, limit). К выдаче на витрине локация должна стать ACTIVE (модерация витрины). Какие переходы статусов витрина разрешает — уточните у неё до реализации на своей стороне.
Сейчас все витрины работают по предоплате. payment_methods на локации — какие способы точка умеет принять, а не признак оплаты заказа. В карточке заказа такого признака нет: касса деньги не берёт.
Остатки на эту точку — POST /v1/product/stock/update. У элемента обязательны location_id и count. offer_id или product_id — хотя бы одно (если оба, приоритет у product_id).
{
"items": [
{
"offer_id": "HEADPHONES-001",
"product_id": "PRD-HEADPHONES-01",
"location_id": "cnc-msk-tverskaya-01",
"count": 20
}
]
}
Цены — общие, см. Подготовка (price/update: currency, items; у элемента price).
Шаг 1 — POST /v1/order/dbs/list (MVP: опрос)
У OrderListRequest обязательны filter и limit. cursor опционален.
{
"cursor": "",
"limit": 100,
"filter": {
"status": [
"NEW"
]
}
}
Ответ. У OrderListItem обязательны merchant_order_id, client_order_id, location_id, status, customer, delivery, product_name, prices, delivery_date, created_at. У delivery обязателен только delivery_type. У элемента prices обязательны price_type и value. item_type, product_id, offer_id, requirements, actions — опционально.
{
"orders": [
{
"merchant_order_id": "ORD-DBS-2026-303",
"client_order_id": "CLT-80003",
"location_id": "cnc-msk-tverskaya-01",
"status": "NEW",
"customer": {
"name": "Анна Соколова",
"phone": "+79005551212"
},
"delivery": {
"delivery_type": "CLICK_AND_COLLECT"
},
"item_type": "PRODUCT",
"product_id": "PRD-HEADPHONES-01",
"offer_id": "HEADPHONES-001",
"product_name": "Наушники",
"prices": [
{
"price_type": "CUSTOMER_FINAL_PRICE",
"value": 1299000
}
],
"requirements": {
"requires_imei": false,
"requires_mandatory_mark": false
},
"actions": [
{
"type": "cancel",
"enabled": true
}
],
"delivery_date": {
"delivery_date_begin": "2026-06-15T10:00:00+03:00",
"delivery_date_end": "2026-06-15T21:00:00+03:00"
},
"created_at": "2026-06-14T12:10:00+03:00"
}
],
"next_cursor": "",
"total": 1
}
Опрос заказов на полке выдачи — тот же метод, в filter.status значение READY_FOR_PICKUP (плюс обязательный limit).
В будущем — POST /v1/order/dbs/status/list. У OrderUpdatesListRequest обязательны filter и limit.
{
"cursor": "",
"limit": 100,
"filter": {
"status": [
"NEW"
],
"updated_at": "2026-06-14T00:00:00+03:00"
}
}
Ответ: у OrderUpdatesListResponse обязателен order_updates. У элемента обязательны merchant_order_id, client_order_id, status, changed_at, changed_by.
{
"order_updates": [
{
"merchant_order_id": "ORD-DBS-2026-303",
"client_order_id": "CLT-80003",
"status": "NEW",
"changed_at": "2026-06-14T12:10:00+03:00",
"changed_by": "MARKET"
}
]
}
Шаг 3 — POST /v1/order/dbs/status/update (CONFIRMED)
У OrderStatusUpdateRequest обязательны merchant_order_id, status, changed_at, changed_by.
{
"merchant_order_id": "ORD-DBS-2026-303",
"status": "CONFIRMED",
"changed_at": "2026-06-14T12:25:00+03:00",
"changed_by": "MERCHANT"
}
Ответ (успех): обязателен merchant_order_id; status только при успехе.
{
"merchant_order_id": "ORD-DBS-2026-303",
"status": "CONFIRMED"
}
Шаг 6 (опционально) — POST /v1/order/dbs/handover-code/set
{
"handoverCodes": [
{
"merchant_order_id": "ORD-DBS-2026-303",
"code": "619204"
}
]
}
После записи код читается опциональным полем handover_code у элемента orders в list.
Шаги 5, 6, 8–9 — смена статусов (PACKED → DELIVERING → READY_FOR_PICKUP → DELIVERED)
{
"merchant_order_id": "ORD-DBS-2026-303",
"status": "PACKED",
"changed_at": "2026-06-15T09:40:00+03:00",
"changed_by": "MERCHANT"
}
{
"merchant_order_id": "ORD-DBS-2026-303",
"status": "DELIVERING",
"changed_at": "2026-06-15T09:45:00+03:00",
"changed_by": "MERCHANT"
}
{
"merchant_order_id": "ORD-DBS-2026-303",
"status": "READY_FOR_PICKUP",
"changed_at": "2026-06-15T09:50:00+03:00",
"changed_by": "MERCHANT"
}
Ответ (успех):
{
"merchant_order_id": "ORD-DBS-2026-303",
"status": "READY_FOR_PICKUP"
}
{
"merchant_order_id": "ORD-DBS-2026-303",
"status": "DELIVERED",
"changed_at": "2026-06-15T16:05:00+03:00",
"changed_by": "MERCHANT"
}
Сценарий C&C-2: покупатель не забрал заказ или отказался
Из READY_FOR_PICKUP мерчант переводит заказ в CANCELLED, если покупатель не пришёл в срок или отказался на точке. Отдельная заявка cancellation не нужна: это путь мерчанта через status/update. Срок хранения на точке спецификация не фиксирует: поле локации storage_period_days опционально. Ориентир — storage_period_days точки и правила витрины.
{
"merchant_order_id": "ORD-DBS-2026-303",
"status": "CANCELLED",
"changed_at": "2026-06-22T21:05:00+03:00",
"changed_by": "MERCHANT"
}
Отмена до выдачи по заявке покупателя — Отмены (cancellation/list и cancellation/update). Отмена мерчантом из NEW, CONFIRMED или PACKED — тот же status/update → CANCELLED.