{"title":"Refund","category":"default","creationDate":1776961627,"content":"<div class=\"sc-notice warning\"><div>\n<p><strong>Adyen is no longer developing the Classic API integration<\/strong><\/p>\n<p>This page is for the Classic API integration, which we no longer accept new integrations with. <\/p>\n<p>We strongly recommend migrating to the newer <a href=\"\/online-payments\/modify-payments\">modification endpoints<\/a> using the Checkout API  integration. To use this newer integration, you must also <a href=\"\/pt\/online-payments\/upgrade-your-integration\/migrate-to-checkout-api\">migrate to the Checkout API<\/a>.<\/p>\n<\/div><\/div>\n<div class=\"additional-info-block output-inline\">\n<h5 class=\"article__heading additional-info-block__title\">Refund in Customer Area <\/h5><div class=\"additional-info-block__body\"><p>You can also refund payments in your Customer Area. For more information, refer to <a href=\"\/pt\/account\/manage-payments#refund-a-payment\">Manage payments<\/a>.<\/p><\/div><\/div>\n\n<p>If you want to return the funds to your shopper, for example if they returned an item, you need to make a <a href=\"https:\/\/docs.adyen.com\/api-explorer\/#\/Payment\/refund\" class=\"codeLabel external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">\/refund<\/a> request.<\/p>\n<p>In your call to the <a href=\"https:\/\/docs.adyen.com\/api-explorer\/#\/Payment\/refund\" class=\"codeLabel external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">\/refund<\/a> endpoint, you need to specify the <code>pspReference<\/code> of the original payment. If you want to refund a payment for which you do not have the <code>pspReference<\/code> available, you can also make an <a href=\"#unreferenced-refund\">unreferenced refund<\/a>.<\/p>\n<div class=\"notices green\">\n<p>You can only refund a payment after it has already been captured. Payments that have not yet been captured have to be <a href=\"\/pt\/online-payments\/classic-integrations\/modify-payments\/cancel\">cancelled<\/a> instead.<\/p>\n<\/div>\n<h2 id=\"refund-a-payment\">Refund a payment<\/h2>\n<p>In your request to the\u00a0<a href=\"https:\/\/docs.adyen.com\/api-explorer\/#\/Payment\/refund\" class=\"codeLabel external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">\/refund<\/a> endpoint, specify:\u00a0<\/p>\n<ul>\n<li><code>merchantAccount<\/code>: The name of your merchant account that is used to process the payment.<\/li>\n<li><code>modificationAmount<\/code>: The amount that you want to refund. This must be the same as or <a href=\"#partial-refund\">less than<\/a> the captured <code>amount<\/code>.<\/li>\n<li><code>originalReference<\/code>: The original\u00a0<code>pspReference<\/code>\u00a0of the payment that you want to refund. This reference is returned in the response to your payment request, and in the\u00a0AUTHORISATION webhook event.<\/li>\n<li><code>reference<\/code>: Your reference for the refund, for example for tagging a partial refund for future reconciliation. The <code>reference<\/code> parameter is required for <a href=\"\/pt\/payment-methods\/grabpay\">GrabPay<\/a> refunds.<\/li>\n<\/ul>\n<pre><code class=\"language-json\">{\n    \"merchantAccount\" : \"YOUR_MERCHANT_ACCOUNT\",\n\n    \"modificationAmount\" : {\n        \"value\" : 500,\n        \"currency\" : \"EUR\"\n    },\n\n    \"originalReference\" : \"9313547924770610\",\n    \"reference\" : \"YOUR_MODIFICATION_REFERENCE\"\n}<\/code><\/pre>\n<p>You will receive a <code>\/refund<\/code>\u00a0response containing:\u00a0<\/p>\n<ul>\n<li><code>pspReference<\/code>: The\u00a0PSP reference associated with this\u00a0<code>\/refund\u00a0<\/code>request.\u00a0Note that this is different from the PSP reference associated with the original\u00a0payment request.\u00a0\u00a0<\/li>\n<\/ul>\n<pre><code class=\"language-json\">{\n    \"pspReference\" : \"8312534564722331\",\n    \"response\" : \"[refund-received]\"\n}<\/code><\/pre>\n<h3 id=\"refund-webhook\">REFUND webhook<\/h3>\n<p>Once we have processed your refund request, we send you a\u00a0<a href=\"\/pt\/development-resources\/webhooks\">webhook<\/a>\u00a0with:<\/p>\n<ul>\n<li><code>eventCode<\/code>:\u00a0<strong>REFUND<\/strong>.<\/li>\n<li><code>pspReference<\/code>: Same as the\u00a0<code>pspReference<\/code>\u00a0in the\u00a0<code>\/refund<\/code>\u00a0response.\u00a0<\/li>\n<li>\n<p><code>success<\/code>: Indicates whether the refund request was successful. Possible values:<\/p>\n<ul>\n<li><strong>true<\/strong>: The refund request was successful. This usually means that the refund was successful. For information on exceptions, refer to\u00a0<a href=\"#failed-refund\">Failed refund exceptions<\/a>.<\/li>\n<li><strong>false<\/strong>: The refund request failed.\u00a0The\u00a0webhook includes a\u00a0<code>reason<\/code>\u00a0field with a short description of the problem.\u00a0Review <a href=\"#unsuccessful-refund-request\">the reason<\/a>, fix the issue if possible, and resubmit the refund request.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<pre><code class=\"language-json\">{\n   \"live\":\"false\",\n   \"notificationItems\":[\n      {\n         \"NotificationRequestItem\":{\n            \"amount\":{\n               \"currency\":\"USD\",\n               \"value\":50\n            },\n            \"eventCode\":\"REFUND\",\n            \"eventDate\":\"2018-11-01T00:19:34+01:00\",\n            \"merchantAccountCode\":\"YOUR_MERCHANT_ACCOUNT\",\n            \"originalReference\":\"8313547924770610\",\n            \"paymentMethod\":\"visa\",\n            \"pspReference\":\"8312534564722331\",\n            \"reason\":\"\",\n            \"success\":\"true\"\n         }\n      }\n   ]\n}<\/code><\/pre>\n<pre><code class=\"language-json\">{\n   \"live\":\"false\",\n   \"notificationItems\":[\n      {\n         \"NotificationRequestItem\":{\n            \"amount\":{\n               \"currency\":\"USD\",\n               \"value\":50\n            },\n            \"eventCode\":\"REFUND\",\n            \"eventDate\":\"2018-11-01T00:19:34+01:00\",\n            \"merchantAccountCode\":\"YOUR_MERCHANT_ACCOUNT\",\n            \"originalReference\":\"8313547924770610\",\n            \"paymentMethod\":\"visa\",\n            \"pspReference\":\"8312534564722331\",\n            \"reason\":\"Transaction hasn't been captured, refund not possible\",\n            \"success\":\"false\"\n         }\n      }\n   ]\n}<\/code><\/pre>\n<p>For more information about the included fields, see  <a href=\"https:\/\/docs.adyen.com\/api-explorer\/Webhooks\/latest\/post\/REFUND\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">REFUND<\/a> webhook reference.<\/p>\n<h2 id=\"partial-refund\">Partial refund<\/h2>\n<p>With some payment methods, it is also possible to\u00a0<em>partially<\/em>\u00a0refund a payment.\u00a0In case of a partial refund, you only return a part of the captured amount to the shopper.\u00a0<\/p>\n<p>To partially refund a payment,\u00a0make a request to the\u00a0<a href=\"https:\/\/docs.adyen.com\/api-explorer\/#\/Payment\/refund\" class=\"codeLabel external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">\/refund<\/a>\u00a0endpoint, specifying:<\/p>\n<ul>\n<li><code>value<\/code>: The amount that you want to refund. This must not exceed the captured\u00a0<code>value<\/code>.<\/li>\n<\/ul>\n<p>You can also perform <em>multiple<\/em> (partial) refunds,\u00a0as long as their sum doesn't exceed the captured amount.<\/p>\n<h2 id=\"failed-refund\">Failed refund<\/h2>\n<p>An overview of failed and reversed refunds is available in your\u00a0<a href=\"\/pt\/reporting\/invoice-reconciliation\/payment-accounting-report\">Payment accounting report<\/a>.<\/p>\n<p>A refund can fail if:<\/p>\n<ul>\n<li><a href=\"#unsuccessful-refund-request\">The refund request is unsuccessful<\/a>.<\/li>\n<li><a href=\"#rejection-by-card-scheme\">The refund is rejected by the card scheme<\/a>.<\/li>\n<li><a href=\"#reversed-refunds\">The refund is reversed<\/a>.<\/li>\n<\/ul>\n<h3 id=\"unsuccessful-refund-request\">Unsuccessful refund request<\/h3>\n<p>When a refund request is unsuccessful, you receive the <code>success<\/code> value <strong>false<\/strong> in the <a href=\"#refund-webhook\">REFUND webhook<\/a>. Below are the most common <code>reason<\/code> values in the <strong>REFUND<\/strong> webhook:<\/p>\n<div class=\"notices green\">\n<p>The <em>balance on the payment<\/em> refers to the amount that remains from the original payment. For example, if a transaction has a total of EUR&nbsp;10 and no refund or chargeback is processed, then the balance on the payment is EUR&nbsp;10. After a refund or chargeback of EUR&nbsp;3 is processed, the remaining balance on the payment is EUR&nbsp;7.<\/p>\n<\/div>\n<table>\n<thead>\n<tr>\n<th><code>reason<\/code><\/th>\n<th>Description<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><strong>Requested refund amount too high<\/strong><\/td>\n<td>No chargeback or refund has been processed, and the requested refund amount is more than the balance on the payment.<\/td>\n<\/tr>\n<tr>\n<td><strong>Already partially refunded, new requested refund amount too high<\/strong><\/td>\n<td>Partial refund(s) has(\/have) been processed, and the requested refund amount is more than the balance on the payment.<\/td>\n<\/tr>\n<tr>\n<td><strong>Already partially disputed, new requested refund amount too high<\/strong><\/td>\n<td>Partial chargeback(s) has(\/have) been processed, and the requested refund amount is more than the balance on the payment.<\/td>\n<\/tr>\n<tr>\n<td><strong>Already fully refunded, no balance available for new requested refund<\/strong><\/td>\n<td>Full refund has been processed, and the remaining balance on the payment is 0.<\/td>\n<\/tr>\n<tr>\n<td><strong>Partially refunded and partially disputed, no balance available for new requested refund<\/strong><\/td>\n<td>Partial refund(s) and chargeback(s) have been processed, and the requested refund amount is more than the balance on the payment. <br> Partial refund(s) and chargeback(s) have been processed, and the balance on the payment is a negative amount.<\/td>\n<\/tr>\n<tr>\n<td><strong>Already fully disputed, no balance available for new requested refund<\/strong><\/td>\n<td>Full chargeback has been processed, and the balance on the payment is 0. <br> A full chargeback and partial refund(s) have been processed, and the balance on the payment is a negative amount.<\/td>\n<\/tr>\n<tr>\n<td><strong>Insufficient in-process funds on account for refunding this payment<\/strong><\/td>\n<td>There is not enough <a href=\"\/pt\/account\/balances\">balance<\/a> on your merchant account to process the refund.<\/td>\n<\/tr>\n<tr>\n<td><strong>Transaction hasn't been captured, refund not possible<\/strong><\/td>\n<td>The refund was requested before the transaction was captured. You need to <a href=\"\/pt\/online-payments\/classic-integrations\/modify-payments\/cancel\">cancel<\/a> the transaction instead or wait until the transaction is settled.<\/td>\n<\/tr>\n<tr>\n<td><strong>The maximum period for this operation has expired<\/strong><\/td>\n<td>The refund was requested past the expiration date permitted by the payment method to process the request.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3 id=\"rejection-by-card-scheme\">Rejection by card scheme<\/h3>\n<p>Although rare, a refund can fail after you received a <a href=\"#refund-webhook\"><strong>REFUND<\/strong> webhook<\/a> with <code>success<\/code>: <strong>true<\/strong>.<\/p>\n<p>The successful webhook means that the request has been sent to the card scheme, but it can still be rejected by the card scheme at this point. This may happen even a few days after you submitted the refund request.<\/p>\n<p>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 <a href=\"\/pt\/online-payments\/classic-integrations\/modify-payments\/capture\/failure-reasons\">Reasons for failed refund after a <code>success<\/code>:true<\/a>.<\/p>\n<p>When a refund fails, we inform you of this with a <a href=\"\/pt\/development-resources\/webhooks\">webhook<\/a> containing:<\/p>\n<ul>\n<li><code>eventCode<\/code>: <strong>REFUND_FAILED<\/strong><\/li>\n<li><code>pspReference<\/code>: The <code>pspReference<\/code> of the refund request.<\/li>\n<\/ul>\n<h3 id=\"reversed-refunds\">Reversed refund<\/h3>\n<p>For some\u00a0payment methods, for example bank transfers, iDEAL, or Bancontact, the status of the payment can change from <strong>Refunded<\/strong> to\u00a0<strong>RefundedReversed<\/strong>. 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.<\/p>\n<p>When a refund is reversed, we inform you of this with a <a href=\"\/pt\/development-resources\/webhooks\">webhook<\/a> containing:<\/p>\n<ul>\n<li><code>eventCode<\/code>:\u00a0<strong>REFUNDED_REVERSED<\/strong><\/li>\n<li><code>success<\/code>:\u00a0<strong>true<\/strong><\/li>\n<\/ul>\n<h3>Testing failed refunds<\/h3>\n<p>In our test environment, you can check how your integration handles failed refunds:<\/p>\n<ol>\n<li>\n<p>Make a <a href=\"\/pt\/payment-methods\/cards\">card payment<\/a>, specifying:<\/p>\n<ul>\n<li><code>holderName<\/code>: <strong>refund failed<\/strong><\/li>\n<\/ul>\n<pre><code class=\"language-json\">{\n  \"amount\": {\n    \"currency\": \"EUR\",\n    \"value\": 500\n  },\n  \"reference\": \"Refund failed test\",\n  \"paymentMethod\": {\n    \"type\": \"scheme\",\n    \"encryptedCardNumber\": \"test_4111111111111111\",\n    \"encryptedExpiryMonth\": \"test_03\",\n    \"encryptedExpiryYear\": \"test_2030\",\n    \"encryptedSecurityCode\": \"test_737\",\n    \"holderName\": \"refund failed\"\n  },\n  \"returnUrl\": \"https:\/\/your-company.example.com\/...\",\n  \"merchantAccount\": \"YOUR_MERCHANT_ACCOUNT\"\n}<\/code><\/pre>\n<\/li>\n<li>\n<p>Refund this payment, either <a href=\"\/pt\/account\/manage-payments#refund-a-payment\">in your Customer Area<\/a>, or by <a href=\"#refund-a-payment\">making a <code>\/refund<\/code> request<\/a>.<\/p>\n<\/li>\n<\/ol>\n<p>Once we have processed the request, you'll receive a <a href=\"\/pt\/development-resources\/webhooks\">webhook<\/a> with <code>eventCode<\/code>: <strong>REFUND_FAILED<\/strong>.<\/p>\n<div class=\"notices blue\">\n<p>This request may take several hours to process.<\/p>\n<\/div>\n<h2>Unreferenced refund<\/h2>\n<div class=\"additional-info-block output-inline\">\n<div class=\"additional-info-block__body\"><h5 id=\"payouts\">Payouts<\/h5><p>For sending funds to your customers, use our <a href=\"\/pt\/online-payments\/online-payouts\">Payout solution<\/a> instead.<\/p><\/div><\/div>\n\n<p>When you\u00a0<a href=\"\/pt\/development-resources\/migrating-payment-data\">migrate your payment data<\/a>\u00a0to Adyen or integrate with an Adyen\u00a0<a href=\"\/pt\/point-of-sale\">point-of-sale solution<\/a>, you might need to refund a payment for which you have no <code>pspReference<\/code> available. The <code>\/refundWithData<\/code> endpoint allows you to make an unreferenced refund to either:<\/p>\n<ul>\n<li><a href=\"#refund-to-a-bank-account\">The shopper's bank account<\/a><\/li>\n<li><a href=\"#refund-with-raw-card-data\">The shopper's card<\/a><\/li>\n<li><a href=\"#refund-to-a-recurring-contract\">Payment details saved in a recurring contract<\/a><\/li>\n<\/ul>\n<div class=\"sc-notice note\"><div>\n<p>Refunding with data is limited by default due to anti-money laundering and payment industry regulations. To enable this functionality, contact our <a href=\"https:\/\/ca-test.adyen.com\/ca\/ca\/contactUs\/support.shtml?form=other\" target=\"_blank\" rel=\"nofollow noopener noreferrer\" class=\"external-link no-image\">Support Team<\/a>.<\/p>\n<\/div><\/div>\n<h3 id=\"refund-to-a-bank-account\">Refund to a bank account<\/h3>\n<p>To\u00a0refund the funds to a shopper's bank account,\u00a0make a request to the\u00a0<code>\/refundWithData<\/code>\u00a0endpoint:<\/p>\n<pre><code class=\"language-json\">{\n   \"amount\": {\n      \"value\": 1500,\n      \"currency\": \"EUR\"\n   },\n   \"bankAccount\": {\n      \"iban\": \"NL13TEST0123456789\",\n      \"ownerName\": \"A. Klaassen\"\n   },\n   \"merchantAccount\": \"YOUR_MERCHANT_ACCOUNT\",\n   \"reference\": \"YOUR_MODIFICATION_REFERENCE\",\n   \"selectedBrand\": \"bankTransfer_IBAN\",\n   \"shopperEmail\": \"email@shopper.com\",\n   \"shopperIP\": \"1.1.1.1\",\n   \"shopperStatement\": \"YOUR ORDER 122345677889\"\n}<\/code><\/pre>\n<p>You will receive a\u00a0\u00a0<code>\/refundWithData<\/code>\u00a0response containing a:\u00a0<\/p>\n<ul>\n<li><code>pspReference<\/code>:\u00a0The PSP reference\u00a0associated with this\u00a0<code>\/refundWithData<\/code>\u00a0request.\u00a0<\/li>\n<\/ul>\n<pre><code class=\"language-json\">{\n  \"pspReference\": \"1835015179612534\",\n  \"resultCode\": \"Received\"\n}<\/code><\/pre>\n<p>Once we have processed your request, we send you a <a href=\"#refund-with-data-webhook\">REFUND_WITH_DATA webhook<\/a>.<\/p>\n<h3 id=\"refund-with-raw-card-data\">Refund with raw card data<\/h3>\n<p>If you are\u00a0<a href=\"\/pt\/get-started-with-adyen\/adyen-glossary\/#pci-compliance\">PCI-compliant at Level 1 or 2<\/a>, you can include raw card data in your request to the\u00a0<code>\/refundWithData<\/code>\u00a0endpoint:<\/p>\n<pre><code class=\"language-json\">{\n  \"amount\": {\n    \"value\": 1500,\n    \"currency\": \"USD\"\n  },\n  \"card\": {\n    \"number\": \"4111111111111111\",\n    \"expiryMonth\": \"03\",\n    \"expiryYear\": \"2030\",\n    \"holderName\": \"Simon Hopper\"\n  },\n  \"reference\": \"YOUR_MODIFICATION_REFERENCE\",\n  \"merchantAccount\": \"YOUR_MERCHANT_ACCOUNT\"\n}<\/code><\/pre>\n<p>You will receive a\u00a0\u00a0<code>\/refundWithData<\/code>\u00a0response containing a:\u00a0<\/p>\n<ul>\n<li><code>pspReference<\/code>:\u00a0The PSP reference\u00a0associated with this\u00a0<code>\/refundWithData<\/code>\u00a0request.\u00a0<\/li>\n<li><code>resultCode<\/code>: <strong>Received<\/strong>. If Adyen wasn't the <a href=\"\/pt\/get-started-with-adyen\/adyen-glossary\/#acquirer-or-acquiring-bank\">acquirer<\/a> for this transaction, it may be <strong>Authorized<\/strong>.\n<pre><code class=\"language-json\">{\n\"pspReference\": \"1835015179612534\",\n\"resultCode\": \"Received\"\n}<\/code><\/pre><\/li>\n<\/ul>\n<p>Once we have processed your request, we send you a <a href=\"#refund-with-data-webhook\">REFUND_WITH_DATA webhook<\/a>.<\/p>\n<h3 id=\"refund-to-a-recurring-contract\">Refund to a recurring contract<\/h3>\n<p>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 <code>\/refundWithData<\/code> endpoint, specify:<\/p>\n<ul>\n<li><code>shopperReference<\/code>: your unique ID for the shopper.<\/li>\n<li><code>selectedRecurringDetailReference<\/code>: the <code>recurringDetailReference<\/code> for the recurring contract.<\/li>\n<li><code>shopperInteraction<\/code>: <strong>ContAuth<\/strong>.<\/li>\n<\/ul>\n<pre><code class=\"language-json\"> {\n   \"amount\":{\n      \"value\":1500,\n      \"currency\":\"USD\"\n   },\n   \"selectedRecurringDetailReference\":\"8315535507322518\",\n   \"shopperReference\":\"YOUR_UNIQUE_SHOPPER_ID_IOfW3k9G2PvXFu2j\",\n   \"reference\":\"YOUR_MODIFICATION_REFERENCE\",\n   \"merchantAccount\":\"YOUR_MERCHANT_ACCOUNT\",\n   \"recurring\":{\n      \"contract\":\"RECURRING\"\n   },\n   \"shopperInteraction\":\"ContAuth\"\n}<\/code><\/pre>\n<p>You will receive a <code>\/refundWithData<\/code> response containing a:<\/p>\n<ul>\n<li><code>pspReference<\/code>: The PSP reference associated with this <code>\/refundWithData<\/code> request.<\/li>\n<\/ul>\n<pre><code class=\"language-json\">{\n  \"pspReference\": \"8835538461311270\",\n  \"resultCode\": \"Received\"\n}<\/code><\/pre>\n<p>Once we have processed your request, we send you a <a href=\"#refund-with-data-webhook\">REFUND_WITH_DATA webhook<\/a>.<\/p>\n<h3 id=\"refund-with-data-webhook\">REFUND WITH DATA webhook<\/h3>\n<p>You receive the outcome of your <code>\/refundWithData<\/code> request asynchronously, in a <a href=\"\/pt\/development-resources\/webhooks\">webhook event<\/a>  that includes:<\/p>\n<ul>\n<li><code>eventCode<\/code>: <strong>REFUND_WITH_DATA<\/strong>.<\/li>\n<li><code>additionalData<\/code>: the information in this objects depends on the <a href=\"\/pt\/development-resources\/webhooks\/webhook-types\/additional-settings\">additional settings<\/a> that you enabled. <\/li>\n<li><code>originalReference<\/code>: the PSP reference of the unreferenced refund request. This is not the PSP reference of the payment that is being refunded, because with an unreferenced refund that PSP reference is unknown. In your Customer Area you can find the refund using the <code>originalReference<\/code> value.<\/li>\n<li><code>pspReference<\/code>: the PSP reference generated when the refund was captured.<\/li>\n<li>\n<p><code>success<\/code>: indicates the outcome of the refund validations. Possible values:<\/p>\n<ul>\n<li>\n<p><strong>true<\/strong>: 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 <a href=\"\/pt\/online-payments\/refund#refund-failed\"><strong>REFUND_FAILED<\/strong> webhook<\/a>, and <a href=\"\/pt\/online-payments\/refund#refunded-reversed\"><strong>REFUNDED_REVERSED<\/strong> webhook<\/a>.<\/p>\n<\/li>\n<li>\n<p><strong>false<\/strong>: the refund validations failed. The webhook includes a <code>reason<\/code> field with a short description of the problem. <a href=\"#failed-refund-request\">Review the reason<\/a>, fix the issue if possible, and resubmit the refund request.<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<pre><code class=\"language-json\">{\n   \"live\":\"false\",\n   \"notificationItems\":[\n      {\n         \"NotificationRequestItem\":{\n            \"additionalData\":{\n                \"fundingSource\":\"CREDIT\"\n            },\n            \"amount\":{\n               \"currency\":\"EUR\",\n               \"value\":40000\n            },\n            \"eventCode\":\"REFUND_WITH_DATA\",\n            \"eventDate\":\"2023-04-27T17:46:51+02:00\",\n            \"merchantAccountCode\":\"YOUR_MERCHANT_ACCOUNT\",\n            \"merchantReference\": \"YOUR_MODIFICATION_REFERENCE\",\n            \"originalReference\":\"NV4ZPV72LV5X8N82\",\n            \"paymentMethod\":\"mc\",\n            \"pspReference\":\"NC6HT9CRT65ZGN82\",\n            \"reason\":\"\",\n            \"success\":\"true\"\n         }\n      }\n   ]\n}<\/code><\/pre>\n<p>For more information about the included fields, see the  <a href=\"https:\/\/docs.adyen.com\/api-explorer\/Webhooks\/latest\/post\/REFUND_WITH_DATA\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">REFUND_WITH_DATA<\/a> webhook reference.<\/p>\n<h2 id=\"see-also\">See also<\/h2>\n<div class=\"see-also-links output-inline\" id=\"see-also\">\n<ul><li><a href=\"https:\/\/docs.adyen.com\/api-explorer\/?classes=codeLabel#\/Payment\/refund\"\n                        target=\"_blank\"\n                         class=\"external\">\n                    API Explorer\n                <\/a><\/li><li><a href=\"https:\/\/docs.adyen.com\/api-explorer\/#\/Webhooks\"\n                        target=\"_blank\"\n                         class=\"external\">\n                    Notifications API\n                <\/a><\/li><li><a href=\"\/online-payments\/classic-integrations\/modify-payments\/capture\"\n                        target=\"_self\"\n                        >\n                    Capture\n                <\/a><\/li><li><a href=\"\/online-payments\/classic-integrations\/modify-payments\/cancel-or-refund\"\n                        target=\"_self\"\n                        >\n                    Cancel or refund\n                <\/a><\/li><li><a href=\"\/account\/payments-lifecycle\"\n                        target=\"_self\"\n                        >\n                    Payments lifecycle\n                <\/a><\/li><li><a href=\"\/payment-methods\"\n                        target=\"_self\"\n                        >\n                    Payment methods\n                <\/a><\/li><\/ul><\/div>\n","url":"https:\/\/docs.adyen.com\/pt\/online-payments\/classic-integrations\/modify-payments\/refund","articleFields":{"description":"Refund a payment back to the shopper.","feedback_component":true,"id":"31493917","type":"page","_expandable":{"operations":""},"status":"current","last_edit_on":"22-03-2021 09:58","parameters":{"parent_page":"Classic API","anchor_new":"<a href=\"\/online-payments\/modify-payments\">modification endpoints<\/a> using the Checkout API "}},"algolia":{"url":"https:\/\/docs.adyen.com\/pt\/online-payments\/classic-integrations\/modify-payments\/refund","title":"Refund","content":"\nAdyen is no longer developing the Classic API integration\nThis page is for the Classic API integration, which we no longer accept new integrations with. \nWe strongly recommend migrating to the newer modification endpoints using the Checkout API  integration. To use this newer integration, you must also migrate to the Checkout API.\n\n\nRefund in Customer Area You can also refund payments in your Customer Area. For more information, refer to Manage payments.\n\nIf you want to return the funds to your shopper, for example if they returned an item, you need to make a \/refund request.\nIn 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 do not have the pspReference available, you can also make an unreferenced refund.\n\nYou can only refund a payment after it has already been captured. Payments that have not yet been captured have to be cancelled instead.\n\nRefund a payment\nIn your request to the\u00a0\/refund endpoint, specify:\u00a0\n\nmerchantAccount: The name of your merchant account that is used to process the payment.\nmodificationAmount: The amount that you want to refund. This must be the same as or less than the captured amount.\noriginalReference: The original\u00a0pspReference\u00a0of the payment that you want to refund. This reference is returned in the response to your payment request, and in the\u00a0AUTHORISATION webhook event.\nreference: Your reference for the refund, for example for tagging a partial refund for future reconciliation. The reference parameter is required for GrabPay refunds.\n\n{\n    \"merchantAccount\" : \"YOUR_MERCHANT_ACCOUNT\",\n\n    \"modificationAmount\" : {\n        \"value\" : 500,\n        \"currency\" : \"EUR\"\n    },\n\n    \"originalReference\" : \"9313547924770610\",\n    \"reference\" : \"YOUR_MODIFICATION_REFERENCE\"\n}\nYou will receive a \/refund\u00a0response containing:\u00a0\n\npspReference: The\u00a0PSP reference associated with this\u00a0\/refund\u00a0request.\u00a0Note that this is different from the PSP reference associated with the original\u00a0payment request.\u00a0\u00a0\n\n{\n    \"pspReference\" : \"8312534564722331\",\n    \"response\" : \"[refund-received]\"\n}\nREFUND webhook\nOnce we have processed your refund request, we send you a\u00a0webhook\u00a0with:\n\neventCode:\u00a0REFUND.\npspReference: Same as the\u00a0pspReference\u00a0in the\u00a0\/refund\u00a0response.\u00a0\n\nsuccess: Indicates whether the refund request was successful. Possible values:\n\ntrue: The refund request was successful. This usually means that the refund was successful. For information on exceptions, refer to\u00a0Failed refund exceptions.\nfalse: The refund request failed.\u00a0The\u00a0webhook includes a\u00a0reason\u00a0field with a short description of the problem.\u00a0Review the reason, fix the issue if possible, and resubmit the refund request.\n\n\n\n{\n   \"live\":\"false\",\n   \"notificationItems\":[\n      {\n         \"NotificationRequestItem\":{\n            \"amount\":{\n               \"currency\":\"USD\",\n               \"value\":50\n            },\n            \"eventCode\":\"REFUND\",\n            \"eventDate\":\"2018-11-01T00:19:34+01:00\",\n            \"merchantAccountCode\":\"YOUR_MERCHANT_ACCOUNT\",\n            \"originalReference\":\"8313547924770610\",\n            \"paymentMethod\":\"visa\",\n            \"pspReference\":\"8312534564722331\",\n            \"reason\":\"\",\n            \"success\":\"true\"\n         }\n      }\n   ]\n}\n{\n   \"live\":\"false\",\n   \"notificationItems\":[\n      {\n         \"NotificationRequestItem\":{\n            \"amount\":{\n               \"currency\":\"USD\",\n               \"value\":50\n            },\n            \"eventCode\":\"REFUND\",\n            \"eventDate\":\"2018-11-01T00:19:34+01:00\",\n            \"merchantAccountCode\":\"YOUR_MERCHANT_ACCOUNT\",\n            \"originalReference\":\"8313547924770610\",\n            \"paymentMethod\":\"visa\",\n            \"pspReference\":\"8312534564722331\",\n            \"reason\":\"Transaction hasn't been captured, refund not possible\",\n            \"success\":\"false\"\n         }\n      }\n   ]\n}\nFor more information about the included fields, see  REFUND webhook reference.\nPartial refund\nWith some payment methods, it is also possible to\u00a0partially\u00a0refund a payment.\u00a0In case of a partial refund, you only return a part of the captured amount to the shopper.\u00a0\nTo partially refund a payment,\u00a0make a request to the\u00a0\/refund\u00a0endpoint, specifying:\n\nvalue: The amount that you want to refund. This must not exceed the captured\u00a0value.\n\nYou can also perform multiple (partial) refunds,\u00a0as long as their sum doesn't exceed the captured amount.\nFailed refund\nAn overview of failed and reversed refunds is available in your\u00a0Payment accounting report.\nA refund can fail if:\n\nThe refund request is unsuccessful.\nThe refund is rejected by the card scheme.\nThe refund is reversed.\n\nUnsuccessful refund request\nWhen a refund request is unsuccessful, you receive the success value false in the REFUND webhook. Below are the most common reason values in the REFUND webhook:\n\nThe balance on the payment refers to the amount that remains from the original payment. For example, if a transaction has a total of EUR&nbsp;10 and no refund or chargeback is processed, then the balance on the payment is EUR&nbsp;10. After a refund or chargeback of EUR&nbsp;3 is processed, the remaining balance on the payment is EUR&nbsp;7.\n\n\n\n\nreason\nDescription\n\n\n\n\nRequested refund amount too high\nNo chargeback or refund has been processed, and the requested refund amount is more than the balance on the payment.\n\n\nAlready partially refunded, new requested refund amount too high\nPartial refund(s) has(\/have) been processed, and the requested refund amount is more than the balance on the payment.\n\n\nAlready partially disputed, new requested refund amount too high\nPartial chargeback(s) has(\/have) been processed, and the requested refund amount is more than the balance on the payment.\n\n\nAlready fully refunded, no balance available for new requested refund\nFull refund has been processed, and the remaining balance on the payment is 0.\n\n\nPartially refunded and partially disputed, no balance available for new requested refund\nPartial 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.\n\n\nAlready fully disputed, no balance available for new requested refund\nFull 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.\n\n\nInsufficient in-process funds on account for refunding this payment\nThere is not enough balance on your merchant account to process the refund.\n\n\nTransaction hasn't been captured, refund not possible\nThe refund was requested before the transaction was captured. You need to cancel the transaction instead or wait until the transaction is settled.\n\n\nThe maximum period for this operation has expired\nThe refund was requested past the expiration date permitted by the payment method to process the request.\n\n\n\nRejection by card scheme\nAlthough rare, a refund can fail after you received a REFUND webhook with success: true.\nThe successful webhook means that the request has been sent to the card scheme, but it can still be rejected by the card scheme at this point. This may happen even a few days after you submitted the refund request.\nMost 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 Reasons for failed refund after a success:true.\nWhen a refund fails, we inform you of this with a webhook containing:\n\neventCode: REFUND_FAILED\npspReference: The pspReference of the refund request.\n\nReversed refund\nFor some\u00a0payment methods, for example bank transfers, iDEAL, or Bancontact, the status of the payment can change from Refunded to\u00a0RefundedReversed. 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.\nWhen a refund is reversed, we inform you of this with a webhook containing:\n\neventCode:\u00a0REFUNDED_REVERSED\nsuccess:\u00a0true\n\nTesting failed refunds\nIn our test environment, you can check how your integration handles failed refunds:\n\n\nMake a card payment, specifying:\n\nholderName: refund failed\n\n{\n  \"amount\": {\n    \"currency\": \"EUR\",\n    \"value\": 500\n  },\n  \"reference\": \"Refund failed test\",\n  \"paymentMethod\": {\n    \"type\": \"scheme\",\n    \"encryptedCardNumber\": \"test_4111111111111111\",\n    \"encryptedExpiryMonth\": \"test_03\",\n    \"encryptedExpiryYear\": \"test_2030\",\n    \"encryptedSecurityCode\": \"test_737\",\n    \"holderName\": \"refund failed\"\n  },\n  \"returnUrl\": \"https:\/\/your-company.example.com\/...\",\n  \"merchantAccount\": \"YOUR_MERCHANT_ACCOUNT\"\n}\n\n\nRefund this payment, either in your Customer Area, or by making a \/refund request.\n\n\nOnce we have processed the request, you'll receive a webhook with eventCode: REFUND_FAILED.\n\nThis request may take several hours to process.\n\nUnreferenced refund\n\nPayoutsFor sending funds to your customers, use our Payout solution instead.\n\nWhen you\u00a0migrate your payment data\u00a0to Adyen or integrate with an Adyen\u00a0point-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:\n\nThe shopper's bank account\nThe shopper's card\nPayment details saved in a recurring contract\n\n\nRefunding with data is limited by default due to anti-money laundering and payment industry regulations. To enable this functionality, contact our Support Team.\n\nRefund to a bank account\nTo\u00a0refund the funds to a shopper's bank account,\u00a0make a request to the\u00a0\/refundWithData\u00a0endpoint:\n{\n   \"amount\": {\n      \"value\": 1500,\n      \"currency\": \"EUR\"\n   },\n   \"bankAccount\": {\n      \"iban\": \"NL13TEST0123456789\",\n      \"ownerName\": \"A. Klaassen\"\n   },\n   \"merchantAccount\": \"YOUR_MERCHANT_ACCOUNT\",\n   \"reference\": \"YOUR_MODIFICATION_REFERENCE\",\n   \"selectedBrand\": \"bankTransfer_IBAN\",\n   \"shopperEmail\": \"email@shopper.com\",\n   \"shopperIP\": \"1.1.1.1\",\n   \"shopperStatement\": \"YOUR ORDER 122345677889\"\n}\nYou will receive a\u00a0\u00a0\/refundWithData\u00a0response containing a:\u00a0\n\npspReference:\u00a0The PSP reference\u00a0associated with this\u00a0\/refundWithData\u00a0request.\u00a0\n\n{\n  \"pspReference\": \"1835015179612534\",\n  \"resultCode\": \"Received\"\n}\nOnce we have processed your request, we send you a REFUND_WITH_DATA webhook.\nRefund with raw card data\nIf you are\u00a0PCI-compliant at Level 1 or 2, you can include raw card data in your request to the\u00a0\/refundWithData\u00a0endpoint:\n{\n  \"amount\": {\n    \"value\": 1500,\n    \"currency\": \"USD\"\n  },\n  \"card\": {\n    \"number\": \"4111111111111111\",\n    \"expiryMonth\": \"03\",\n    \"expiryYear\": \"2030\",\n    \"holderName\": \"Simon Hopper\"\n  },\n  \"reference\": \"YOUR_MODIFICATION_REFERENCE\",\n  \"merchantAccount\": \"YOUR_MERCHANT_ACCOUNT\"\n}\nYou will receive a\u00a0\u00a0\/refundWithData\u00a0response containing a:\u00a0\n\npspReference:\u00a0The PSP reference\u00a0associated with this\u00a0\/refundWithData\u00a0request.\u00a0\nresultCode: Received. If Adyen wasn't the acquirer for this transaction, it may be Authorized.\n{\n\"pspReference\": \"1835015179612534\",\n\"resultCode\": \"Received\"\n}\n\nOnce we have processed your request, we send you a REFUND_WITH_DATA webhook.\nRefund to a recurring contract\nIf 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:\n\nshopperReference: your unique ID for the shopper.\nselectedRecurringDetailReference: the recurringDetailReference for the recurring contract.\nshopperInteraction: ContAuth.\n\n {\n   \"amount\":{\n      \"value\":1500,\n      \"currency\":\"USD\"\n   },\n   \"selectedRecurringDetailReference\":\"8315535507322518\",\n   \"shopperReference\":\"YOUR_UNIQUE_SHOPPER_ID_IOfW3k9G2PvXFu2j\",\n   \"reference\":\"YOUR_MODIFICATION_REFERENCE\",\n   \"merchantAccount\":\"YOUR_MERCHANT_ACCOUNT\",\n   \"recurring\":{\n      \"contract\":\"RECURRING\"\n   },\n   \"shopperInteraction\":\"ContAuth\"\n}\nYou will receive a \/refundWithData response containing a:\n\npspReference: The PSP reference associated with this \/refundWithData request.\n\n{\n  \"pspReference\": \"8835538461311270\",\n  \"resultCode\": \"Received\"\n}\nOnce we have processed your request, we send you a REFUND_WITH_DATA webhook.\nREFUND WITH DATA webhook\nYou receive the outcome of your \/refundWithData request asynchronously, in a webhook event  that includes:\n\neventCode: REFUND_WITH_DATA.\nadditionalData: the information in this objects depends on the additional settings that you enabled. \noriginalReference: the PSP reference of the unreferenced refund request. This is not the PSP reference of the payment that is being refunded, because with an unreferenced refund that PSP reference is unknown. In your Customer Area you can find the refund using the originalReference value.\npspReference: the PSP reference generated when the refund was captured.\n\nsuccess: indicates the outcome of the refund validations. Possible values:\n\n\ntrue: 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.\n\n\nfalse: 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.\n\n\n\n\n{\n   \"live\":\"false\",\n   \"notificationItems\":[\n      {\n         \"NotificationRequestItem\":{\n            \"additionalData\":{\n                \"fundingSource\":\"CREDIT\"\n            },\n            \"amount\":{\n               \"currency\":\"EUR\",\n               \"value\":40000\n            },\n            \"eventCode\":\"REFUND_WITH_DATA\",\n            \"eventDate\":\"2023-04-27T17:46:51+02:00\",\n            \"merchantAccountCode\":\"YOUR_MERCHANT_ACCOUNT\",\n            \"merchantReference\": \"YOUR_MODIFICATION_REFERENCE\",\n            \"originalReference\":\"NV4ZPV72LV5X8N82\",\n            \"paymentMethod\":\"mc\",\n            \"pspReference\":\"NC6HT9CRT65ZGN82\",\n            \"reason\":\"\",\n            \"success\":\"true\"\n         }\n      }\n   ]\n}\nFor more information about the included fields, see the  REFUND_WITH_DATA webhook reference.\nSee also\n\n\n                    API Explorer\n                \n                    Notifications API\n                \n                    Capture\n                \n                    Cancel or refund\n                \n                    Payments lifecycle\n                \n                    Payment methods\n                \n","type":"page","locale":"pt","boost":16,"hierarchy":{"lvl0":"Home","lvl1":"Online payments","lvl2":"Classic integrations for Ecommerce","lvl3":"Modify payments","lvl4":"Refund"},"hierarchy_url":{"lvl0":"https:\/\/docs.adyen.com\/pt","lvl1":"https:\/\/docs.adyen.com\/pt\/online-payments","lvl2":"https:\/\/docs.adyen.com\/pt\/online-payments\/classic-integrations","lvl3":"https:\/\/docs.adyen.com\/pt\/online-payments\/classic-integrations\/modify-payments","lvl4":"\/pt\/online-payments\/classic-integrations\/modify-payments\/refund"},"levels":5,"category":"Online Payments","category_color":"green","tags":["Refund"]}}
