Refund Payment
Use this to process refunds for payments made via one-time payment or AutoDebit. Both successful and failed refund attempts will trigger a notification through a webhook.
Process Flow

Step | Sender | Receiver | Process |
---|---|---|---|
1 | Acquirer | API Gateway | Initiate a refund request to API Gateway. |
2 | API Gateway | Acquirer | API Gateway will respond with REFUND_PENDING while processing the request. |
3 | API Gateway | Acquirer | The final refund request will be parsed to Acquirer via webhook. |
Request
POST /v1/bw/refund
refundId | String | Max length: 36 | Required | |||
The unique external identifier (uuid v4) provided by the acquirer to PayNet when initiating a refund request. | ||||||
checkoutId | String | Max length: 36 | Required | |||
The similar checkoutId parsed during the first payment initiated. | ||||||
paymentMethod | String | Max length: 2 | Required | |||
The paymentMethod selected during the first payment initiated. | ||||||
amount | String | Max length: 18 | Required | |||
The intended amount to be refunded. | ||||||
merchantReferenceId | String | Max length: 140 | Required | |||
Refund reference to the recipient. To be shown to the user for the details of the refund. |
Sample Request:
{
"refundId": "dd66946f-5834-49a1-9d51-89ccfbd77909",
"checkoutId": "b4e6c575-5393-4a1e-a231-269e9a3f8af3",
"paymentMethod": "01",
"amount": "10.00",
"merchantReferenceId": "ref20240925T132501"
}
Response
Data Object | ||||||
endToEndId | String | Max length: 35 | Required | |||
Unique message identification from RPP. This can be used to reconcile with RPP BackOffice or Reports. | ||||||
refundStatus | String | Max length: 35 | Required | |||
The status will always be REFUND_PENDING while it’s processing. | ||||||
End Data Object | ||||||
message | String | Max length: 1024 | Required | |||
Please refer to the list of reason codes in the appendix. |
Sample Response:
{
"data": {
"endToEndId": "20240927M0000201861OBW00000001",
"refundStatus": "REFUND_PENDING"
},
"message": "OK"
}
Webhook : Update Refund Status
This webhook will notify you with the final status of the refund once the processing is complete.
refundId | String | Max length: 36 | Required | |||
The unique external identifier (uuid v4) provided by the acquirer to PayNet when initiating a refund request. | ||||||
checkoutId | String | Max length: 36 | Required | |||
The similar checkoutId parsed during the first payment initiated. | ||||||
endToEndId | String | Max length: 35 | Required | |||
Unique message identification from RPP. This can be used to reconcile with RPP BackOffice or Reports. | ||||||
paymentStatus Object | ||||||
code | String | Max length: 4 | Required | |||
Plese refer to the list of status codes in the appendix. | ||||||
substate | String | Max length: 35 | Required | |||
The final refund status once it has processed. The potential substates are as below: REFUND_PENDING - Refund is in progress. REFUND_ACCEPTED - Refund sent to issuing bank for processing. REFUND_REJECTED - Refund unable to process, refer to message field for the reasons. REFUND_TIMEOUT - Refund timeout due to processing delay. Please verify the refund status in the next day report. | ||||||
message | String | Max length: 1024 | Required | |||
Please refer to the list of reason codes in the appendix. | ||||||
End paymentStatus Object | ||||||
issuer | String | Max length: 100 | Required | |||
Name of payer’s issuing bank. | ||||||
paymentMethod | String | Max length: 2 | Required | |||
The paymentMethod selected during the first payment initiated. | ||||||
amount | String | Max length: 18 | Required | |||
The amount requested for the refund. |
Sample Request:
{
"refundId": "f36b4c31-44b2-40f2-820a-7fbd081cae9b",
"checkoutId": "b4e6c575-5393-4a1e-a231-269e9a3f8af3",
"endToEndId": "20240927M0000201861OBW00000001",
"paymentStatus": {
"code": "ACTC",
"substate": "REFUND_ACCEPTED",
"message": "U002"
},
"issuer": "Ambank",
"paymentMethod": "01",
"amount": "10.00"
}