Возвраты

Процедура возврата товаров и денежных средств покупателю.

Возврат DBS

Покупатель оформляет возврат на витрине. Мерчант опрашивает POST /v1/return/list, рассматривает заявку и меняет статус через POST /v1/return/dbs/status/set.

Типичная цепочка рассмотрения: NEW → PENDING / DELIVERY_APPROVED → DELIVERING → DELIVERED → APPROVED (или REJECT_REFUND). Другие статусы из спецификации: NEEDS_INFO, REJECT_PENDING, PARTIAL_REFUND, MONEY_RETURNED_BY_MERCHANT, DELIVERY_TO_CLIENT, CANCELED, CLOSED.

Срок рассмотрения заявки

В карточке заявки (return/list и return/get) есть поле return_request_reviewed_at — дата и время (RFC3339), до которого мерчант должен рассмотреть заявку. Если решения нет, заявка принимается автоматически: деньги уходят покупателю без участия продавца.

ЧтоКак это работает
Кто ставит дедлайнВитрина, при создании заявки. Мерчант поле не передаёт
Что считается «рассмотрел»Любой перевод из NEW через return/dbs/status/set: PENDING, DELIVERY_APPROVED, NEEDS_INFO, REJECT_PENDING
Что будет, если молчатьЗаявка уходит в приём автоматически. В истории статусов инициатор — SYSTEM (авто-переход платформы)
Сколько именно дают времениВ контракте не зафиксировано. Конкретный срок и то, в какой статус уходит заявка при автоприёме, — правило витрины. Уточняйте при подключении

Практика опроса: return/list с filter.status: ["NEW"], разбирать заявки по возрастанию return_request_reviewed_at. Заявки без решения к дедлайну считать проигранными — оспаривать их через API нечем.

return_request_reviewed_at — дедлайн рассмотрения, а не срок, к которому покупатель обязан сдать товар. Сроки сдачи товара в контракте не заданы.

Обратная доставка: как товар едет назад

Параметры обратной доставки лежат в объекте delivery карточки заявки. Обязательные поля — delivery_type и payer; их задаёт витрина при создании заявки.

Поле return.deliveryЧто значит для продавца
delivery_typeСпособ сдачи: COURIER, PICKUP_POINT, RUSSIAN_POST. CLICK_AND_COLLECT для возврата не используется
payerКто платит за обратную доставку: CLIENT или MERCHANT. Соответствие «причина возврата → плательщик» — таблица мерчанта и витрины, согласуется на старте интеграции
address_tailАдрес забора. Обязателен при COURIER
return_location_idПВЗ, куда покупатель сдаёт товар. Не путать с location_id заявки — это склад исходного отправления. Для сдачи смотрите признак is_accepts_returns на локации. При RUSSIAN_POST не используется
return_codeКод сдачи: покупатель называет его на точке или курьеру
return_barcode_url / return_barcode_base64Штрихкод сдачи — ссылка на картинку или Base64
tracking_numberТрек обратного отправления
costСтоимость обратной доставки (сумма и валюта). В money (суммы к возврату покупателю) не входит
commentКомментарий к адресу
delivery_date (в карточке, рядом с delivery)Слот забора курьера

Код сдачи, штрихкод и трек мерчант может передать сам — те же поля есть в запросе return/dbs/status/set (return_code, return_barcode_url, return_barcode_base64, tracking_number). recommendation: передавать их вместе со статусом DELIVERY_APPROVED, чтобы покупатель получил инструкцию сдачи сразу после одобрения. Кто генерирует код и ШК — мерчант или витрина — контракт не фиксирует, согласуйте при подключении.

Три ветки сдачи

ВеткаКто что делает
COURIERСлот забора выбирает клиент на витрине при создании заявки. Курьера всегда бронирует мерчант — по своей заявке, вне API. Если слот не подходит мерчанту или клиенту, слот переносят через return/dbs/timeslot/set
PICKUP_POINTПокупатель сдаёт товар в ПВЗ из return_location_id. Точка должна принимать возвраты (is_accepts_returns: true). Выдача по return_code или штрихкоду
RUSSIAN_POSTДва режима. CLIENT_SELF — клиент отправляет сам и сообщает трек. MERCHANT_BOOKED — партнёр бронирует отправление после фото и передаёт трек и ШК через status/set. Если клиент платил на почте сам, фото чека приходит в client_attachments, сумма компенсируется по договорённости с витриной

JSON — сдача через ПВЗ: одобрили и выдали инструкцию покупателю

