Skip to main content
POST /v2/payments/refundApply Initiates a refund for a previously completed payment. Supports full and partial refunds.

Request Parameters

paymentId
string
required
Original payment identifier to refund.
refundRequestId
string
required
Merchant-generated unique refund ID (idempotency key).Max length: 64 characters
refundAmount
object
required
Refund amount details.
refundReason
string
Reason for the refund (shown to customer).Max length: 256 characters
refundNotifyUrl
string
Webhook URL for refund status notifications.

Response Parameters

result
object
required
Standard result object
refundId
string
Rebell-assigned refund identifier
refundRequestId
string
Echo of merchant refund request ID
refundAmount
object
Confirmed refund amount
refundTime
string
Refund processing time (ISO 8601)

Example Request

{
  "paymentId": "2024011012345678901234",
  "refundRequestId": "REFUND-20240111-001",
  "refundAmount": {
    "currency": "EUR",
    "value": "1500"
  },
  "refundReason": "Customer requested cancellation",
  "refundNotifyUrl": "https://merchant.example.com/webhooks/refund"
}

Example Response

{
  "result": {
    "resultCode": "SUCCESS",
    "resultStatus": "S",
    "resultMessage": "success"
  },
  "refundId": "2024011198765432101234",
  "refundRequestId": "REFUND-20240111-001",
  "refundAmount": {
    "currency": "EUR",
    "value": "1500"
  },
  "refundTime": "2024-01-11T10:15:30+01:00"
}

Result Codes

resultStatusresultCodeDescriptionAction
SSUCCESSRefund processedUpdate order status
FORDER_NOT_EXISTOriginal payment not foundVerify paymentId
FREFUND_AMOUNT_EXCEEDRefund exceeds available amountCheck refund amount
FREFUND_NOT_ALLOWEDPayment cannot be refundedCheck payment status
UREFUND_IN_PROCESSRefund processingPoll with inquiryRefund

Partial Refunds

You can issue multiple partial refunds against a single payment, as long as the total refund amount doesn’t exceed the original payment:
// Original payment: €25.00
// First partial refund: €10.00
await rebellAPI.refundApply({
  paymentId: 'PAY_001',
  refundRequestId: 'REF_001_A',
  refundAmount: { currency: 'EUR', value: '1000' }
});

// Second partial refund: €15.00 (remaining amount)
await rebellAPI.refundApply({
  paymentId: 'PAY_001',
  refundRequestId: 'REF_001_B',
  refundAmount: { currency: 'EUR', value: '1500' }
});

Inquiry Refund

Check refund status