Refunds are usually not processed synchronously. When you send a request for a referenced or unreferenced refund, the Terminal API response only confirms we received the request. Unreferenced refunds, however, can be processed synchronously. This depends on the card scheme and the country where the card is used. If processed synchronously, you receive an additional field in the Terminal API response: acquirerResponseCode
.
We process the refund and inform you of the result through a notification webhook.
- For a referenced refund, we return a CANCEL_OR_REFUND webhook.
- For an unreferenced refund, we return a REFUND_WITH_DATA webhook.
To receive notifications about your refunds, you must set up webhooks.
When we have processed a refund, the amount is deducted from your in-process funds, and appears in your shopper's account within a few days.
CANCEL_OR_REFUND webhook
You receive the outcome of your referenced refund request asynchronously, in a CANCEL_OR_REFUND webhook that includes:
eventCode
: CANCEL_OR_REFUND.originalReference
: the PSP reference of the original payment.pspReference
: thepspReference
from the reversal response.-
success
: indicates whether the request to reverse the payment was successful. Possible values:- true: your request was successful. The
modification.action
field shows whether the request produced a cancel or a refund. This depends on whether the original payment has already been captured. -
false: your request failed. The notification includes a
reason
field with a short description of the problem. Review the reason, fix the issue if possible, and resubmit the reversal request.
- true: your request was successful. The
{
"live":"false",
"notificationItems":[
{
"NotificationRequestItem":{
"additionalData":{
"modification.action": "refund"
},
"amount":{
"currency": "EUR",
"value": 1025
},
"eventCode":"CANCEL_OR_REFUND",
"eventDate":"2022-02-03T15:14:15.004Z",
"merchantAccountCode":"YOUR_MERCHANT_ACCOUNT",
"originalReference":"VK9DRSLLRCQ2WN82",
"paymentMethod":"mc",
"pspReference":"TF995R5G6L2GWR82",
"reason":"",
"success":"true"
}
}
]
}
For more information about the included fields, see the CANCEL_OR_REFUND notification reference.
REFUND_WITH_DATA webhook
You receive the outcome of your unreferenced refund request asynchronously, in a REFUND_WITH_DATA webhook that includes:
eventCode
: REFUND_WITH_DATA.additionalData
: the information in this objects depends on the additional settings that you enabled.pspReference
: same as the PSP reference of the refund response.-
success
: indicates whether the refund was successful. Possible values:- true: your request was successful.
-
false: your request failed. The notification includes a
reason
field with a short description of the problem. Review the reason, fix the issue if possible, and resubmit the refund request.
{
"live":"false",
"notificationItems":[
{
"NotificationRequestItem":{
"additionalData":{
"fundingSource":"CREDIT"
},
"amount":{
"currency":"EUR",
"value":1500
},
"eventCode":"REFUND_WITH_DATA",
"eventDate":"2018-07-16T17:46:51+02:00",
"merchantAccountCode":"YOUR_MERCHANT_ACCOUNT",
"merchantReference": "YOUR_MODIFICATION_REFERENCE",
"pspReference":"WNS7WQ756L2GWR82",
"reason":"",
"success":"true"
}
}
]
}
For more information about the included fields, see the REFUND_WITH_DATA notification reference.
Failed refund request
When a refund request fails, you receive a REFUND webhook with success
: false and the reason why the request failed. The next table shows the most common reasons.
reason |
Description |
---|---|
Requested refund amount too high |
No chargeback or refund has been processed, and the requested refund amount is more than the balance on the payment. |
Already partially refunded, new requested refund amount too high |
Partial refund(s) has(/have) been processed, and the requested refund amount is more than the balance on the payment. |
Already partially disputed, new requested refund amount too high |
Partial chargeback(s) has(/have) been processed, and the requested refund amount is more than the balance on the payment. |
Already fully refunded, no balance available for new requested refund |
Full refund has been processed, and the remaining balance on the payment is 0. |
Partially refunded and partially disputed, no balance available for new requested refund |
Partial refund(s) and chargeback(s) have been processed, and the requested refund amount is more than the balance on the payment. Partial refund(s) and chargeback(s) have been processed, and the balance on the payment is a negative amount. |
Already fully disputed, no balance available for new requested refund |
Full chargeback has been processed, and the balance on the payment is 0. A full chargeback and partial refund(s) have been processed, and the balance on the payment is a negative amount. |
Insufficient in-process funds on account for refunding this payment |
There is not enough balance on your merchant account to process the refund. |
Transaction hasn't been captured, refund not possible |
The refund was requested before the transaction was captured. You need to cancel the transaction instead or wait until the transaction is settled. |
The maximum period for this operation has expired |
The refund was requested past the expiration date permitted by the payment method to process the request. |
The balance on the payment is the amount that remains from the original payment. For example, if a transaction has a total of 10 EUR and no refund or chargeback is processed, then the balance on the payment is 10 EUR. After a refund or chargeback of 3 EUR is processed, the remaining balance on the payment is 7 EUR.