Search

Are you looking for test card numbers?

Would you like to contact support?

Online-payment icon

Refund

Refund a payment back to the shopper.

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 make a /refund request.

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 the pspReference available, you can also make an unreferenced refund.

You can only refund a payment after it has already been captured. Payments that have not yet been captured have to be cancelled instead.

Refund a payment

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 want 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.
  • reference: Optional Specifies a unique identifier for payment modification. The reference field is useful to tag a partial refund for future reconciliation.
{
    "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 will resolve these automatically without any action taken on your side. 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. To resolve these scenarios, check with the shopper the status of their bank account. We inform you of this with a notification containing:

  • eventCodeREFUNDED_REVERSED
  • successtrue

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:

  1. Make a 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"
    }
  2. Refund this payment, either in your Customer Area, or by making a /refund request.

Once we have processed the refund request, we send you a REFUND_FAILED notification.

This request may take several hours to process.

Unreferenced refund

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 pspReference available. The /refundWithData endpoint allows you to make an unreferenced refund 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_UNIQUE_SHOPPER_ID_IOfW3k9G2PvXFu2j",
   "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

See also