RozetkaPay

Повернення коштів

Операції повернення та відміни платежів через RozetkaPay API

Типи операцій

ОпераціяКоли використовувати
RefundПісля успішного списання коштів
CancelДля скасування заблокованих (холд) коштів

Повернення коштів (Refund)

Повернення коштів після успішного платежу:

curl -X POST https://api.rozetkapay.com/api/payments/v1/refund \
-u "login:password" \
-H "Content-Type: application/json" \
-d '{
"external_id": "order_12345",
"amount": 100,
"currency": "UAH",
"callback_url": "https://your-site.com/callback"
}'

Весь перелік полів — у API Reference →

Параметри

ПараметрОбов’язковийОпис
external_idТакID оригінального замовлення
amountНіСума повернення (якщо не вказано — повна сума)
currencyНіВалюта
callback_urlНіURL для callback
payloadНіДодаткові дані

Успішна відповідь

{
"is_success": true,
"details": {
"status": "success",
"status_code": "refund_successful",
"status_description": "Refund successful."
}
}

Часткове повернення

Можна повернути частину суми:

curl -X POST https://api.rozetkapay.com/api/payments/v1/refund \
-u "login:password" \
-H "Content-Type: application/json" \
-d '{
"external_id": "order_12345",
"amount": 50,
"currency": "UAH"
}'

Відкладене повернення

Повернення списується з балансу партнера, тому суми на ньому має бути достатньо. Баланс партнера — це загальна сума сьогоднішніх платежів до виплати.

Якщо коштів не вистачає, повернення переходить у статус «в обробці» і виконується автоматично, коли баланс досягне суми повернення.

Відповідь на такий запит:

{
"is_success": false,
"details": {
"status": "pending",
"status_code": "refund_pending",
"status_description": "Refund is pending due to insufficient balance"
}
}

Примусове повторення

Щоб вручну повторити спробу повернення:

curl -X POST https://api.rozetkapay.com/api/payments/v1/refund/retry \
-u "login:password" \
-H "Content-Type: application/json" \
-d '{
"external_id": "order_12345"
}'

Відміна відкладеного повернення

Щоб скасувати pending повернення:

curl -X POST https://api.rozetkapay.com/api/payments/v1/refund/cancel \
-u "login:password" \
-H "Content-Type: application/json" \
-d '{
"external_id": "order_12345"
}'

Статус зміниться на refund_is_cancelled_by_initiator.

Скасування холду (Cancel)

Для розблокування раніше заблокованих коштів (двостадійна оплата):

curl -X POST https://api.rozetkapay.com/api/payments/v1/cancel \
-u "login:password" \
-H "Content-Type: application/json" \
-d '{
"external_id": "order_12345",
"callback_url": "https://your-site.com/callback"
}'

Весь перелік полів — у API Reference →

Часткове скасування

curl -X POST https://api.rozetkapay.com/api/payments/v1/cancel \
-u "login:password" \
-H "Content-Type: application/json" \
-d '{
"external_id": "order_12345",
"amount": 50,
"currency": "UAH"
}'

Успішна відповідь

{
"is_success": true,
"details": {
"status": "success",
"status_code": "cancel_successful",
"status_description": "Cancel successful."
}
}

Коли що використовувати

СценарійОперація
Товар не підійшов (після оплати)refund
Замовлення скасовано до відправки (двостадійна)cancel
Клієнт відмовився до списанняcancel
Товар пошкоджений (після оплати)refund

Статуси повернень

СтатусОпис
refund_successfulУспішне повернення
refund_pendingОчікує (недостатньо коштів)
refund_is_cancelled_by_systemСкасовано системою
refund_is_cancelled_by_initiatorСкасовано мерчантом

Callbacks

Після кожної операції повернення надсилається callback. Нижче — повне тіло callback, яке надходить на ваш callback_url. Весь перелік полів — у API Reference.

{
"id": "rp_abc123",
"external_id": "order_12345",
"operation": "refund",
"is_success": true,
"details": {
"payment_id": "563338115268219116",
"status": "success",
"status_code": "refund_successful",
"status_description": "Refund successful.",
"amount": "100",
"currency": "UAH",
"created_at": "2024-01-15T10:30:00Z",
"processed_at": "2024-01-15T10:30:05Z",
"method": "refund"
}
}