Search docs

Are you looking for test card numbers?

Would you like to contact support?

Start searching Adyen's documentation...

  Documentation

Refund

Refund a payment back to the shopper.

If you want to return the funds to your shopper, for example if they returned an item, you need to refund the payment. There are two ways to refund a payment:

Cancel or refund

If you want to refund a payment but are not sure whether it has been captured, use our cancel or refund functionality.

For payment methods that support separate authorisation and capture, you can only refund a payment after it has already been captured. Payments that have not yet been captured have to be cancelled instead.

In your call to the /refund endpoint, you need to specify the pspReference of the original payment. If you want to refund a payment for which you don't have this reference available, use our refund with data functionality.

Refund with an API call

In your request to the /refund endpoint, specify: 

  • merchantAccount: The name of your merchant account that is used to process the payment.
  • modificationAmount: The amount that you wish to refund. This must be the same as or less than the captured amount.
  • originalReference: The original pspReference of the payment that you want to refund. This reference is returned in the response to your payment request, and in the AUTHORISATION notification.
{
    "merchantAccount" : "YOUR_MERCHANT_ACCOUNT",

    "modificationAmount" : {
        "value" : 500,
        "currency" : "EUR"
    },

    "originalReference" : "9313547924770610",
    "reference" : "YOUR_MODIFICATION_REFERENCE"
}

You will receive a /refund response containing: 

  • pspReference: The PSP reference associated with this /refund request. Note that this is different from the PSP reference associated with the original payment request.  
{
    "pspReference" : "8312534564722331",
    "response" : "[refund-received]"
}

REFUND notification

Once we have processed your refund request, we send you a notification with:

  • eventCodeREFUND.
  • pspReference: Same as the pspReference in the /refund response. 
  • success: Indicates whether the refund request was successful. Possible values:

    • true: This usually means that the refund was successful. For information on exceptions, refer to Failed refund.
    • false: The refund 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":{
            "amount":{
               "currency":"USD",
               "value":50
            },
            "eventCode":"REFUND",
            "eventDate":"2018-11-01T00:19:34+01:00",
            "merchantAccountCode":"YOUR_MERCHANT_ACCOUNT",
            "originalReference":"8313547924770610",
            "paymentMethod":"visa",
            "pspReference":"8312534564722331",
            "reason":"",
            "success":"true"
         }
      }
   ]
}
{
   "live":"false",
   "notificationItems":[
      {
         "NotificationRequestItem":{
            "amount":{
               "currency":"USD",
               "value":50
            },
            "eventCode":"REFUND",
            "eventDate":"2018-11-01T00:19:34+01:00",
            "merchantAccountCode":"YOUR_MERCHANT_ACCOUNT",
            "originalReference":"8313547924770610",
            "paymentMethod":"visa",
            "pspReference":"8312534564722331",
            "reason":"Transaction hasn't been captured, refund not possible",
            "success":"false"
         }
      }
   ]
}

For more information about the fields included in the REFUND notification, refer to Notifications API.

Partial refund

With some payment methods, it is also possible to partially refund a payment. In case of a partial refund, you only return a part of the captured amount to the shopper. 

To partially refund a payment, make a request to the /refund endpoint, specifying:

  • value: The amount that you want to refund. This must not exceed the captured value.

You can also perform multiple (partial) refunds, as long as their sum doesn't exceed the captured amount.

Failed refund

In rare cases, the refund might fail even after you received a successful REFUND notification.

For payment methods that handle the refund process offline, the refund might fail due to a technical issue. We inform you of this with a notification containing:

  • eventCodeREFUND_FAILED
  • success: true

For some payment methods, for example bank transfers, iDEAL, or Bancontact, the status of the payment can also change from Refunded to RefundedReversed. This means that the funds have been returned to Adyen, and are back in your account. For example, this may happen if the shopper's bank account is no longer valid. We inform you of this with a notification containing:

  • eventCodeREFUNDED_REVERSED
  • successtrue

An overview of failed refunds is available in your payment accounting report.

Refund with data

Payouts

For sending funds to your customers, use our Payout solution instead.