{
  "return_id": "5001",
  "status": "DELIVERY_APPROVED",
  "changed_at": "2026-06-20T12:00:00+03:00",
  "return_code": "704512",
  "return_barcode_url": "https://cdn.example.com/returns/barcode-ret-5001.png"
}

JSON — сдача почтой, режим MERCHANT_BOOKED: передали трек

{
  "return_id": "5002",
  "status": "DELIVERY_APPROVED",
  "changed_at": "2026-06-20T12:10:00+03:00",
  "tracking_number": "80091234567890"
}

JSON — POST /v1/return/dbs/timeslot/set (перенос слота забора)

ReturnTimeslotUpdateRequest.required: return_id, delivery_date_begin, delivery_date_end, changed_at. changed_by (MERCHANT / CLIENT) и comment — опционально.

{
  "return_id": "5001",
  "delivery_date_begin": "2026-06-21T10:00:00+03:00",
  "delivery_date_end": "2026-06-21T14:00:00+03:00",
  "changed_at": "2026-06-20T13:00:00+03:00",
  "changed_by": "MERCHANT",
  "comment": "Нет курьера на выбранную дату"
}

Чего в контракте нет: сроков, за которые покупатель обязан сдать товар; автоматической смены статуса заявки по треку обратного отправления; отдельного метода «стереть» код или трек. Статусы DELIVERING и DELIVERED по возврату ставит мерчант.

JSON — POST /v1/return/list

ReturnListRequest.required: filter, limit. cursor опционален.

{
  "cursor": "",
  "limit": 100,
  "filter": {
    "status": ["NEW"]
  }
}

JSON — POST /v1/return/dbs/status/set

Обязательны return_id, status, changed_at. При REJECT_PENDING / REJECT_REFUND передайте merchant_comment.code и description.

{
  "return_id": "5001",
  "status": "DELIVERY_APPROVED",
  "changed_at": "2026-06-20T12:00:00+03:00"
}
{
  "return_id": "5001",
  "status": "APPROVED",
  "changed_at": "2026-06-22T16:40:00+03:00"
}
{
  "return_id": "5001",
  "status": "REJECT_REFUND",
  "changed_at": "2026-06-22T16:40:00+03:00",
  "merchant_comment": {
    "code": "DEFECT_NOT_CONFIRMED",
    "description": "Заявленный брак не подтвердился при осмотре"
  }
}

Причина возврата от покупателя — в карточке reason.code (return/list / return/get). Отказ продавца — merchant_comment.code.

Причины возврата (reason.code)

КодОписание
DEFECTбрак / ненадлежащее качество
POOR_QUALITYнизкое качество изготовления, материала
WRONG_ITEMпривезли не то
NOT_AS_DESCRIBEDне соответствует описанию
INCOMPLETEнеполная комплектация
DAMAGED_IN_DELIVERYповреждён при доставке
CHANGED_MINDпередумал
SIZE_COLOR_FITне подошёл размер / цвет / фасон
SIGNS_OF_USEтовар с признаками использования (как заявлено покупателем / зафиксировано при приёмке на витрине)
NOT_DELIVEREDтовар не был доставлен
EXPIRY_ISSUESпроблемы со сроком годности
SUSPECTED_COUNTERFEITподозрение на контрафакт
OTHERпрочее

Коды отказа продавца (merchant_comment.code)

Обязательны при REJECT_PENDING и REJECT_REFUND. При NEEDS_INFO код не передаётся. При OTHER обязателен merchant_comment.description.

КодОписание
NON_RETURNABLE_CATEGORYневозвратная категория (fallback, если заявка дошла до продавца)
USED_OR_DAMAGED_BY_BUYERследы использования / порча клиентом
DEFECT_NOT_CONFIRMEDзаявленный брак / проблема не подтвердились при осмотре или экспертизе
APPEARANCE_COMPROMISEDнарушен товарный вид
PACKAGING_OR_SEALS_COMPROMISEDнарушена упаковка / сняты пломбы или ярлыки
INCOMPLETE_KITнарушена комплектация по вине покупателя
WARRANTY_EXPIREDистёк гарантийный срок
WARRANTY_TERMS_VIOLATEDнарушены условия гарантии / эксплуатации
DEVICE_ACTIVATEDустройство или ПО активировано
CUSTOMER_MISSED_COURIERклиент не принял курьера (не вышел на связь / отсутствовал по адресу)
RETURN_METHOD_NOT_APPLICABLEвыбранный способ возврата неприменим (например, ПВЗ недоступен — только курьер); типично при REJECT_PENDING
INCORRECT_RETURN_REASON_SPECIFIEDнекорректно указана причина возврата
OTHERиное (обязателен merchant_comment.description)