Возвраты
Процедура возврата товаров и денежных средств покупателю.
Возврат 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) |