When you migrate your payment data to Adyen or integrate with an Adyen point-of-sale solution, you might need to refund a payment for which you have no PSP reference available. The /refundWithData endpoint allows you to refund a payment to either:

Refunding with data is limited by default due to anti-money laundering and payment industry regulations. To enable this functionality, contact our Support Team.

Refund to a bank account

To refund the funds to a shopper's bank account, make a request to the /refundWithData endpoint:

{
   "amount": {
      "value": 1500,
      "currency": "EUR"
   },
   "bankAccount": {
      "iban": "NL13TEST0123456789",
      "ownerName": "A. Klaassen"
   },
   "merchantAccount": "YOUR_MERCHANT_ACCOUNT",
   "reference": "YOUR_MODIFICATION_REFERENCE",
   "selectedBrand": "bankTransfer_IBAN",
   "shopperEmail": "email@shopper.com",
   "shopperIP": "1.1.1.1",
   "shopperStatement": "YOUR ORDER 122345677889"
} 

You will receive a  /refundWithData response containing a: 

  • pspReference: The PSP reference associated with this /refundWithData request. 
{
  "pspReference": "1835015179612534",
  "resultCode": "Received"
}

Once we have processed your request, we send you a REFUND_WITH_DATA notification.

Refund with raw card data

If you are PCI-compliant at Level 1 or 2, you can include raw card data in your request to the /refundWithData endpoint:

{
  "amount": {
    "value": 1500,
    "currency": "USD"
  },
  "card": {
    "number": "4111111111111111",
    "expiryMonth": "10",
    "expiryYear": "2020",
    "holderName": "Simon Hopper"
  },
  "reference": "YOUR_MODIFICATION_REFERENCE",
  "merchantAccount": "YOUR_MERCHANT_ACCOUNT"
} 

You will receive a  /refundWithData response containing a: 

  • pspReference: The PSP reference associated with this /refundWithData request. 
{
  "pspReference": "1835015179612534",
  "resultCode": "Received"
}

Once we have processed your request, we send you a REFUND_WITH_DATA notification.

Refund to a recurring contract

If a shopper has saved their payment details with you, you can refund a payment by using the recurring contract. In your call to the /refundWithData endpoint, specify:

  • shopperReference: your unique ID for the shopper.
  • selectedRecurringDetailReference: the recurringDetailReference for the recurring contract.
  • shopperInteraction: ContAuth.
 {
   "amount":{
      "value":1500,
      "currency":"USD"
   },
   "selectedRecurringDetailReference":"8315535507322518",
   "shopperReference":"YOUR_SHOPPER_ID",
   "reference":"YOUR_MODIFICATION_REFERENCE",
   "merchantAccount":"YOUR_MERCHANT_ACCOUNT",
   "recurring":{
      "contract":"RECURRING"
   },
   "shopperInteraction":"ContAuth"
}

You will receive a /refundWithData response containing a:

  • pspReference: The PSP reference associated with this /refundWithData request.
{
  "pspReference": "8835538461311270",
  "resultCode": "Received"
}

Once we have processed your request, we send you a REFUND_WITH_DATA notification.

REFUND WITH DATA notification

Once we have processed your /refundWithData request , you will receive a notification with: 

  • eventCodeREFUND_WITH_DATA.
  • pspReference: Same as the pspReference in the /refundWithData response. 
  • success: Indicates whether the refund request was successful. 
{
   "live":"false",
   "notificationItems":[
      {
         "NotificationRequestItem":{
            "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":"1835015179612534",
            "reason":"",
            "success":"true"
         }
      }
   ]
} 

For more information about the fields included in the REFUND_WITH_DATA notification, refer to Notifications API

Refund in your Customer Area

Payments lifecycle

To refund a payment, its status has to be either SentForSettle or Settled. For more information, refer to Payments lifecycle.

To refund a payment in your Customer Area:

  1. Go to Transactions > Payments, and click on the payment that you wish to refund.
    This opens the Payment Details screen.
  2. In the Submit Refund Request section, click Send Refund.

To learn how to refund a transaction in your Customer Area, you can also watch a video here:

See also