Refund

Refund a payment back to the shopper. 


 

Payments lifecycle

A refunded payment has the status SentForRefund (or RefundedBulk). For more information, refer to Payments lifecycle.

To refund a payment back to the shopper, you need to provide the PSP reference of the original payment. For payment methods that support partial refunds, you can also return a part of the payment back to the shopper.

In some limited cases, for example when you migrate your payment data to Adyen, it is also possible to refund a payment without providing the original PSP reference

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. If you are not sure whether a payment has been captured, use the Cancel or Refund modification. 

Refund with PSP reference

To refund a payment, make a request to the /refund endpoint. You need to specify: 

  • merchantAccount: The name of your merchant account that is used to process the payment.
  • modificationAmount: The amount that you want to refund. This must be same as 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" : "YourMerchantAccount",
    
    "modificationAmount" : {
        "value" : 500,
        "currency" : "EUR"
    },
    
    "originalReference" : "9313547924770610",
    "reference" : "YourModificationReference"
}

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]"
}

Notifications

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:
    • truethe refund request was valid. 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":"YourMerchantAccount",
            "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":"YourMerchantAccount",
            "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 without PSP reference

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 refund with data functionality allows you to refund a payment by specifying the shopper's card or bank account information. 

There are two ways you can refund a payment with data: 

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 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": "YourModificationReference",
  "merchantAccount": "YourMerchantAccount"
} 

You will receive a  /refundWithData response containing a: 

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

For more information about the fields included in the /refundWithData request and response, refer to PaymentResult.

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": "YourMerchantAccount",
   "reference": "YourModificationReference",
   "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"
} 

For more information about the fields included in the /refundWithData request and response, refer to PaymentResult.

Notifications

Once we have processed your request, we will send you 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":"YourMerchantAccount",
            "merchantReference": "YourModificationReference",
            "pspReference":"1835015179612534",
            "reason":"",
            "success":"true"
         }
      }
   ]
} 

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

See also