Refund in Customer Area
You can also refund payments in your Customer Area. For more information, refer to Manage payments.
If you want to return the funds to your shopper, for example if they returned an item, you need to refund the payment. You get the outcome of the refund request asynchronously, in a REFUND webhook.
You can refund the full captured amount, a partial amount, or multiple partial amounts. The sum of the partial refunds cannot exceed the captured amount. However, note that some payment methods do not support partial refunds. You can check that in the overview of payment methods.
After your refund request, it can take up to 40 business days before the funds are returned to the shopper's account, depending on the payment method.
Requirements
Requirement | Description |
---|---|
Integration type | An online payments integration. |
Webhooks | Subscribe to Standard webhooks. |
Refund, cancel, or reverse a payment
You can only refund a payment after it has been captured.
- To return a payment that has not been captured yet, you have to cancel the payment.
- If you are not sure whether the payment has been captured, you can reverse the payment instead of sending a refund request. We will then either cancel the payment if it has not been captured, or refund the payment if it has.
Refund authorization
Refund authorization means that before processing a refund, Adyen checks with the issuer if the shopper's card or account is valid. This happens automatically; you do not have to ask for this in your refund request.
Adyen supports this for:
- American Express
- Discover
- Mastercard
- Visa
As soon as the issuer authorizes the refund, the refund is visible on the shopper's account. This improves customer satisfaction and reduces the number of questions from shoppers about their refund. Also, there are less refund-related chargebacks because issuers usually return the funds to the shopper sooner.
Issuers can decline a refund authorization for reasons like:
- Lost or expired card
- Invalid card number
- Closed account
- Suspected fraud
When a refund authorization is declined, we still try to process the refund.
Pilot to prepare for 2025 changes
Adyen is currently running a pilot where declined refund authorizations are handled differently:
- We do not proceed with the refund. In your Customer Area, the transaction status remains Settled.
-
We inform you of the reason for the declined refund authorization in the REFUND, CANCEL_OR_REFUND, and REFUND_WITH_DATA webhooks. The
reason
parameter in the webhook will a have a value of Authorisation for refund failed with response code followed by the raw response we received.
This improved transparency about the status of a refund enables you to take action sooner, so you can return the funds to the shopper in some other way.
The behavior described above will become the default in 2025. If you want to prepare for that and participate in this pilot, reach out to your Adyen contact or to our Support Team. Note that some card networks charge a refund authorization fee.
Refund a payment
To return funds to your customer:
-
From the AUTHORISATION webhook, get the
pspReference
of the authorization you want to refund. -
Make a POST request to the /payments/{paymentPspReference}/refunds endpoint, where
paymentPspReference
is thepspReference
of the authorization you want to refund.In your request, include:
Parameter Required Description merchantAccount
The name of your merchant account that is used to process the payment. amount
The amount that you want to refund. - The
value
must be the same or, in case of a partial refund, less than the capturedamount
. - The
currency
must match the currency used in the authorization.
reference
Your reference for the refund, for example to tag a partial refund for future reconciliation. The reference
parameter is required for GrabPay refunds.The following example shows how to refund EUR 25.00 on an authorization that has the
pspReference
XB7XNCQ8HXSKGK82. - The
-
When you receive the /payments/{paymentPspReference}/refunds response, note:
paymentPspReference
: the PSP reference of the authorization you want to refund.pspReference
: Adyen's unique reference associated with this refund request.
{ "merchantAccount": "YOUR_MERCHANT_ACCOUNT", "paymentPspReference": "XB7XNCQ8HXSKGK82", "pspReference" : "JDD6LKT8MBLZNN84", "reference": "YOUR_UNIQUE_REFERENCE", "status" : "received" }
-
Wait for the REFUND webhook to learn the outcome of the refund request.
REFUND webhook
Before we send a refund request to be processed, we perform various validations. If these validations succeed, usually the refund itself also succeeds. You receive the outcome of the validations asynchronously, in a webhook that includes:
eventCode
: REFUND.pspReference
: thepspReference
from the response for your refund request.-
success
: indicates the outcome of the refund validations. Possible values:-
true: Adyen's validations were successful and we sent the refund request to the card scheme. This usually means that the refund will be processed successfully. However, in rare cases the refund can be rejected by the card scheme, or reversed. For information about these exceptions, see REFUND_FAILED webhook, and REFUNDED_REVERSED webhook.
-
false: the refund validations failed. The webhook includes a
reason
field with a short description of the problem. Review the reason, fix the issue if possible, and resubmit the refund request.
-
For more information about the included fields, see the REFUND webhook reference.
Reasons for failed refund validation
When our validations of a refund fail, you receive a webhook for the refund with success
: false and the reason of the failure. 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 |
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. |
Amount too low to be accepted by Card Network |
The refund amount was too low. The amount must be greater than 0.01 in any currency. |
Modification in different currency than authorisation |
The refund was requested in a currency different from the currency in which the authorization was made. |
The balance on the payment is the amount that remains from the original payment. For example, if a transaction has a total of EUR 10 and no refund or chargeback is processed, then the balance on the payment is EUR 10. After a refund or chargeback of EUR 3 is processed, the remaining balance on the payment is EUR 7.
REFUND_FAILED webhook
Although rare, a refund can fail after you received a REFUND webhook with success
: true. A successful REFUND webhook means that our validations were successful and we sent the refund request to the card scheme. However, the card scheme can still reject the refund. This can happen even a few days after you submitted the refund request.
Most of the time Adyen can fix the issue, so that the shopper will eventually receive the funds. Sometimes, however, you need to take action yourself. To learn why a refund can fail and what, if anything, you need to do in each case, refer to Failed refunds.
When a refund fails after you received success
: true in the REFUND webhook, we inform you of this with another webhook containing:
eventCode
: REFUND_FAILEDpspReference
: thepspReference
of the refund request.
For more information about the included fields, see the REFUND_FAILED webhook reference.
An overview of failed refunds is available in your Payment accounting report.
Testing failed refunds
In our test environment, you can check how your integration handles failed refunds:
-
Make a test card payment, specifying:
holderName
: refund failed
{ "amount": { "currency": "EUR", "value": 500 }, "reference": "Refund failed test", "paymentMethod": { "type": "scheme", "encryptedCardNumber": "test_4111111111111111", "encryptedExpiryMonth": "test_03", "encryptedExpiryYear": "test_2030", "encryptedSecurityCode": "test_737", "holderName": "refund failed" }, "returnUrl": "https://your-company.com/...", "merchantAccount": "YOUR_MERCHANT_ACCOUNT" }
-
Refund this payment, either in your Customer Area, or by making an API request.
It can take several hours to process your refund request. -
Check that you receive a webhook with
eventCode
: REFUND_FAILED for your test payment.
REFUNDED_REVERSED webhook
For some payment methods, for example bank transfers, iDEAL, or Bancontact, the status of the payment can change from **Refunded** to **RefundedReversed**. This means that the funds have been returned to Adyen, and are back in your account. This can happen, for example, if the shopper's bank account is no longer valid. Before you retry the refund, contact the shopper about the status of their bank account.When a refund is reversed, we inform you of this with a webhook containing:
eventCode
: REFUNDED_REVERSEDsuccess
: true
For more information about the included fields, see the REFUNDED_REVERSED webhook reference.
An overview of reversed refunds is available in your Payment accounting report.