{"title":"Referenced refunds","category":"default","creationDate":1776961628,"content":"<p>Customers appreciate the possibility of omnichannel returns, allowing them to return an ecommerce purchase to a physical store, or return their in-store purchase by sending it to your distribution center. With referenced refunds, you can offer omnichannel returns with a minimum of operational burden.<\/p>\n<p>Referenced refunds are <em>not<\/em> processed synchronously. When you send an API request for a referenced refund, the API response only confirms we received the request. We process the refund asynchronously, and inform you of the result through a <a href=\"#refund-webhook\">webhook<\/a>.<\/p>\n<p>Refunded amounts are deducted from the <a href=\"https:\/\/help.adyen.com\/knowledge\/payments\/refunds\/what-funds-do-i-have-available-for-refunds\" target=\"_blank\" rel=\"nofollow noopener noreferrer\" class=\"external-link no-image\">in-process funds<\/a> of the merchant account that processed the original payment. For example, if a sale took place on MerchantAccount_ECOM and the product is returned to MerchantAccount_POS, the funds are taken from the ECOM account.<\/p>\n<h2>Requirements<\/h2>\n<table>\n<thead>\n<tr>\n<th style=\"text-align: left;\">Requirement<\/th>\n<th style=\"text-align: left;\">Description<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"text-align: left;\"><strong>Integration type<\/strong><\/td>\n<td style=\"text-align: left;\">An <a href=\"\/pt\/online-payments\/build-your-integration\/\">online payments integration<\/a> and an <a href=\"\/pt\/point-of-sale\/what-we-support\/solutions\/\">in-person payments integration<\/a>.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><strong><a href=\"\/pt\/development-resources\/webhooks\">Webhooks<\/a><\/strong><\/td>\n<td style=\"text-align: left;\">Subscribe to Standard webhooks.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><strong>Setup steps<\/strong><\/td>\n<td style=\"text-align: left;\">Before you begin: <ul><li markdown=\"1\"><a href=\"#synchronize-your-back-end-systems\">Synchronize your back-end systems<\/a>.<\/li> <li>Ask 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> to enable refunds on the company level.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3>Synchronize your back-end systems<\/h3>\n<p>A requirement for omnichannel returns is that you have access to transaction information of all sales channels. For referenced refunds, this transaction information must include the PSP reference.<\/p>\n<p>Ideally you have a central database where you store information from both ecommerce and point-of-sale transactions. If you store the ecommerce and point-of-sale transaction information separately on different systems, these systems must be able read each other's data.<\/p>\n<h3 id=\"processing-refunds\">Enable on the company level<\/h3>\n<p>To process returns between multiple merchant accounts, in this case omnichannel returns between ecommerce and point-of-sale merchants accounts, you need to 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> to enable refunds on the company level. You can then use the  <a href=\"https:\/\/docs.adyen.com\/api-explorer\/Checkout\/latest\/post\/payments\/(paymentPspReference)\/refunds\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">\/payments\/{paymentPspReference}\/refunds<\/a> endpoint to submit returns for any merchant account under your company account. <\/p>\n<h2>Benefits<\/h2>\n<p>Omnichannel referenced refunds offer the following benefits.<\/p>\n<ul>\n<li>\n<p><strong>Simpler reconciliation<\/strong><br \/>\nOn our unified payments platform we assign a unique identifier to each transaction. This identifier is known as the <em>PSP&nbsp;reference<\/em>. When you issue a referenced refund, you specify the PSP reference of the original payment. In this way, you can match each refund against a payment, regardless of the sales channel. You have the complete audit trail of a payment including any full or partial refunds.<\/p>\n<\/li>\n<li>\n<p><strong>Better fraud protection<\/strong><br \/>\nA referenced refund returns the funds to the payment method that was used for the original payment, not to the card the shopper is presenting in the store or as cash. This helps combat various return fraud types like returning stolen merchandise, receipt fraud, and cross-retailer returns.<\/p>\n<\/li>\n<li>\n<p><strong>Never more than 100%<\/strong><br \/>\nWhen using referenced refunds, payments cannot be refunded multiple times, or for an amount exceeding 100% of the payment value.<\/p>\n<\/li>\n<\/ul>\n<h2 id=\"refund-authorization\">Refund authorization<\/h2>\n<p>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.<\/p>\n<p>Adyen supports this for:<\/p>\n<ul>\n<li>American Express<\/li>\n<li>Discover<\/li>\n<li>Mastercard<\/li>\n<li>Visa<\/li>\n<\/ul>\n<p>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.<\/p>\n<p>Issuers can decline a refund authorization for reasons like:<\/p>\n<ul>\n<li>Lost or expired card<\/li>\n<li>Invalid card number<\/li>\n<li>Closed account<\/li>\n<li>Suspected fraud<\/li>\n<\/ul>\n<p>When a refund authorization is declined, we still try to process the refund.<\/p>\n<h3>Pilot to prepare for 2026 changes<\/h3>\n<p>Adyen is currently running a pilot where declined refund authorizations are handled differently:<\/p>\n<ul>\n<li>We do not proceed with the refund. In your Customer Area, the transaction status remains <strong>Settled<\/strong>.<\/li>\n<li>\n<p>We inform you of the reason for the declined refund authorization in the <strong>REFUND<\/strong>, <strong>CANCEL_OR_REFUND<\/strong>, and <strong>REFUND_WITH_DATA<\/strong> webhooks. The <code>reason<\/code> parameter in the webhook will a have a value of <em>Authorisation for refund failed with response code<\/em> followed by the <a href=\"\/pt\/development-resources\/raw-acquirer-responses\/\">raw response<\/a> we received.<\/p>\n<div data-component-wrapper=\"code-sample\">\n<code-sample :title=\"'Reason for failed refund authorization in REFUND webhook'\" :id=\"''\" :code-data='[{\"language\":\"json\",\"tabTitle\":\"\",\"content\":\"{\\n  ...\\n    {\\n      \\\"NotificationRequestItem\\\": {\\n        ...\\n        \\\"eventCode\\\": \\\"REFUND\\\",\\n        \\\"reason\\\": \\\"Authorisation for refund failed with response code 46 : Closed account\\\",\\n        \\\"success\\\": \\\"false\\\"\\n      }\\n    }\\n  ]\\n}\"}]' :enable-copy-link-to-code-block=\"true\" :code-sample-card-size=\"'fullsize'\"><\/code-sample>\n<\/div>\n<\/li>\n<\/ul>\n<p>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.<\/p>\n<p>The behavior described above will become the default in 2026. If you want to prepare for that and participate in this pilot, reach out to your Adyen contact or to 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>. Note that some card networks charge a refund authorization fee.<\/p>\n<h2>Refund options<\/h2>\n<p>To issue a full or partial referenced refund, you have these options:<\/p>\n<ul>\n<li>\n<p><a href=\"#reversal-request\">Terminal API reversal request<\/a>: your POS app sends a Terminal API <code>ReversalRequest<\/code> to the payment terminal. The request includes the PSP reference of the original point-of-sale or ecommerce purchase. The terminal generates a receipt, and the funds are returned to the original card or other payment method without the need for the customer to present a card to the payment terminal.<\/p>\n<\/li>\n<li>\n<p><a href=\"#refunds-endpoint\">Server-to-server refund<\/a>: you make a POST request to the <code>\/payments\/{paymentPspReference}\/refunds<\/code> endpoint, where <code>paymentPspReference<\/code> is the PSP reference of the original point-of-sale or ecommerce purchase.<\/p>\n<\/li>\n<li>\n<p><a href=\"\/pt\/account\/manage-payments#refund-a-payment\">Refund from your Customer Area<\/a>: this is a good option if you do not issue refunds often. We describe this in the <em>Account<\/em> section of our documentation.<\/p>\n<\/li>\n<\/ul>\n<h2 id=\"reversal-request\">Send a Terminal API reversal request<\/h2>\n<p>When you make a POS payment, the Terminal API response returns the <a href=\"\/pt\/point-of-sale\/design-your-integration\/terminal-api#response-body\">transaction identifier<\/a> of the payment in the format <code>tenderReference.pspReference<\/code>. To make a referenced refund, you specify this transaction identifier in your refund request.<\/p>\n<p>However, the <code>tenderReference<\/code> is generated by the payment terminal, and is missing for an ecommerce payment. In that case you include only the PSP reference, in the format <code>.pspReference<\/code>.<\/p>\n<p>You can make a:<\/p>\n<ul>\n<li><strong>Full refund<\/strong> to return the total value of the purchase to the shopper.<\/li>\n<li><strong>Partial refund<\/strong> to return part of the purchase to the shopper. For example, when a shopper returns one of the items they purchased. You can also make multiple partial refunds. For example, when a shopper returns several items at different times.<\/li>\n<\/ul>\n<p>Select a tab to see the parameters that you need to specify for a full referenced refund, or a partial referenced refund.<\/p>\n\n<div id=\"tabVmcBi\">\n    <div data-component-wrapper=\"tabs\">\n        <tabs\n                        :items=\"[{&quot;title&quot;:&quot;Full refund&quot;,&quot;content&quot;:&quot;\\n&lt;p&gt;Here we describe the &lt;strong&gt;basic&lt;\\\/strong&gt; referenced refund request for the full amount. To &lt;a href=\\&quot;#refund-ecommerce-payment\\&quot;&gt;refund an ecommerce payment&lt;\\\/a&gt;, the request is a little different.&lt;\\\/p&gt;\\n&lt;ol&gt;\\n&lt;li&gt;\\n&lt;p&gt;Get the &lt;code&gt;TransactionID&lt;\\\/code&gt; and the &lt;code&gt;TimeStamp&lt;\\\/code&gt; of the original payment. You received these values in the payment response, in the &lt;code&gt;POIData.POITransactionID&lt;\\\/code&gt; object.&lt;\\\/p&gt;\\n&lt;\\\/li&gt;\\n&lt;li&gt;\\n&lt;p&gt;Make a POST request to a &lt;a href=\\&quot;\\\/pt\\\/point-of-sale\\\/design-your-integration\\\/terminal-api#endpoints\\&quot;&gt;Terminal API endpoint&lt;\\\/a&gt;, specifying:&lt;\\\/p&gt;\\n&lt;ul&gt;\\n&lt;li&gt;\\n&lt;p&gt;The standard &lt;a href=\\&quot;\\\/pt\\\/point-of-sale\\\/design-your-integration\\\/terminal-api#request-message-header\\&quot;&gt;\\n  &lt;code&gt;SaleToPOIRequest.MessageHeader&lt;\\\/code&gt;\\n&lt;\\\/a&gt; object, with &lt;code&gt;MessageClass&lt;\\\/code&gt; set to &lt;span translate=\\&quot;no\\&quot;&gt;&lt;strong&gt;Service&lt;\\\/strong&gt;&lt;\\\/span&gt; and &lt;code&gt;MessageCategory&lt;\\\/code&gt; set to &lt;span translate=\\&quot;no\\&quot;&gt;&lt;strong&gt;Reversal&lt;\\\/strong&gt;&lt;\\\/span&gt;.&lt;\\\/p&gt;\\n&lt;table&gt;\\n&lt;thead&gt;\\n&lt;tr&gt;\\n&lt;th style=\\&quot;text-align: left;\\&quot;&gt;Parameter&lt;\\\/th&gt;\\n&lt;th style=\\&quot;text-align: center;\\&quot;&gt;Required&lt;\\\/th&gt;\\n&lt;th style=\\&quot;text-align: left;\\&quot;&gt;Description&lt;\\\/th&gt;\\n&lt;\\\/tr&gt;\\n&lt;\\\/thead&gt;\\n&lt;tbody&gt;\\n&lt;tr&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;&lt;code&gt;ProtocolVersion&lt;\\\/code&gt;&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: center;\\&quot;&gt;&lt;img title=\\&quot;-white_check_mark-\\&quot; alt=\\&quot;-white_check_mark-\\&quot; class=\\&quot;smileys\\&quot; src=\\&quot;\\\/user\\\/data\\\/smileys\\\/emoji\\\/white_check_mark.png\\&quot; \\\/&gt;&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;&lt;strong&gt;3.0&lt;\\\/strong&gt;&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;&lt;code&gt;MessageClass&lt;\\\/code&gt;&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: center;\\&quot;&gt;&lt;img title=\\&quot;-white_check_mark-\\&quot; alt=\\&quot;-white_check_mark-\\&quot; class=\\&quot;smileys\\&quot; src=\\&quot;\\\/user\\\/data\\\/smileys\\\/emoji\\\/white_check_mark.png\\&quot; \\\/&gt;&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;&lt;span translate=\\&quot;no\\&quot;&gt;&lt;strong&gt;Service&lt;\\\/strong&gt;&lt;\\\/span&gt;&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;&lt;code&gt;MessageCategory&lt;\\\/code&gt;&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: center;\\&quot;&gt;&lt;img title=\\&quot;-white_check_mark-\\&quot; alt=\\&quot;-white_check_mark-\\&quot; class=\\&quot;smileys\\&quot; src=\\&quot;\\\/user\\\/data\\\/smileys\\\/emoji\\\/white_check_mark.png\\&quot; \\\/&gt;&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;&lt;span translate=\\&quot;no\\&quot;&gt;&lt;strong&gt;Reversal&lt;\\\/strong&gt;&lt;\\\/span&gt;&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;&lt;code&gt;MessageType&lt;\\\/code&gt;&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: center;\\&quot;&gt;&lt;img title=\\&quot;-white_check_mark-\\&quot; alt=\\&quot;-white_check_mark-\\&quot; class=\\&quot;smileys\\&quot; src=\\&quot;\\\/user\\\/data\\\/smileys\\\/emoji\\\/white_check_mark.png\\&quot; \\\/&gt;&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;&lt;span translate=\\&quot;no\\&quot;&gt;&lt;strong&gt;Request&lt;\\\/strong&gt;&lt;\\\/span&gt;&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;&lt;code&gt;ServiceID&lt;\\\/code&gt;&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: center;\\&quot;&gt;&lt;img title=\\&quot;-white_check_mark-\\&quot; alt=\\&quot;-white_check_mark-\\&quot; class=\\&quot;smileys\\&quot; src=\\&quot;\\\/user\\\/data\\\/smileys\\\/emoji\\\/white_check_mark.png\\&quot; \\\/&gt;&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;Your unique ID for this request, consisting of 1-10 alphanumeric characters. Must be unique within the last 48 hours for the terminal (&lt;code&gt;POIID&lt;\\\/code&gt;) being used.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;&lt;code&gt;SaleID&lt;\\\/code&gt;&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: center;\\&quot;&gt;&lt;img title=\\&quot;-white_check_mark-\\&quot; alt=\\&quot;-white_check_mark-\\&quot; class=\\&quot;smileys\\&quot; src=\\&quot;\\\/user\\\/data\\\/smileys\\\/emoji\\\/white_check_mark.png\\&quot; \\\/&gt;&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;Your unique ID for the POS system component to send this request from.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;&lt;code&gt;POIID&lt;\\\/code&gt;&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: center;\\&quot;&gt;&lt;img title=\\&quot;-white_check_mark-\\&quot; alt=\\&quot;-white_check_mark-\\&quot; class=\\&quot;smileys\\&quot; src=\\&quot;\\\/user\\\/data\\\/smileys\\\/emoji\\\/white_check_mark.png\\&quot; \\\/&gt;&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;The unique ID of the terminal to send this request to. Format: &lt;em&gt;[device model]-[serial number]&lt;\\\/em&gt;.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;\\\/tbody&gt;\\n&lt;\\\/table&gt;\\n&lt;\\\/li&gt;\\n&lt;li&gt;\\n&lt;p&gt;The  &lt;a href=\\&quot;https:\\\/\\\/docs.adyen.com\\\/api-explorer\\\/terminal-api\\\/latest\\\/post\\\/reversal\\&quot; class=\\&quot;codeLabel  external-link no-image\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot;&gt;ReversalRequest&lt;\\\/a&gt; object with:&lt;\\\/p&gt;\\n&lt;table&gt;\\n&lt;thead&gt;\\n&lt;tr&gt;\\n&lt;th style=\\&quot;text-align: left;\\&quot;&gt;Parameter&lt;\\\/th&gt;\\n&lt;th style=\\&quot;text-align: center;\\&quot;&gt;Required&lt;\\\/th&gt;\\n&lt;th style=\\&quot;text-align: left;\\&quot;&gt;Description&lt;\\\/th&gt;\\n&lt;\\\/tr&gt;\\n&lt;\\\/thead&gt;\\n&lt;tbody&gt;\\n&lt;tr&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;&lt;code&gt;OriginalPOITransaction.POITransactionID&lt;\\\/code&gt;&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: center;\\&quot;&gt;&lt;img title=\\&quot;-white_check_mark-\\&quot; alt=\\&quot;-white_check_mark-\\&quot; class=\\&quot;smileys\\&quot; src=\\&quot;\\\/user\\\/data\\\/smileys\\\/emoji\\\/white_check_mark.png\\&quot; \\\/&gt;&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;An object with: &lt;ul&gt;&lt;li markdown=\\&quot;1\\&quot;&gt;&lt;code&gt;TransactionID&lt;\\\/code&gt;: Transaction identifier of the original payment in the format &lt;code&gt;tenderReference.pspReference&lt;\\\/code&gt;. For example, &lt;strong&gt;BV0q001643892070000.VK9DRSLLRCQ2WN82&lt;\\\/strong&gt;&lt;\\\/li&gt; &lt;li markdown=\\&quot;1\\&quot;&gt;&lt;code&gt;TimeStamp&lt;\\\/code&gt;: Date and time in &lt;a href=\\&quot;https:\\\/\\\/en.wikipedia.org\\\/wiki\\\/ISO_8601#Coordinated_Universal_Time_(UTC)\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;UTC format&lt;\\\/a&gt; of the original payment. For example, &lt;strong&gt;2000-01-01T00:00:00.000Z&lt;\\\/strong&gt;&lt;\\\/li&gt;&lt;\\\/ul&gt;&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;&lt;code&gt;ReversalReason&lt;\\\/code&gt;&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: center;\\&quot;&gt;&lt;img title=\\&quot;-white_check_mark-\\&quot; alt=\\&quot;-white_check_mark-\\&quot; class=\\&quot;smileys\\&quot; src=\\&quot;\\\/user\\\/data\\\/smileys\\\/emoji\\\/white_check_mark.png\\&quot; \\\/&gt;&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;Set to &lt;span translate=\\&quot;no\\&quot;&gt;&lt;strong&gt;MerchantCancel&lt;\\\/strong&gt;&lt;\\\/span&gt;.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;\\\/tbody&gt;\\n&lt;\\\/table&gt;\\n&lt;\\\/li&gt;\\n&lt;\\\/ul&gt;\\n&lt;p&gt;The following example shows how to make a full referenced refund.&lt;\\\/p&gt;\\n&lt;div data-component-wrapper=\\&quot;code-sample\\&quot;&gt;\\n&lt;code-sample :title=\\&quot;&#039;&#039;\\&quot; :id=\\&quot;&#039;full-sample_0&#039;\\&quot; :code-data=&#039;[{\\&quot;language\\&quot;:\\&quot;json\\&quot;,\\&quot;tabTitle\\&quot;:\\&quot;JSON\\&quot;,\\&quot;content\\&quot;:\\&quot;{\\\\n    \\\\\\&quot;SaleToPOIRequest\\\\\\&quot;:{\\\\n        \\\\\\&quot;MessageHeader\\\\\\&quot;:{\\\\n            \\\\\\&quot;ProtocolVersion\\\\\\&quot;:\\\\\\&quot;3.0\\\\\\&quot;,\\\\n            \\\\\\&quot;MessageClass\\\\\\&quot;:\\\\\\&quot;Service\\\\\\&quot;,\\\\n            \\\\\\&quot;MessageCategory\\\\\\&quot;:\\\\\\&quot;Reversal\\\\\\&quot;,\\\\n            \\\\\\&quot;MessageType\\\\\\&quot;:\\\\\\&quot;Request\\\\\\&quot;,\\\\n            \\\\\\&quot;SaleID\\\\\\&quot;:\\\\\\&quot;POSSystemID12345\\\\\\&quot;,\\\\n            \\\\\\&quot;ServiceID\\\\\\&quot;:\\\\\\&quot;207111107\\\\\\&quot;,\\\\n            \\\\\\&quot;POIID\\\\\\&quot;:\\\\\\&quot;V400m-324688179\\\\\\&quot;\\\\n        },\\\\n        \\\\\\&quot;ReversalRequest\\\\\\&quot;:{\\\\n            \\\\\\&quot;OriginalPOITransaction\\\\\\&quot;:{\\\\n                \\\\\\&quot;POITransactionID\\\\\\&quot;:{\\\\n                    \\\\\\&quot;TransactionID\\\\\\&quot;:\\\\\\&quot;7JLX001566393198001.NC6HT9CRT65ZGN82\\\\\\&quot;,\\\\n                    \\\\\\&quot;TimeStamp\\\\\\&quot;:\\\\\\&quot;2019-03-07T10:11:04+00:00\\\\\\&quot;\\\\n                }\\\\n            },\\\\n            \\\\\\&quot;ReversalReason\\\\\\&quot;:\\\\\\&quot;MerchantCancel\\\\\\&quot;\\\\n        }\\\\n    }\\\\n}\\&quot;},{\\&quot;language\\&quot;:\\&quot;java\\&quot;,\\&quot;tabTitle\\&quot;:\\&quot;Java\\&quot;,\\&quot;content\\&quot;:\\&quot;String saleID = \\\\\\&quot;YOUR_CASH_REGISTER_ID\\\\\\&quot;;\\\\nString serviceID = \\\\\\&quot;YOUR_UNIQUE_ATTEMPT_ID\\\\\\&quot;;\\\\nString POIID = \\\\\\&quot;YOUR_TERMINAL_ID\\\\\\&quot;;\\\\nString transactionID = \\\\\\&quot;YOUR_UNIQUE_TRANSACTION_ID\\\\\\&quot;;\\\\n\\\\nSaleToPOIRequest saleToPOIRequest = new SaleToPOIRequest();\\\\nMessageHeader messageHeader = new MessageHeader();\\\\nmessageHeader.setProtocolVersion(\\\\\\&quot;3.0\\\\\\&quot;);\\\\nmessageHeader.setMessageClass( MessageClassType.SERVICE );\\\\nmessageHeader.setMessageCategory( MessageCategoryType.REVERSAL );\\\\nmessageHeader.setMessageType( MessageType.REQUEST );\\\\nmessageHeader.setSaleID(saleID);\\\\nmessageHeader.setServiceID(serviceID);\\\\nmessageHeader.setPOIID(POIID);\\\\nsaleToPOIRequest.setMessageHeader(messageHeader);\\\\n\\\\nReversalRequest reversalRequest = new ReversalRequest();\\\\nOriginalPOITransaction originalPOITransaction = new OriginalPOITransaction();\\\\nTransactionIdentification pOITransactionID = new TransactionIdentification();\\\\npOITransactionID.setTransactionID(transactionID);\\\\npOITransactionID.setTimeStamp(DatatypeFactory.newInstance().newXMLGregorianCalendar(new GregorianCalendar()));\\\\noriginalPOITransaction.setPOITransactionID(pOITransactionID);\\\\nreversalRequest.setOriginalPOITransaction(originalPOITransaction);\\\\nreversalRequest.setReversalReason( ReversalReasonType.MERCHANT_CANCEL );\\\\nsaleToPOIRequest.setReversalRequest(reversalRequest);\\\\nterminalAPIRequest.setSaleToPOIRequest(saleToPOIRequest);\\&quot;}]&#039; :enable-copy-link-to-code-block=\\&quot;true\\&quot; :code-sample-card-size=\\&quot;&#039;fullsize&#039;\\&quot;&gt;&lt;\\\/code-sample&gt;\\n&lt;\\\/div&gt;\\n&lt;p&gt;The payment terminal shows a waiting screen until you receive the response.&lt;br \\\/&gt;\\n&lt;img src=\\&quot;\\\/unified-commerce\\\/referenced-refunds\\\/WaitingScreen.svg\\&quot; alt=\\&quot;\\&quot; \\\/&gt;&lt;\\\/p&gt;\\n&lt;\\\/li&gt;\\n&lt;li&gt;\\n&lt;p&gt;When you receive the  &lt;a href=\\&quot;https:\\\/\\\/docs.adyen.com\\\/api-explorer\\\/terminal-api\\\/latest\\\/post\\\/reversal\\\/#responses-200\\&quot; class=\\&quot;codeLabel  external-link no-image\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot;&gt;ReversalResponse&lt;\\\/a&gt;, note the following:&lt;\\\/p&gt;\\n&lt;table&gt;\\n&lt;thead&gt;\\n&lt;tr&gt;\\n&lt;th style=\\&quot;text-align: left;\\&quot;&gt;Parameter&lt;\\\/th&gt;\\n&lt;th style=\\&quot;text-align: left;\\&quot;&gt;Description&lt;\\\/th&gt;\\n&lt;\\\/tr&gt;\\n&lt;\\\/thead&gt;\\n&lt;tbody&gt;\\n&lt;tr&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;&lt;code&gt;Response.Result&lt;\\\/code&gt;&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;&lt;span translate=\\&quot;no\\&quot;&gt;&lt;strong&gt;Success&lt;\\\/strong&gt;&lt;\\\/span&gt; means we received your request. The refund itself will be processed asynchronously.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;&lt;code&gt;POIData.POITransactionID.TransactionID&lt;\\\/code&gt;&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;The PSP reference for this refund request.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;&lt;code&gt;PaymentReceipt&lt;\\\/code&gt;&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;The generated receipt data. This includes &lt;span translate=\\&quot;no\\&quot;&gt;&lt;strong&gt;REFUND REQUESTED&lt;\\\/strong&gt;&lt;\\\/span&gt;.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;&lt;code&gt;Response.AdditionalResponse&lt;\\\/code&gt;&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;This includes: &lt;ul&gt;&lt;li markdown=\\&quot;1\\&quot;&gt;&lt;code&gt;posOriginalAmountValue&lt;\\\/code&gt;: The amount (in &lt;a href=\\&quot;\\\/pt\\\/development-resources\\\/currency-codes\\&quot;&gt;minor units&lt;\\\/a&gt;) of the original payment.&lt;\\\/li&gt; &lt;li markdown=\\&quot;1\\&quot;&gt;&lt;code&gt;posAuthAmountValue&lt;\\\/code&gt;: The refund amount (in minor units) that we will try to get authorized.&lt;\\\/li&gt; &lt;li markdown=\\&quot;1\\&quot;&gt;&lt;code&gt;pspReference&lt;\\\/code&gt;: The PSP reference for this refund request.&lt;\\\/li&gt;&lt;\\\/ul&gt;&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;\\\/tbody&gt;\\n&lt;\\\/table&gt;\\n&lt;div data-component-wrapper=\\&quot;code-sample\\&quot;&gt;\\n&lt;code-sample :title=\\&quot;&#039;Response when we received your full reversal request&#039;\\&quot; :id=\\&quot;&#039;&#039;\\&quot; :code-data=&#039;[{\\&quot;language\\&quot;:\\&quot;json\\&quot;,\\&quot;tabTitle\\&quot;:\\&quot;\\&quot;,\\&quot;content\\&quot;:\\&quot;{\\\\n    \\\\\\&quot;SaleToPOIResponse\\\\\\&quot;: {\\\\n        \\\\\\&quot;MessageHeader\\\\\\&quot;: {\\\\n            \\\\\\&quot;MessageCategory\\\\\\&quot;: \\\\\\&quot;Reversal\\\\\\&quot;,\\\\n            \\\\\\&quot;MessageClass\\\\\\&quot;: \\\\\\&quot;Service\\\\\\&quot;,\\\\n            \\\\\\&quot;MessageType\\\\\\&quot;: \\\\\\&quot;Response\\\\\\&quot;,\\\\n            \\\\\\&quot;POIID\\\\\\&quot;: \\\\\\&quot;V400m-324688179\\\\\\&quot;,\\\\n            \\\\\\&quot;ProtocolVersion\\\\\\&quot;: \\\\\\&quot;3.0\\\\\\&quot;,\\\\n            \\\\\\&quot;SaleID\\\\\\&quot;: \\\\\\&quot;POSSystemID12345\\\\\\&quot;,\\\\n            \\\\\\&quot;ServiceID\\\\\\&quot;: \\\\\\&quot;207111107\\\\\\&quot;\\\\n        },\\\\n        \\\\\\&quot;ReversalResponse\\\\\\&quot;: {\\\\n            \\\\\\&quot;POIData\\\\\\&quot;: {\\\\n                \\\\\\&quot;POITransactionID\\\\\\&quot;: {\\\\n                    \\\\\\&quot;TimeStamp\\\\\\&quot;: \\\\\\&quot;2022-02-03T15:04:15.004Z\\\\\\&quot;,\\\\n                    \\\\\\&quot;TransactionID\\\\\\&quot;: \\\\\\&quot;TF995R5G6L2GWR82\\\\\\&quot;\\\\n                }\\\\n            },\\\\n            \\\\\\&quot;PaymentReceipt\\\\\\&quot;: [...],\\\\n            \\\\\\&quot;Response\\\\\\&quot;: {\\\\n                \\\\\\&quot;AdditionalResponse\\\\\\&quot;: \\\\\\&quot;tid=47069832&amp;amp;transactionType=GOODS_SERVICES&amp;amp;posadditionalamounts.originalAmountValue=1025&amp;amp;giftcardIndicator=false&amp;amp;posAmountGratuityValue=0&amp;amp;pspReference=TF995R5G6L2GWR82&amp;amp;store=YOUR_STOREL&amp;amp;iso8601TxDate=2022-02-03T15%3a04%3a13.0000000%2b0000&amp;amp;posOriginalAmountValue=1025&amp;amp;txtime=16%3a04%3a13&amp;amp;paymentMethod=mc&amp;amp;txdate=03-02-2022&amp;amp;merchantReference=2022-02-03%2016%3a04%3a13&amp;amp;posadditionalamounts.originalAmountCurrency=EUR&amp;amp;transactionReferenceNumber=TF995R5G6L2GWR82&amp;amp;posAuthAmountCurrency=EUR&amp;amp;posAmountCashbackValue=0&amp;amp;posEntryMode=CLESS_CHIP&amp;amp;posAuthAmountValue=1025\\\\\\&quot;,\\\\n                \\\\\\&quot;Result\\\\\\&quot;: \\\\\\&quot;Success\\\\\\&quot;\\\\n            }\\\\n        }\\\\n    }\\\\n}\\&quot;}]&#039; :enable-copy-link-to-code-block=\\&quot;true\\&quot; :code-sample-card-size=\\&quot;&#039;fullsize&#039;\\&quot;&gt;&lt;\\\/code-sample&gt;\\n&lt;\\\/div&gt;\\n&lt;p&gt;If your request failed, the  &lt;a href=\\&quot;https:\\\/\\\/docs.adyen.com\\\/api-explorer\\\/terminal-api\\\/latest\\\/post\\\/reversal\\\/#responses-200-Response\\&quot; class=\\&quot;codeLabel  external-link no-image\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot;&gt;ReversalResponse.Response&lt;\\\/a&gt; contains:&lt;\\\/p&gt;\\n&lt;ul&gt;\\n&lt;li&gt;&lt;code&gt;Result&lt;\\\/code&gt;: &lt;span translate=\\&quot;no\\&quot;&gt;&lt;strong&gt;Failure&lt;\\\/strong&gt;&lt;\\\/span&gt;&lt;\\\/li&gt;\\n&lt;li&gt;&lt;code&gt;AdditionalResponse&lt;\\\/code&gt;: This includes a &lt;code&gt;message&lt;\\\/code&gt; explaining why the request failed. For example:\\n&lt;ul&gt;\\n&lt;li&gt;&lt;em&gt;Original pspReference required for this operation&lt;\\\/em&gt;: Messages like this tell you how to fix the request so you can try again.&lt;\\\/li&gt;\\n&lt;li&gt;&lt;em&gt;Transaction is already voided&lt;\\\/em&gt;: This message tells you that we already received a full reversal request for the original transaction. &lt;\\\/li&gt;\\n&lt;\\\/ul&gt;&lt;\\\/li&gt;\\n&lt;\\\/ul&gt;\\n&lt;!-- list separator --&gt;\\n&lt;\\\/li&gt;\\n&lt;li&gt;\\n&lt;p&gt;Wait for the &lt;a href=\\&quot;#cancel-or-refund-webhook\\&quot;&gt;CANCEL_OR_REFUND webhook&lt;\\\/a&gt; to learn the outcome. Refunds are always processed asynchronously. If successful, the refund is issued to the shopper&#039;s account.&lt;\\\/p&gt;\\n&quot;,&quot;altTitle&quot;:&quot;full&quot;,&quot;oldTabId&quot;:&quot;full_refund_0_1&quot;,&quot;relation&quot;:&quot;full&quot;},{&quot;title&quot;:&quot;Partial refund&quot;,&quot;content&quot;:&quot;\\n&lt;p&gt;Here we describe the &lt;strong&gt;basic&lt;\\\/strong&gt; referenced refund request for a partial amount. To &lt;a href=\\&quot;#refund-ecommerce-payment\\&quot;&gt;refund an ecommerce payment&lt;\\\/a&gt;, the request is a little different.&lt;\\\/p&gt;\\n&lt;ol&gt;\\n&lt;li&gt;\\n&lt;p&gt;Get the &lt;code&gt;TransactionID&lt;\\\/code&gt; and the &lt;code&gt;TimeStamp&lt;\\\/code&gt; of the original payment. You received these values in the payment response, in the &lt;code&gt;POIData.POITransactionID&lt;\\\/code&gt; object.&lt;\\\/p&gt;\\n&lt;\\\/li&gt;\\n&lt;li&gt;\\n&lt;p&gt;Make a POST request to a &lt;a href=\\&quot;\\\/pt\\\/point-of-sale\\\/design-your-integration\\\/terminal-api#endpoints\\&quot;&gt;Terminal API endpoint&lt;\\\/a&gt;, specifying:&lt;\\\/p&gt;\\n&lt;ul&gt;\\n&lt;li&gt;\\n&lt;p&gt;The standard &lt;a href=\\&quot;\\\/pt\\\/point-of-sale\\\/design-your-integration\\\/terminal-api#request-message-header\\&quot;&gt;\\n  &lt;code&gt;SaleToPOIRequest.MessageHeader&lt;\\\/code&gt;\\n&lt;\\\/a&gt; object, with &lt;code&gt;MessageClass&lt;\\\/code&gt; set to &lt;span translate=\\&quot;no\\&quot;&gt;&lt;strong&gt;Service&lt;\\\/strong&gt;&lt;\\\/span&gt; and &lt;code&gt;MessageCategory&lt;\\\/code&gt; set to &lt;span translate=\\&quot;no\\&quot;&gt;&lt;strong&gt;Reversal&lt;\\\/strong&gt;&lt;\\\/span&gt;.&lt;\\\/p&gt;\\n&lt;table&gt;\\n&lt;thead&gt;\\n&lt;tr&gt;\\n&lt;th style=\\&quot;text-align: left;\\&quot;&gt;Parameter&lt;\\\/th&gt;\\n&lt;th style=\\&quot;text-align: center;\\&quot;&gt;Required&lt;\\\/th&gt;\\n&lt;th style=\\&quot;text-align: left;\\&quot;&gt;Description&lt;\\\/th&gt;\\n&lt;\\\/tr&gt;\\n&lt;\\\/thead&gt;\\n&lt;tbody&gt;\\n&lt;tr&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;&lt;code&gt;ProtocolVersion&lt;\\\/code&gt;&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: center;\\&quot;&gt;&lt;img title=\\&quot;-white_check_mark-\\&quot; alt=\\&quot;-white_check_mark-\\&quot; class=\\&quot;smileys\\&quot; src=\\&quot;\\\/user\\\/data\\\/smileys\\\/emoji\\\/white_check_mark.png\\&quot; \\\/&gt;&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;&lt;strong&gt;3.0&lt;\\\/strong&gt;&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;&lt;code&gt;MessageClass&lt;\\\/code&gt;&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: center;\\&quot;&gt;&lt;img title=\\&quot;-white_check_mark-\\&quot; alt=\\&quot;-white_check_mark-\\&quot; class=\\&quot;smileys\\&quot; src=\\&quot;\\\/user\\\/data\\\/smileys\\\/emoji\\\/white_check_mark.png\\&quot; \\\/&gt;&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;&lt;span translate=\\&quot;no\\&quot;&gt;&lt;strong&gt;Service&lt;\\\/strong&gt;&lt;\\\/span&gt;&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;&lt;code&gt;MessageCategory&lt;\\\/code&gt;&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: center;\\&quot;&gt;&lt;img title=\\&quot;-white_check_mark-\\&quot; alt=\\&quot;-white_check_mark-\\&quot; class=\\&quot;smileys\\&quot; src=\\&quot;\\\/user\\\/data\\\/smileys\\\/emoji\\\/white_check_mark.png\\&quot; \\\/&gt;&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;&lt;span translate=\\&quot;no\\&quot;&gt;&lt;strong&gt;Reversal&lt;\\\/strong&gt;&lt;\\\/span&gt;&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;&lt;code&gt;MessageType&lt;\\\/code&gt;&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: center;\\&quot;&gt;&lt;img title=\\&quot;-white_check_mark-\\&quot; alt=\\&quot;-white_check_mark-\\&quot; class=\\&quot;smileys\\&quot; src=\\&quot;\\\/user\\\/data\\\/smileys\\\/emoji\\\/white_check_mark.png\\&quot; \\\/&gt;&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;&lt;span translate=\\&quot;no\\&quot;&gt;&lt;strong&gt;Request&lt;\\\/strong&gt;&lt;\\\/span&gt;&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;&lt;code&gt;ServiceID&lt;\\\/code&gt;&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: center;\\&quot;&gt;&lt;img title=\\&quot;-white_check_mark-\\&quot; alt=\\&quot;-white_check_mark-\\&quot; class=\\&quot;smileys\\&quot; src=\\&quot;\\\/user\\\/data\\\/smileys\\\/emoji\\\/white_check_mark.png\\&quot; \\\/&gt;&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;Your unique ID for this request, consisting of 1-10 alphanumeric characters. Must be unique within the last 48 hours for the terminal (&lt;code&gt;POIID&lt;\\\/code&gt;) being used.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;&lt;code&gt;SaleID&lt;\\\/code&gt;&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: center;\\&quot;&gt;&lt;img title=\\&quot;-white_check_mark-\\&quot; alt=\\&quot;-white_check_mark-\\&quot; class=\\&quot;smileys\\&quot; src=\\&quot;\\\/user\\\/data\\\/smileys\\\/emoji\\\/white_check_mark.png\\&quot; \\\/&gt;&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;Your unique ID for the POS system component to send this request from.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;&lt;code&gt;POIID&lt;\\\/code&gt;&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: center;\\&quot;&gt;&lt;img title=\\&quot;-white_check_mark-\\&quot; alt=\\&quot;-white_check_mark-\\&quot; class=\\&quot;smileys\\&quot; src=\\&quot;\\\/user\\\/data\\\/smileys\\\/emoji\\\/white_check_mark.png\\&quot; \\\/&gt;&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;The unique ID of the terminal to send this request to. Format: &lt;em&gt;[device model]-[serial number]&lt;\\\/em&gt;.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;\\\/tbody&gt;\\n&lt;\\\/table&gt;\\n&lt;\\\/li&gt;\\n&lt;li&gt;\\n&lt;p&gt;The  &lt;a href=\\&quot;https:\\\/\\\/docs.adyen.com\\\/api-explorer\\\/terminal-api\\\/latest\\\/post\\\/reversal\\&quot; class=\\&quot;codeLabel  external-link no-image\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot;&gt;ReversalRequest&lt;\\\/a&gt; object with:&lt;\\\/p&gt;\\n&lt;table&gt;\\n&lt;thead&gt;\\n&lt;tr&gt;\\n&lt;th style=\\&quot;text-align: left;\\&quot;&gt;Parameter&lt;\\\/th&gt;\\n&lt;th style=\\&quot;text-align: center;\\&quot;&gt;Required&lt;\\\/th&gt;\\n&lt;th style=\\&quot;text-align: left;\\&quot;&gt;Description&lt;\\\/th&gt;\\n&lt;\\\/tr&gt;\\n&lt;\\\/thead&gt;\\n&lt;tbody&gt;\\n&lt;tr&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;&lt;code&gt;OriginalPOITransaction.POITransactionID&lt;\\\/code&gt;&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: center;\\&quot;&gt;&lt;img title=\\&quot;-white_check_mark-\\&quot; alt=\\&quot;-white_check_mark-\\&quot; class=\\&quot;smileys\\&quot; src=\\&quot;\\\/user\\\/data\\\/smileys\\\/emoji\\\/white_check_mark.png\\&quot; \\\/&gt;&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;An object with: &lt;ul&gt;&lt;li markdown=\\&quot;1\\&quot;&gt;&lt;code&gt;TransactionID&lt;\\\/code&gt;: Transaction identifier of the original payment in the format &lt;code&gt;tenderReference.pspReference&lt;\\\/code&gt;. For example, &lt;strong&gt;BV0q001643892070000.VK9DRSLLRCQ2WN82&lt;\\\/strong&gt;&lt;\\\/li&gt; &lt;li markdown=\\&quot;1\\&quot;&gt;&lt;code&gt;TimeStamp&lt;\\\/code&gt;: date and time in &lt;a href=\\&quot;https:\\\/\\\/en.wikipedia.org\\\/wiki\\\/ISO_8601#Coordinated_Universal_Time_(UTC)\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;UTC format&lt;\\\/a&gt; of the original payment. For example, &lt;strong&gt;2000-01-01T00:00:00.000Z&lt;\\\/strong&gt;&lt;\\\/li&gt;&lt;\\\/ul&gt;&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;&lt;code&gt;ReversalReason&lt;\\\/code&gt;&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: center;\\&quot;&gt;&lt;img title=\\&quot;-white_check_mark-\\&quot; alt=\\&quot;-white_check_mark-\\&quot; class=\\&quot;smileys\\&quot; src=\\&quot;\\\/user\\\/data\\\/smileys\\\/emoji\\\/white_check_mark.png\\&quot; \\\/&gt;&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;Set to &lt;span translate=\\&quot;no\\&quot;&gt;&lt;strong&gt;MerchantCancel&lt;\\\/strong&gt;&lt;\\\/span&gt;.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;&lt;code&gt;ReversedAmount&lt;\\\/code&gt;&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: center;\\&quot;&gt;&lt;img title=\\&quot;-white_check_mark-\\&quot; alt=\\&quot;-white_check_mark-\\&quot; class=\\&quot;smileys\\&quot; src=\\&quot;\\\/user\\\/data\\\/smileys\\\/emoji\\\/white_check_mark.png\\&quot; \\\/&gt;&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;The amount (provided as a number, not a string) being returned to the shopper in the partial refund. Must be smaller than or equal to the initial payment amount.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;&lt;code&gt;SaleData.SaleToAcquirerData&lt;\\\/code&gt;&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: center;\\&quot;&gt;&lt;img title=\\&quot;-white_check_mark-\\&quot; alt=\\&quot;-white_check_mark-\\&quot; class=\\&quot;smileys\\&quot; src=\\&quot;\\\/user\\\/data\\\/smileys\\\/emoji\\\/white_check_mark.png\\&quot; \\\/&gt;&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;The currency of the refund, in the format &lt;code&gt;currency=ABC&lt;\\\/code&gt; where &lt;code&gt;ABC&lt;\\\/code&gt; is the three-letter &lt;a href=\\&quot;\\\/pt\\\/development-resources\\\/currency-codes\\&quot;&gt;currency code&lt;\\\/a&gt;. This must match the currency of the original payment.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;&lt;code&gt;SaleData.SaleTransactionID&lt;\\\/code&gt;&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: center;\\&quot;&gt;&lt;img title=\\&quot;-white_check_mark-\\&quot; alt=\\&quot;-white_check_mark-\\&quot; class=\\&quot;smileys\\&quot; src=\\&quot;\\\/user\\\/data\\\/smileys\\\/emoji\\\/white_check_mark.png\\&quot; \\\/&gt;&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;An object with: &lt;ul&gt;&lt;li markdown=\\&quot;1\\&quot;&gt;&lt;code&gt;TransactionID&lt;\\\/code&gt;: your reference for the refund. In your Customer Area and Adyen reports, this will show as the &lt;strong&gt;merchant reference&lt;\\\/strong&gt;.&lt;\\\/li&gt; &lt;li markdown=\\&quot;1\\&quot;&gt;&lt;code&gt;TimeStamp&lt;\\\/code&gt;: date and time in &lt;a href=\\&quot;https:\\\/\\\/en.wikipedia.org\\\/wiki\\\/ISO_8601#Coordinated_Universal_Time_(UTC)\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;UTC format&lt;\\\/a&gt; of the refund.&lt;\\\/li&gt;&lt;\\\/ul&gt;&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;\\\/tbody&gt;\\n&lt;\\\/table&gt;\\n&lt;\\\/li&gt;\\n&lt;\\\/ul&gt;\\n&lt;p&gt;The following example shows how to make a partial referenced refund of EUR&amp;nbsp;6.00.&lt;\\\/p&gt;\\n&lt;div data-component-wrapper=\\&quot;code-sample\\&quot;&gt;\\n&lt;code-sample :title=\\&quot;&#039;&#039;\\&quot; :id=\\&quot;&#039;partial-sample_1&#039;\\&quot; :code-data=&#039;[{\\&quot;language\\&quot;:\\&quot;json\\&quot;,\\&quot;tabTitle\\&quot;:\\&quot;JSON\\&quot;,\\&quot;content\\&quot;:\\&quot;{\\\\n    \\\\\\&quot;SaleToPOIRequest\\\\\\&quot;:{\\\\n        \\\\\\&quot;MessageHeader\\\\\\&quot;:{\\\\n            \\\\\\&quot;ProtocolVersion\\\\\\&quot;:\\\\\\&quot;3.0\\\\\\&quot;,\\\\n            \\\\\\&quot;MessageClass\\\\\\&quot;:\\\\\\&quot;Service\\\\\\&quot;,\\\\n            \\\\\\&quot;MessageCategory\\\\\\&quot;:\\\\\\&quot;Reversal\\\\\\&quot;,\\\\n            \\\\\\&quot;MessageType\\\\\\&quot;:\\\\\\&quot;Request\\\\\\&quot;,\\\\n            \\\\\\&quot;SaleID\\\\\\&quot;:\\\\\\&quot;POSSystemID12345\\\\\\&quot;,\\\\n            \\\\\\&quot;ServiceID\\\\\\&quot;:\\\\\\&quot;207111108\\\\\\&quot;,\\\\n            \\\\\\&quot;POIID\\\\\\&quot;:\\\\\\&quot;V400m-324688179\\\\\\&quot;\\\\n        },\\\\n        \\\\\\&quot;ReversalRequest\\\\\\&quot;:{\\\\n            \\\\\\&quot;OriginalPOITransaction\\\\\\&quot;:{\\\\n                \\\\\\&quot;POITransactionID\\\\\\&quot;:{\\\\n                    \\\\\\&quot;TransactionID\\\\\\&quot;:\\\\\\&quot;pZtU001251034513719.NC6HT9CRT65ZGN82\\\\\\&quot;,\\\\n                    \\\\\\&quot;TimeStamp\\\\\\&quot;:\\\\\\&quot;2019-08-12T15:40:03+00:00\\\\\\&quot;\\\\n                }\\\\n            },\\\\n            \\\\\\&quot;ReversalReason\\\\\\&quot;:\\\\\\&quot;MerchantCancel\\\\\\&quot;,\\\\n            \\\\\\&quot;ReversedAmount\\\\\\&quot;:6.00,\\\\n            \\\\\\&quot;SaleData\\\\\\&quot;:{\\\\n                \\\\\\&quot;SaleToAcquirerData\\\\\\&quot;:\\\\\\&quot;currency=EUR\\\\\\&quot;,\\\\n                \\\\\\&quot;SaleTransactionID\\\\\\&quot;:{\\\\n                    \\\\\\&quot;TimeStamp\\\\\\&quot;:\\\\\\&quot;2019-08-15T12:00:00+00:00\\\\\\&quot;,\\\\n                    \\\\\\&quot;TransactionID\\\\\\&quot;:\\\\\\&quot;27911\\\\\\&quot;\\\\n                }\\\\n            }\\\\n        }\\\\n    }\\\\n}\\&quot;},{\\&quot;language\\&quot;:\\&quot;java\\&quot;,\\&quot;tabTitle\\&quot;:\\&quot;Java\\&quot;,\\&quot;content\\&quot;:\\&quot;String saleID = \\\\\\&quot;YOUR_CASH_REGISTER_ID\\\\\\&quot;;\\\\nString serviceID = \\\\\\&quot;YOUR_UNIQUE_ATTEMPT_ID\\\\\\&quot;;\\\\nString POIID = \\\\\\&quot;YOUR_TERMINAL_ID\\\\\\&quot;;\\\\nString transactionID = \\\\\\&quot;YOUR_UNIQUE_TRANSACTION_ID\\\\\\&quot;;\\\\n\\\\nSaleToPOIRequest saleToPOIRequest = new SaleToPOIRequest();\\\\nMessageHeader messageHeader = new MessageHeader();\\\\nmessageHeader.setProtocolVersion(\\\\\\&quot;3.0\\\\\\&quot;);\\\\nmessageHeader.setMessageClass( MessageClassType.SERVICE );\\\\nmessageHeader.setMessageCategory( MessageCategoryType.REVERSAL );\\\\nmessageHeader.setMessageType( MessageType.REQUEST );\\\\nmessageHeader.setSaleID(saleID);\\\\nmessageHeader.setServiceID(serviceID);\\\\nmessageHeader.setPOIID(POIID);\\\\nsaleToPOIRequest.setMessageHeader(messageHeader);\\\\n\\\\nReversalRequest reversalRequest = new ReversalRequest();\\\\nOriginalPOITransaction originalPOITransaction = new OriginalPOITransaction();\\\\nTransactionIdentification pOITransactionID = new TransactionIdentification();\\\\npOITransactionID.setTransactionID(transactionID);\\\\npOITransactionID.setTimeStamp(DatatypeFactory.newInstance().newXMLGregorianCalendar(new GregorianCalendar()));\\\\noriginalPOITransaction.setPOITransactionID(pOITransactionID);\\\\nreversalRequest.setOriginalPOITransaction(originalPOITransaction);\\\\nreversalRequest.setReversalReason( ReversalReasonType.MERCHANT_CANCEL );\\\\nreversalRequest.setReversedAmount(6.0);\\\\n\\\\nSaleData saleData = new SaleData();\\\\nsaleData.setSaleToAcquirerData(\\\\\\&quot;currency=EUR\\\\\\&quot;);\\\\nTransactionIdentification saleTransactionID = new TransactionIdentification();\\\\nsaleTransactionID.setTimeStamp(DatatypeFactory.newInstance().newXMLGregorianCalendar(new GregorianCalendar()));\\\\nsaleTransactionID.setTransactionID(transactionID);\\\\nsaleData.setSaleTransactionID(saleTransactionID);\\\\nreversalRequest.setSaleData(saleData);\\\\nsaleToPOIRequest.setReversalRequest(reversalRequest);\\\\nterminalAPIRequest.setSaleToPOIRequest(saleToPOIRequest);\\&quot;}]&#039; :enable-copy-link-to-code-block=\\&quot;true\\&quot; :code-sample-card-size=\\&quot;&#039;fullsize&#039;\\&quot;&gt;&lt;\\\/code-sample&gt;\\n&lt;\\\/div&gt;\\n&lt;p&gt;The payment terminal shows a waiting screen until you receive the response.&lt;br \\\/&gt;\\n&lt;img src=\\&quot;\\\/unified-commerce\\\/referenced-refunds\\\/WaitingScreen.svg\\&quot; alt=\\&quot;\\&quot; \\\/&gt;&lt;\\\/p&gt;\\n&lt;\\\/li&gt;\\n&lt;li&gt;\\n&lt;p&gt;When you receive the  &lt;a href=\\&quot;https:\\\/\\\/docs.adyen.com\\\/api-explorer\\\/terminal-api\\\/latest\\\/post\\\/reversal\\\/#responses-200\\&quot; class=\\&quot;codeLabel  external-link no-image\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot;&gt;ReversalResponse&lt;\\\/a&gt; note the following:&lt;\\\/p&gt;\\n&lt;table&gt;\\n&lt;thead&gt;\\n&lt;tr&gt;\\n&lt;th style=\\&quot;text-align: left;\\&quot;&gt;Parameter&lt;\\\/th&gt;\\n&lt;th style=\\&quot;text-align: left;\\&quot;&gt;Description&lt;\\\/th&gt;\\n&lt;\\\/tr&gt;\\n&lt;\\\/thead&gt;\\n&lt;tbody&gt;\\n&lt;tr&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;&lt;code&gt;Response.Result&lt;\\\/code&gt;&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;&lt;span translate=\\&quot;no\\&quot;&gt;&lt;strong&gt;Success&lt;\\\/strong&gt;&lt;\\\/span&gt; means we received your request. The refund itself will be processed asynchronously.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;&lt;code&gt;Response.ReversedAmount&lt;\\\/code&gt;&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;The partial refund amount that we will try to get authorized.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;&lt;code&gt;POIData.POITransactionID.TransactionID&lt;\\\/code&gt;&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;The PSP reference for this refund request.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;&lt;code&gt;PaymentReceipt&lt;\\\/code&gt;&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;The generated receipt data. This includes &lt;span translate=\\&quot;no\\&quot;&gt;&lt;strong&gt;REFUND REQUESTED&lt;\\\/strong&gt;&lt;\\\/span&gt;.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;&lt;code&gt;Response.AdditionalResponse&lt;\\\/code&gt;&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;This includes: &lt;ul&gt;&lt;li markdown=\\&quot;1\\&quot;&gt;&lt;code&gt;posOriginalAmountValue&lt;\\\/code&gt;: The amount (in &lt;a href=\\&quot;\\\/pt\\\/development-resources\\\/currency-codes\\&quot;&gt;minor units&lt;\\\/a&gt;) of the original payment.&lt;\\\/li&gt; &lt;li markdown=\\&quot;1\\&quot;&gt;&lt;code&gt;posAuthAmountValue&lt;\\\/code&gt;: The refund amount (in minor units) that we will try to get authorized.&lt;\\\/li&gt; &lt;li markdown=\\&quot;1\\&quot;&gt;&lt;code&gt;merchantReference&lt;\\\/code&gt;: The &lt;code&gt;SaleData.SaleTransactionID.TransactionID&lt;\\\/code&gt; from the partial refund request.&lt;\\\/li&gt; &lt;li markdown=\\&quot;1\\&quot;&gt;&lt;code&gt;pspReference&lt;\\\/code&gt;: The PSP reference for this refund request.&lt;\\\/li&gt;&lt;\\\/ul&gt;&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;\\\/tbody&gt;\\n&lt;\\\/table&gt;\\n&lt;div data-component-wrapper=\\&quot;code-sample\\&quot;&gt;\\n&lt;code-sample :title=\\&quot;&#039;Response when we received your partial reversal request&#039;\\&quot; :id=\\&quot;&#039;&#039;\\&quot; :code-data=&#039;[{\\&quot;language\\&quot;:\\&quot;json\\&quot;,\\&quot;tabTitle\\&quot;:\\&quot;\\&quot;,\\&quot;content\\&quot;:\\&quot;{\\\\n    \\\\\\&quot;SaleToPOIResponse\\\\\\&quot;: {\\\\n        \\\\\\&quot;MessageHeader\\\\\\&quot;: {\\\\n            \\\\\\&quot;MessageCategory\\\\\\&quot;: \\\\\\&quot;Reversal\\\\\\&quot;,\\\\n            \\\\\\&quot;MessageClass\\\\\\&quot;: \\\\\\&quot;Service\\\\\\&quot;,\\\\n            \\\\\\&quot;MessageType\\\\\\&quot;: \\\\\\&quot;Response\\\\\\&quot;,\\\\n            \\\\\\&quot;POIID\\\\\\&quot;: \\\\\\&quot;V400m-324688179\\\\\\&quot;,\\\\n            \\\\\\&quot;ProtocolVersion\\\\\\&quot;: \\\\\\&quot;3.0\\\\\\&quot;,\\\\n            \\\\\\&quot;SaleID\\\\\\&quot;: \\\\\\&quot;POSSystemID12345\\\\\\&quot;,\\\\n            \\\\\\&quot;ServiceID\\\\\\&quot;: \\\\\\&quot;207111107\\\\\\&quot;\\\\n        },\\\\n        \\\\\\&quot;ReversalResponse\\\\\\&quot;: {\\\\n            \\\\\\&quot;POIData\\\\\\&quot;: {\\\\n                \\\\\\&quot;POITransactionID\\\\\\&quot;: {\\\\n                    \\\\\\&quot;TimeStamp\\\\\\&quot;: \\\\\\&quot;2022-02-03T15:04:15.004Z\\\\\\&quot;,\\\\n                    \\\\\\&quot;TransactionID\\\\\\&quot;: \\\\\\&quot;TF995R5G6L2GWR82\\\\\\&quot;\\\\n                }\\\\n            },\\\\n            \\\\\\&quot;PaymentReceipt\\\\\\&quot;: [...],\\\\n            \\\\\\&quot;Response\\\\\\&quot;: {\\\\n                \\\\\\&quot;AdditionalResponse\\\\\\&quot;: \\\\\\&quot;tid=47069832&amp;amp;transactionType=GOODS_SERVICES&amp;amp;posadditionalamounts.originalAmountValue=1025&amp;amp;giftcardIndicator=false&amp;amp;posAmountGratuityValue=0&amp;amp;pspReference=TF995R5G6L2GWR82&amp;amp;store=YOUR_STOREL&amp;amp;iso8601TxDate=2022-02-03T15%3a04%3a13.0000000%2b0000&amp;amp;posOriginalAmountValue=1025&amp;amp;txtime=16%3a04%3a13&amp;amp;paymentMethod=mc&amp;amp;txdate=03-02-2022&amp;amp;merchantReference=2022-02-03%2016%3a04%3a13&amp;amp;posadditionalamounts.originalAmountCurrency=EUR&amp;amp;transactionReferenceNumber=TF995R5G6L2GWR82&amp;amp;posAuthAmountCurrency=EUR&amp;amp;posAmountCashbackValue=0&amp;amp;posEntryMode=CLESS_CHIP&amp;amp;posAuthAmountValue=600\\\\\\&quot;,\\\\n                \\\\\\&quot;Result\\\\\\&quot;: \\\\\\&quot;Success\\\\\\&quot;\\\\n            },\\\\n            \\\\\\&quot;ReversedAmount\\\\\\&quot;: 6\\\\n        }\\\\n    }\\\\n}\\&quot;}]&#039; :enable-copy-link-to-code-block=\\&quot;true\\&quot; :code-sample-card-size=\\&quot;&#039;fullsize&#039;\\&quot;&gt;&lt;\\\/code-sample&gt;\\n&lt;\\\/div&gt;\\n&lt;p&gt;If your request failed, the  &lt;a href=\\&quot;https:\\\/\\\/docs.adyen.com\\\/api-explorer\\\/terminal-api\\\/latest\\\/post\\\/reversal\\\/#responses-200-Response\\&quot; class=\\&quot;codeLabel  external-link no-image\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot;&gt;ReversalResponse.Response&lt;\\\/a&gt; contains:&lt;\\\/p&gt;\\n&lt;ul&gt;\\n&lt;li&gt;&lt;code&gt;Result&lt;\\\/code&gt;: &lt;span translate=\\&quot;no\\&quot;&gt;&lt;strong&gt;Failure&lt;\\\/strong&gt;&lt;\\\/span&gt;&lt;\\\/li&gt;\\n&lt;li&gt;&lt;code&gt;AdditionalResponse&lt;\\\/code&gt;: This includes a &lt;code&gt;message&lt;\\\/code&gt; explaining why the request failed. For example:\\n&lt;ul&gt;\\n&lt;li&gt;&lt;em&gt;Original pspReference required for this operation&lt;\\\/em&gt;: Messages like this tell you how to fix the request so you can try again.&lt;\\\/li&gt;\\n&lt;li&gt;&lt;em&gt;Transaction is already voided&lt;\\\/em&gt;: This message tells you that we already received a full reversal request for the original transaction. &lt;\\\/li&gt;\\n&lt;\\\/ul&gt;&lt;\\\/li&gt;\\n&lt;\\\/ul&gt;\\n&lt;!-- list separator --&gt;\\n&lt;\\\/li&gt;\\n&lt;li&gt;\\n&lt;p&gt;Wait for the &lt;a href=\\&quot;#cancel-or-refund-webhook\\&quot;&gt;CANCEL_OR_REFUND webhook&lt;\\\/a&gt; to learn the outcome. Refunds are always processed asynchronously. If successful, the refund is issued to the shopper&#039;s account.&lt;\\\/p&gt;\\n&quot;,&quot;altTitle&quot;:&quot;partial&quot;,&quot;oldTabId&quot;:&quot;partial_refund_1_2&quot;,&quot;relation&quot;:&quot;partial&quot;}]\"\n            :should-update-when-url-changes='true'>\n        <\/tabs>\n    <\/div>\n<\/div>\n\n<\/li>\n<\/ol>\n<h3 id=\"refund-ecommerce-payment\">Refunding an ecommerce payment<\/h3>\n<p>An ecommerce payment does have a PSP reference, but the tender reference is missing because it is generated by the terminal. To refund an ecommerce payment, you need to know the PSP reference, the date, and the currency of the original payment.<\/p>\n\n<div id=\"tabgft1x\">\n    <div data-component-wrapper=\"tabs\">\n        <tabs\n                        :items=\"[{&quot;title&quot;:&quot;Full refund of an ecommerce transaction&quot;,&quot;content&quot;:&quot;\\n&lt;p&gt;Compared to a &lt;a href=\\&quot;\\\/pt\\\/point-of-sale\\\/basic-tapi-integration\\\/refund-payment\\\/referenced?tab=full_refund_1\\&quot;&gt;basic full referenced refund&lt;\\\/a&gt;, note the following request parameters:&lt;\\\/p&gt;\\n&lt;table&gt;\\n&lt;thead&gt;\\n&lt;tr&gt;\\n&lt;th style=\\&quot;text-align: left;\\&quot;&gt;Parameter&lt;\\\/th&gt;\\n&lt;th style=\\&quot;text-align: center;\\&quot;&gt;Required&lt;\\\/th&gt;\\n&lt;th style=\\&quot;text-align: left;\\&quot;&gt;Description&lt;\\\/th&gt;\\n&lt;\\\/tr&gt;\\n&lt;\\\/thead&gt;\\n&lt;tbody&gt;\\n&lt;tr&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;&lt;code&gt;OriginalPOITransaction.POITransactionID&lt;\\\/code&gt;&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: center;\\&quot;&gt;&lt;img title=\\&quot;-white_check_mark-\\&quot; alt=\\&quot;-white_check_mark-\\&quot; class=\\&quot;smileys\\&quot; src=\\&quot;\\\/user\\\/data\\\/smileys\\\/emoji\\\/white_check_mark.png\\&quot; \\\/&gt;&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;An object with &lt;code&gt;TransactionID&lt;\\\/code&gt;: the PSP reference of the original payment, in the format &lt;code&gt;.pspReference&lt;\\\/code&gt;. For example: &lt;strong&gt;.VK9DRSLLRCQ2WN82&lt;\\\/strong&gt; &lt;div class=\\&quot;sc-notice note\\&quot;&gt;&lt;div&gt; Do not forget the leading dot (.). Without it, you will receive the error message &lt;code&gt;unreachable host&lt;\\\/code&gt;.&lt;\\\/div&gt;&lt;\\\/div&gt;&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;&lt;code&gt;SaleData.SaleToAcquirerData&lt;\\\/code&gt;&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: center;\\&quot;&gt;&lt;img title=\\&quot;-white_check_mark-\\&quot; alt=\\&quot;-white_check_mark-\\&quot; class=\\&quot;smileys\\&quot; src=\\&quot;\\\/user\\\/data\\\/smileys\\\/emoji\\\/white_check_mark.png\\&quot; \\\/&gt;&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;The currency of the refund, in the format &lt;code&gt;currency=ABC&lt;\\\/code&gt; where &lt;code&gt;ABC&lt;\\\/code&gt; is the three-letter &lt;a href=\\&quot;\\\/pt\\\/development-resources\\\/currency-codes\\&quot;&gt;currency code&lt;\\\/a&gt;. This must match the currency of the original payment.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;&lt;code&gt;SaleData.SaleTransactionID&lt;\\\/code&gt;&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: center;\\&quot;&gt;&lt;img title=\\&quot;-white_check_mark-\\&quot; alt=\\&quot;-white_check_mark-\\&quot; class=\\&quot;smileys\\&quot; src=\\&quot;\\\/user\\\/data\\\/smileys\\\/emoji\\\/white_check_mark.png\\&quot; \\\/&gt;&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;An object with: &lt;ul&gt;&lt;li markdown=\\&quot;1\\&quot;&gt;&lt;code&gt;TransactionID&lt;\\\/code&gt;: your reference for the refund. In your Customer Area and Adyen reports, this will show as the &lt;strong&gt;merchant reference&lt;\\\/strong&gt;.&lt;\\\/li&gt; &lt;li markdown=\\&quot;1\\&quot;&gt;&lt;code&gt;TimeStamp&lt;\\\/code&gt;: date and time in &lt;a href=\\&quot;https:\\\/\\\/en.wikipedia.org\\\/wiki\\\/ISO_8601#Coordinated_Universal_Time_(UTC)\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;UTC format&lt;\\\/a&gt; of the refund.&lt;\\\/li&gt;&lt;\\\/ul&gt;&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;\\\/tbody&gt;\\n&lt;\\\/table&gt;\\n&lt;pre&gt;&lt;code class=\\&quot;language-json\\&quot;&gt;{\\n   \\&quot;SaleToPOIRequest\\&quot;:{\\n      \\&quot;MessageHeader\\&quot;:{\\n         \\&quot;ProtocolVersion\\&quot;:\\&quot;3.0\\&quot;,\\n         \\&quot;MessageClass\\&quot;:\\&quot;Service\\&quot;,\\n         \\&quot;MessageCategory\\&quot;:\\&quot;Reversal\\&quot;,\\n         \\&quot;MessageType\\&quot;:\\&quot;Request\\&quot;,\\n         \\&quot;SaleID\\&quot;:\\&quot;POSSystemID12345\\&quot;,\\n         \\&quot;ServiceID\\&quot;:\\&quot;207111108\\&quot;,\\n         \\&quot;POIID\\&quot;:\\&quot;V400m-324688179\\&quot;\\n      },\\n      \\&quot;ReversalRequest\\&quot;:{\\n         \\&quot;OriginalPOITransaction\\&quot;:{\\n            \\&quot;POITransactionID\\&quot;:{\\n               \\&quot;TransactionID\\&quot;:\\&quot;.VK9DRSLLRCQ2WN82\\&quot;,\\n               \\&quot;TimeStamp\\&quot;:\\&quot;2022-01-31T12:08:45.004Z\\&quot;\\n            }\\n         },\\n         \\&quot;ReversalReason\\&quot;:\\&quot;MerchantCancel\\&quot;,\\n         \\&quot;SaleData\\&quot;:{\\n            \\&quot;SaleToAcquirerData\\&quot;:\\&quot;currency=EUR\\&quot;,\\n            \\&quot;SaleTransactionID\\&quot;:{\\n               \\&quot;TimeStamp\\&quot;:\\&quot;2022-02-03T15:04:14.004Z\\&quot;,\\n               \\&quot;TransactionID\\&quot;:\\&quot;rev-708\\&quot;\\n            }\\n         }\\n      }\\n   }\\n}&lt;\\\/code&gt;&lt;\\\/pre&gt;\\n&lt;p&gt;When you receive the &lt;code&gt;ReversalResponse&lt;\\\/code&gt;, note that the &lt;code&gt;Response.AdditionalResponse&lt;\\\/code&gt; includes:&lt;\\\/p&gt;\\n&lt;ul&gt;\\n&lt;li&gt;&lt;code&gt;posOriginalAmountValue&lt;\\\/code&gt;: &lt;strong&gt;0&lt;\\\/strong&gt; (zero)&lt;\\\/li&gt;\\n&lt;li&gt;&lt;code&gt;posAuthAmountValue&lt;\\\/code&gt;: &lt;strong&gt;0&lt;\\\/strong&gt; (zero)&lt;\\\/li&gt;\\n&lt;\\\/ul&gt;\\n&lt;p&gt;That is because at this moment we do not know the original amount of the ecommerce payment, and thus also do not know the refund amount that we will try to get authorized.&lt;\\\/p&gt;\\n&quot;,&quot;altTitle&quot;:null,&quot;oldTabId&quot;:&quot;full_refund_of_an_ecommerce_transaction_0_1&quot;,&quot;relation&quot;:&quot;&quot;},{&quot;title&quot;:&quot;Partial refund of an ecommerce transaction&quot;,&quot;content&quot;:&quot;\\n&lt;p&gt;Compared to a &lt;a href=\\&quot;\\\/pt\\\/point-of-sale\\\/basic-tapi-integration\\\/refund-payment\\\/referenced?tab=partial_refund_2\\&quot;&gt;basic partial referenced refund&lt;\\\/a&gt;, note the following request parameters:&lt;\\\/p&gt;\\n&lt;table&gt;\\n&lt;thead&gt;\\n&lt;tr&gt;\\n&lt;th style=\\&quot;text-align: left;\\&quot;&gt;Parameter&lt;\\\/th&gt;\\n&lt;th style=\\&quot;text-align: center;\\&quot;&gt;Required&lt;\\\/th&gt;\\n&lt;th style=\\&quot;text-align: left;\\&quot;&gt;Description&lt;\\\/th&gt;\\n&lt;\\\/tr&gt;\\n&lt;\\\/thead&gt;\\n&lt;tbody&gt;\\n&lt;tr&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;&lt;code&gt;OriginalPOITransaction.POITransactionID&lt;\\\/code&gt;&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: center;\\&quot;&gt;&lt;img title=\\&quot;-white_check_mark-\\&quot; alt=\\&quot;-white_check_mark-\\&quot; class=\\&quot;smileys\\&quot; src=\\&quot;\\\/user\\\/data\\\/smileys\\\/emoji\\\/white_check_mark.png\\&quot; \\\/&gt;&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;An object with &lt;code&gt;TransactionID&lt;\\\/code&gt;: the PSP reference of the original payment, in the format &lt;code&gt;.pspReference&lt;\\\/code&gt;. For example: &lt;strong&gt;.VK9DRSLLRCQ2WN82&lt;\\\/strong&gt; &lt;div class=\\&quot;sc-notice note\\&quot;&gt;&lt;div&gt; Do not forget the leading dot (.). Without it, you will receive the error message &lt;code&gt;unreachable host&lt;\\\/code&gt;.&lt;\\\/div&gt;&lt;\\\/div&gt;&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;\\\/tbody&gt;\\n&lt;\\\/table&gt;\\n&lt;pre&gt;&lt;code class=\\&quot;language-json\\&quot;&gt;{\\n   \\&quot;SaleToPOIRequest\\&quot;:{\\n      \\&quot;MessageHeader\\&quot;:{\\n         \\&quot;ProtocolVersion\\&quot;:\\&quot;3.0\\&quot;,\\n         \\&quot;MessageClass\\&quot;:\\&quot;Service\\&quot;,\\n         \\&quot;MessageCategory\\&quot;:\\&quot;Reversal\\&quot;,\\n         \\&quot;MessageType\\&quot;:\\&quot;Request\\&quot;,\\n         \\&quot;SaleID\\&quot;:\\&quot;POSSystemID12345\\&quot;,\\n         \\&quot;ServiceID\\&quot;:\\&quot;207111108\\&quot;,\\n         \\&quot;POIID\\&quot;:\\&quot;V400m-324688179\\&quot;\\n      },\\n      \\&quot;ReversalRequest\\&quot;:{\\n         \\&quot;OriginalPOITransaction\\&quot;:{\\n            \\&quot;POITransactionID\\&quot;:{\\n               \\&quot;TransactionID\\&quot;:\\&quot;.VK9DRSLLRCQ2WN82\\&quot;,\\n               \\&quot;TimeStamp\\&quot;:\\&quot;2022-01-31T12:08:45.004Z\\&quot;\\n            }\\n         },\\n         \\&quot;ReversalReason\\&quot;:\\&quot;MerchantCancel\\&quot;,\\n         \\&quot;ReversedAmount\\&quot;:6,\\n         \\&quot;SaleData\\&quot;:{\\n            \\&quot;SaleToAcquirerData\\&quot;:\\&quot;currency=EUR\\&quot;,\\n            \\&quot;SaleTransactionID\\&quot;:{\\n               \\&quot;TimeStamp\\&quot;:\\&quot;2022-02-03T15:04:14.004Z\\&quot;,\\n               \\&quot;TransactionID\\&quot;:\\&quot;rev-708\\&quot;\\n            }\\n         }\\n      }\\n   }\\n}&lt;\\\/code&gt;&lt;\\\/pre&gt;\\n&lt;p&gt;When you receive the &lt;code&gt;ReversalResponse&lt;\\\/code&gt;, note that the &lt;code&gt;Response.AdditionalResponse&lt;\\\/code&gt; includes:&lt;\\\/p&gt;\\n&lt;ul&gt;\\n&lt;li&gt;&lt;code&gt;posOriginalAmountValue&lt;\\\/code&gt;: &lt;strong&gt;0&lt;\\\/strong&gt; (zero)&lt;\\\/li&gt;\\n&lt;\\\/ul&gt;\\n&lt;p&gt;That is because at this moment we do not know the original amount of the ecommerce payment.&lt;\\\/p&gt;\\n&quot;,&quot;altTitle&quot;:null,&quot;oldTabId&quot;:&quot;partial_refund_of_an_ecommerce_transaction_1_2&quot;,&quot;relation&quot;:&quot;&quot;}]\"\n            :should-update-when-url-changes='false'>\n        <\/tabs>\n    <\/div>\n<\/div>\n\n<h2 id=\"refunds-endpoint\">Send a server-to-server refund request<\/h2>\n<p>To return funds to the shopper:<\/p>\n<ol>\n<li>\n<p>From the  information of the payment you want to refund, get the PSP reference.<\/p>\n<\/li>\n<li>\n<p>Make a  <a href=\"https:\/\/docs.adyen.com\/api-explorer\/Checkout\/latest\/post\/payments\/(paymentPspReference)\/refunds\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">\/payments\/{paymentPspReference}\/refunds<\/a> request, including the following:<\/p>\n<p>In your request, include:<\/p>\n<table>\n<thead>\n<tr>\n<th style=\"text-align: left;\">Parameter<\/th>\n<th style=\"text-align: center;\">Required<\/th>\n<th style=\"text-align: left;\">Description<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"text-align: left;\"><code>paymentPspReference<\/code><br> Path parameter<\/td>\n<td style=\"text-align: center;\"><img title=\"-white_check_mark-\" alt=\"-white_check_mark-\" class=\"smileys\" src=\"\/user\/data\/smileys\/emoji\/white_check_mark.png\" \/><\/td>\n<td style=\"text-align: left;\">The PSP reference of the payment. You can find this in the following: <ul><li markdown=\"1\">The webhook message with <code>eventCode<\/code>: <strong>AUTHORISATION<\/strong> for the payment.<\/li><li markdown=\"1\">In your <a href=\"https:\/\/ca-test.adyen.com\/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\" class=\"external-link no-image\">Customer Area<\/a>, in the list of payments (<strong>Transactions<\/strong> &gt; <strong>Payments<\/strong>).<\/li><li markdown=\"1\">If you made a  <a href=\"https:\/\/docs.adyen.com\/api-explorer\/Checkout\/latest\/post\/payments\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">\/payments<\/a> request for the payment, the  <a href=\"https:\/\/docs.adyen.com\/api-explorer\/Checkout\/latest\/post\/payments\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">\/payments<\/a> response.<\/li><\/ul><\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>merchantAccount<\/code><\/td>\n<td style=\"text-align: center;\"><img title=\"-white_check_mark-\" alt=\"-white_check_mark-\" class=\"smileys\" src=\"\/user\/data\/smileys\/emoji\/white_check_mark.png\" \/><\/td>\n<td style=\"text-align: left;\">The name of your merchant account that is used to process the payment.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>amount<\/code><\/td>\n<td style=\"text-align: center;\"><img title=\"-white_check_mark-\" alt=\"-white_check_mark-\" class=\"smileys\" src=\"\/user\/data\/smileys\/emoji\/white_check_mark.png\" \/><\/td>\n<td style=\"text-align: left;\">The <a href=\"https:\/\/docs.adyen.com\/api-explorer\/#\/CheckoutService\/latest\/post\/payments\/{paymentPspReference}\/refunds__reqParam_amount\" class=\"codeLabel external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">amount<\/a> that you want to refund. <ul><li markdown=\"1\">The <code>value<\/code> must be the same or, in case of a partial refund, less than the captured <code>amount<\/code>.<\/li> <li markdown=\"1\">The <code>currency<\/code> must match the currency used in the authorization.<\/li><ul><\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>reference<\/code><\/td>\n<td style=\"text-align: center;\"><\/td>\n<td style=\"text-align: left;\">Your reference for the refund, for example to tag a partial refund for future reconciliation. The <code>reference<\/code> parameter is required for <a href=\"\/pt\/payment-methods\/grabpay\">GrabPay<\/a> refunds.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>merchantRefundReason<\/code><\/td>\n<td style=\"text-align: center;\"><\/td>\n<td style=\"text-align: left;\">The reason for the refund request. Possible values: <ul><li markdown=\"1\"><strong>FRAUD<\/strong><\/li><li markdown=\"1\"><strong>CUSTOMER REQUEST<\/strong><\/li><li markdown=\"1\"><strong>RETURN<\/strong><\/li><li markdown=\"1\"><strong>DUPLICATE<\/strong><\/li><li markdown=\"1\"><strong>OTHER<\/strong><\/li><\/ul><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<div data-component-wrapper=\"code-sample\">\n<code-sample :title=\"'Example of a refund request for EUR 25'\" :id=\"'refunds-request'\" :code-data=\"[{&quot;language&quot;:&quot;bash&quot;,&quot;tabTitle&quot;:&quot;curl&quot;,&quot;content&quot;:&quot;curl https:\\\/\\\/checkout-test.adyen.com\\\/v72\\\/payments\\\/XB7XNCQ8HXSKGK82\\\/refunds \\\\\\n-H 'x-api-key: ADYEN_API_KEY' \\\\\\n-H 'Content-Type: application\\\/json' \\\\\\n-d '{\\n    \\&quot;merchantAccount\\&quot;: \\&quot;ADYEN_MERCHANT_ACCOUNT\\&quot;,\\n    \\&quot;amount\\&quot;: {\\n        \\&quot;value\\&quot;: 2500,\\n        \\&quot;currency\\&quot;: \\&quot;EUR\\&quot;\\n    },\\n    \\&quot;reference\\&quot;: \\&quot;YOUR_UNIQUE_REFERENCE\\&quot;\\n}'&quot;},{&quot;language&quot;:&quot;java&quot;,&quot;tabTitle&quot;:&quot;Java&quot;,&quot;content&quot;:&quot;\\\/\\\/ Adyen Java API Library v39.3.0\\nimport com.adyen.Client;\\nimport com.adyen.enums.Environment;\\nimport com.adyen.model.checkout.*;\\nimport java.time.OffsetDateTime;\\nimport java.util.*;\\nimport com.adyen.model.RequestOptions;\\nimport com.adyen.service.checkout.*;\\n\\n\\\/\\\/ For the LIVE environment, also include your liveEndpointUrlPrefix.\\nClient client = new Client(\\&quot;ADYEN_API_KEY\\&quot;, Environment.TEST);\\n\\n\\\/\\\/ Create the request object(s)\\n\\\/\\\/ Send the request\\nModificationsApi service = new ModificationsApi(client);\\nPaymentRefundResponse response = service.refundCapturedPayment(\\&quot;paymentPspReference\\&quot;, paymentRefundRequest, new RequestOptions().idempotencyKey(\\&quot;UUID\\&quot;));&quot;},{&quot;language&quot;:&quot;php&quot;,&quot;tabTitle&quot;:&quot;PHP&quot;,&quot;content&quot;:&quot;&lt;?php\\n\\\/\\\/ Adyen PHP API Library v28.2.0\\nuse Adyen\\\\Client;\\nuse Adyen\\\\Environment;\\nuse Adyen\\\\Service\\\\Checkout\\\\ModificationsApi;\\n\\n$client = new Client();\\n$client-&gt;setXApiKey(\\&quot;ADYEN_API_KEY\\&quot;);\\n\\\/\\\/ For the LIVE environment, also include your liveEndpointUrlPrefix.\\n$client-&gt;setEnvironment(Environment::TEST);\\n\\n\\n\\\/\\\/ Create the request object(s)\\n$requestOptions['idempotencyKey'] = 'UUID';\\n\\n\\\/\\\/ Send the request\\n$service = new ModificationsApi($client);\\n$response = $service-&gt;refundCapturedPayment('paymentPspReference', $paymentRefundRequest, $requestOptions);&quot;},{&quot;language&quot;:&quot;cs&quot;,&quot;tabTitle&quot;:&quot;C#&quot;,&quot;content&quot;:&quot;\\\/\\\/ Adyen .net API Library v32.1.1\\nusing Adyen;\\nusing Environment = Adyen.Model.Environment;\\nusing Adyen.Model;\\nusing Adyen.Model.Checkout;\\nusing Adyen.Service.Checkout;\\n\\n\\\/\\\/ For the LIVE environment, also include your liveEndpointUrlPrefix.\\nvar config = new Config()\\n{\\n    XApiKey = \\&quot;ADYEN_API_KEY\\&quot;,\\n    Environment = Environment.Test\\n};\\nvar client = new Client(config);\\n\\n\\\/\\\/ Create the request object(s)\\n\\\/\\\/ Send the request\\nvar service = new ModificationsService(client);\\nvar response = service.RefundCapturedPayment(\\&quot;paymentPspReference\\&quot;, paymentRefundRequest, requestOptions: new RequestOptions { IdempotencyKey = \\&quot;UUID\\&quot;});&quot;},{&quot;language&quot;:&quot;js&quot;,&quot;tabTitle&quot;:&quot;NodeJS (JavaScript)&quot;,&quot;content&quot;:&quot;\\\/\\\/ Adyen Node API Library v29.0.0\\nconst { Client, CheckoutAPI } = require('@adyen\\\/api-library');\\n\\n\\\/\\\/ For the LIVE environment, also include your liveEndpointUrlPrefix.\\nconst config = new Config({\\n  apiKey: \\&quot;ADYEN_API_KEY\\&quot;,\\n  environment: EnvironmentEnum.TEST\\n});\\n\\nconst client = new Client(config);\\n\\n\\\/\\\/ Create the request object(s)\\nconst paymentRefundRequest = {\\n  merchantAccount: \\&quot;ADYEN_MERCHANT_ACCOUNT\\&quot;,\\n  amount: {\\n    value: 2500,\\n    currency: \\&quot;EUR\\&quot;\\n  },\\n  reference: \\&quot;YOUR_UNIQUE_REFERENCE\\&quot;\\n}\\n\\n\\\/\\\/ Send the request\\nconst checkoutAPI = new CheckoutAPI(client);\\nconst response = checkoutAPI.ModificationsApi.refundCapturedPayment(\\&quot;paymentPspReference\\&quot;, paymentRefundRequest, { idempotencyKey: \\&quot;UUID\\&quot; });&quot;},{&quot;language&quot;:&quot;go&quot;,&quot;tabTitle&quot;:&quot;Go&quot;,&quot;content&quot;:&quot;\\\/\\\/ Adyen Go API Library v21.0.0\\nimport (\\n  \\&quot;context\\&quot;\\n  \\&quot;github.com\\\/adyen\\\/adyen-go-api-library\\\/v21\\\/src\\\/common\\&quot;\\n  \\&quot;github.com\\\/adyen\\\/adyen-go-api-library\\\/v21\\\/src\\\/adyen\\&quot;\\n  \\&quot;github.com\\\/adyen\\\/adyen-go-api-library\\\/v21\\\/src\\\/checkout\\&quot;\\n)\\n\\\/\\\/ For the LIVE environment, also include your liveEndpointUrlPrefix.\\nclient := adyen.NewClient(&amp;common.Config{\\n  ApiKey:      \\&quot;ADYEN_API_KEY\\&quot;,\\n  Environment: common.TestEnv,\\n})\\n\\n\\\/\\\/ Create the request object(s)\\n\\\/\\\/ Send the request\\nservice := client.Checkout()\\nreq := service.ModificationsApi.RefundCapturedPaymentInput(\\&quot;paymentPspReference\\&quot;).IdempotencyKey(\\&quot;UUID\\&quot;).PaymentRefundRequest(paymentRefundRequest)\\nres, httpRes, err := service.ModificationsApi.RefundCapturedPayment(context.Background(), req)&quot;},{&quot;language&quot;:&quot;py&quot;,&quot;tabTitle&quot;:&quot;Python&quot;,&quot;content&quot;:&quot;# Adyen Python API Library v13.6.0\\nimport Adyen\\n\\nadyen = Adyen.Adyen()\\nadyen.client.xapikey = \\&quot;ADYEN_API_KEY\\&quot;\\n# For the LIVE environment, also include your liveEndpointUrlPrefix.\\nadyen.client.platform = \\&quot;test\\&quot; # The environment to use library in.\\n\\n# Create the request object(s)\\njson_request = {\\n  \\&quot;merchantAccount\\&quot;: \\&quot;ADYEN_MERCHANT_ACCOUNT\\&quot;,\\n  \\&quot;amount\\&quot;: {\\n    \\&quot;value\\&quot;: 2500,\\n    \\&quot;currency\\&quot;: \\&quot;EUR\\&quot;\\n  },\\n  \\&quot;reference\\&quot;: \\&quot;YOUR_UNIQUE_REFERENCE\\&quot;\\n}\\n\\n# Send the request\\nresult = adyen.checkout.modifications_api.refund_captured_payment(request=json_request, paymentPspReference=\\&quot;paymentPspReference\\&quot;, idempotency_key=\\&quot;UUID\\&quot;)&quot;},{&quot;language&quot;:&quot;rb&quot;,&quot;tabTitle&quot;:&quot;Ruby&quot;,&quot;content&quot;:&quot;# Adyen Ruby API Library v10.4.0\\nrequire \\&quot;adyen-ruby-api-library\\&quot;\\n\\nadyen = Adyen::Client.new\\nadyen.api_key = 'ADYEN_API_KEY'\\n# For the LIVE environment, also include your liveEndpointUrlPrefix.\\nadyen.env = :test # Set to \\&quot;live\\&quot; for live environment\\n\\n# Create the request object(s)\\nrequest_body = {\\n  :merchantAccount =&gt; 'ADYEN_MERCHANT_ACCOUNT',\\n  :amount =&gt; {\\n    :value =&gt; 2500,\\n    :currency =&gt; 'EUR'\\n  },\\n  :reference =&gt; 'YOUR_UNIQUE_REFERENCE'\\n}\\n\\n# Send the request\\nresult = adyen.checkout.modifications_api.refund_captured_payment(request_body, 'paymentPspReference', headers: { 'Idempotency-Key' =&gt; 'UUID' })&quot;},{&quot;language&quot;:&quot;ts&quot;,&quot;tabTitle&quot;:&quot;NodeJS (TypeScript)&quot;,&quot;content&quot;:&quot;\\\/\\\/ Adyen Node API Library v29.0.0\\nimport { Client, CheckoutAPI, Types } from \\&quot;@adyen\\\/api-library\\&quot;;\\n\\n\\\/\\\/ For the LIVE environment, also include your liveEndpointUrlPrefix.\\nconst config = new Config({\\n  apiKey: \\&quot;ADYEN_API_KEY\\&quot;,\\n  environment: EnvironmentEnum.TEST\\n});\\n\\nconst client = new Client(config);\\n\\n\\\/\\\/ Create the request object(s)\\n\\\/\\\/ Send the request\\nconst checkoutAPI = new CheckoutAPI(client);\\nconst response = checkoutAPI.ModificationsApi.refundCapturedPayment(\\&quot;paymentPspReference\\&quot;, paymentRefundRequest, { idempotencyKey: \\&quot;UUID\\&quot; });&quot;}]\" :enable-copy-link-to-code-block=\"true\" :code-sample-card-size=\"'fullsize'\"><\/code-sample>\n<\/div>\n<\/li>\n<li>\n<p>When you receive the  <a href=\"https:\/\/docs.adyen.com\/api-explorer\/Checkout\/latest\/post\/payments\/(paymentPspReference)\/refunds\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">\/payments\/{paymentPspReference}\/refunds<\/a> response, note:<\/p>\n<ul>\n<li><code>paymentPspReference<\/code>: the PSP reference of the authorization you want to refund.<\/li>\n<li><code>pspReference<\/code>: Adyen's unique reference associated with this refund request.<\/li>\n<\/ul>\n<div data-component-wrapper=\"code-sample\">\n<code-sample :title=\"'Example response for a refund request'\" :id=\"''\" :code-data='[{\"language\":\"json\",\"tabTitle\":\"\",\"content\":\"{\\n    \\\"merchantAccount\\\": \\\"ADYEN_MERCHANT_ACCOUNT\\\",\\n    \\\"paymentPspReference\\\": \\\"XB7XNCQ8HXSKGK82\\\",\\n    \\\"pspReference\\\" : \\\"JDD6LKT8MBLZNN84\\\",\\n    \\\"reference\\\": \\\"YOUR_UNIQUE_REFERENCE\\\",\\n    \\\"status\\\" : \\\"received\\\"\\n}\"}]' :enable-copy-link-to-code-block=\"true\" :code-sample-card-size=\"'fullsize'\"><\/code-sample>\n<\/div>\n<\/li>\n<li>\n<p>Wait for the <a href=\"#refund-webhook\">REFUND webhook<\/a> to learn the outcome of the refund request.<\/p>\n<\/li>\n<\/ol>\n<h2 id=\"refund-webhook\">Webhooks<\/h2>\n<p>Refunds are <em>not<\/em> processed synchronously. When you send an API request for a referenced refund, the API response only confirms we received the request.<\/p>\n<p>We process the refund asynchronously, and inform you of the result through a webhook.<\/p>\n<ul>\n<li>For a Terminal API reversal request, we return a <a href=\"#cancel-or-refund-webhook\">CANCEL_OR_REFUND webhook<\/a>.<\/li>\n<li>For a server-to-server refund, we return a <a href=\"#refund-webhook-1\">REFUND webhook<\/a><\/li>\n<\/ul>\n<div class=\"notices yellow\">\n<p>To receive updates about your refunds, you must <a href=\"\/pt\/development-resources\/webhooks\">set up webhooks<\/a>.<\/p>\n<\/div>\n<h3 id=\"cancel-or-refund-webhook\">CANCEL_OR_REFUND webhook<\/h3>\n<p>Before we send your <a href=\"#reversal-request\">Terminal API reversal request<\/a> 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  <strong>CANCEL_OR_REFUND<\/strong> <a href=\"\/pt\/development-resources\/webhooks\">webhook<\/a> that includes:<\/p>\n<table>\n<thead>\n<tr>\n<th>Parameter<\/th>\n<th>Description<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><code>eventCode<\/code><\/td>\n<td><strong>CANCEL_OR_REFUND<\/strong><\/td>\n<\/tr>\n<tr>\n<td><code>originalReference<\/code><\/td>\n<td>The PSP reference of the original payment.<\/td>\n<\/tr>\n<tr>\n<td><code>pspReference<\/code><\/td>\n<td>The PSP reference of the reversal that you can find in the  <a href=\"https:\/\/docs.adyen.com\/api-explorer\/Checkout\/latest\/post\/payments\/(paymentPspReference)\/reversals\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">\/payments\/{paymentPspReference}\/reversals<\/a> response<\/td>\n<\/tr>\n<tr>\n<td><code>success<\/code><\/td>\n<td>Indicates the outcome of the refund validations. Possible values:  <ul><li markdown=\"1\"><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>.<\/li><li markdown=\"1\"><strong>false<\/strong>: the refund validations failed. The webhook includes a <code>reason<\/code> field with a short description of the problem. <a href=\"\/pt\/online-payments\/classic-integrations\/modify-payments\/refund#unsuccessful-refund-request\">Review the reason<\/a>, fix the issue if possible, and resubmit the refund request.<\/li><\/ul><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<div data-component-wrapper=\"code-sample\">\n    <code-sample :title=\"'Example of a webhook message with the CANCEL_OR_REFUND event code'\" :id=\"''\" :code-data='[{\"language\":\"json\",\"tabTitle\":\"\",\"content\":\"{\\n   \\\"live\\\":\\\"false\\\",\\n   \\\"notificationItems\\\":[\\n      {\\n         \\\"NotificationRequestItem\\\":{\\n            \\\"additionalData\\\":{\\n               \\\"modification.action\\\": \\\"refund\\\"\\n            },\\n            \\\"amount\\\":{\\n               \\\"currency\\\": \\\"EUR\\\",\\n               \\\"value\\\": 1025\\n            },\\n            \\\"eventCode\\\":\\\"CANCEL_OR_REFUND\\\",\\n            \\\"eventDate\\\":\\\"2022-02-03T15:14:15.004Z\\\",\\n            \\\"merchantAccountCode\\\":\\\"YOUR_MERCHANT_ACCOUNT\\\",\\n            \\\"originalReference\\\":\\\"VK9DRSLLRCQ2WN82\\\",\\n            \\\"paymentMethod\\\":\\\"mc\\\",\\n            \\\"pspReference\\\":\\\"TF995R5G6L2GWR82\\\",\\n            \\\"reason\\\":\\\"\\\",\\n            \\\"success\\\":\\\"true\\\"\\n         }\\n      }\\n   ]\\n}\"}]' :enable-copy-link-to-code-block=\"true\" :code-sample-card-size=\"'fullsize'\"><\/code-sample>\n<\/div>\n<p>For more information about the included fields, see the  <a href=\"https:\/\/docs.adyen.com\/api-explorer\/Webhooks\/latest\/post\/CANCEL_OR_REFUND\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">CANCEL_OR_REFUND<\/a> webhook reference.<\/p>\n<h3>REFUND webhook<\/h3>\n<p>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 <a href=\"\/pt\/development-resources\/webhooks\">webhook<\/a> that includes:<\/p>\n<ul>\n<li><code>eventCode<\/code>: <strong>REFUND<\/strong>.<\/li>\n<li><code>pspReference<\/code>: the <code>pspReference<\/code> from the response for your refund request.<\/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\n<div id=\"tabXj06t\">\n    <div data-component-wrapper=\"tabs\">\n        <tabs\n                        :items=\"[{&quot;title&quot;:&quot;success: true&quot;,&quot;content&quot;:&quot;\\n&lt;pre&gt;&lt;code class=\\&quot;language-json\\&quot;&gt;{\\n   \\&quot;live\\&quot;:\\&quot;false\\&quot;,\\n   \\&quot;notificationItems\\&quot;:[\\n      {\\n         \\&quot;NotificationRequestItem\\&quot;:{\\n            \\&quot;amount\\&quot;:{\\n               \\&quot;currency\\&quot;:\\&quot;EUR\\&quot;,\\n               \\&quot;value\\&quot;:2500\\n            },\\n            \\&quot;eventCode\\&quot;:\\&quot;REFUND\\&quot;,\\n            \\&quot;eventDate\\&quot;:\\&quot;2021-11-01T00:19:34+01:00\\&quot;,\\n            \\&quot;merchantAccountCode\\&quot;:\\&quot;YOUR_MERCHANT_ACCOUNT\\&quot;,\\n            \\&quot;merchantReference\\&quot;: \\&quot;YOUR_UNIQUE_REFERENCE\\&quot;,\\n            \\&quot;originalReference\\&quot;:\\&quot;XB7XNCQ8HXSKGK82\\&quot;,\\n            \\&quot;paymentMethod\\&quot;:\\&quot;visa\\&quot;,\\n            \\&quot;pspReference\\&quot;:\\&quot;JDD6LKT8MBLZNN84\\&quot;,\\n            \\&quot;reason\\&quot;:\\&quot;\\&quot;,\\n            \\&quot;success\\&quot;:\\&quot;true\\&quot;\\n         }\\n      }\\n   ]\\n}&lt;\\\/code&gt;&lt;\\\/pre&gt;\\n&quot;,&quot;altTitle&quot;:null,&quot;oldTabId&quot;:&quot;success:_true_0_1&quot;,&quot;relation&quot;:&quot;&quot;},{&quot;title&quot;:&quot;success: false&quot;,&quot;content&quot;:&quot;\\n&lt;pre&gt;&lt;code class=\\&quot;language-json\\&quot;&gt;{\\n   \\&quot;live\\&quot;:\\&quot;false\\&quot;,\\n   \\&quot;notificationItems\\&quot;:[\\n      {\\n         \\&quot;NotificationRequestItem\\&quot;:{\\n            \\&quot;amount\\&quot;:{\\n               \\&quot;currency\\&quot;:\\&quot;EUR\\&quot;,\\n               \\&quot;value\\&quot;:2500\\n            },\\n            \\&quot;eventCode\\&quot;:\\&quot;REFUND\\&quot;,\\n            \\&quot;eventDate\\&quot;:\\&quot;2021-11-01T00:19:34+01:00\\&quot;,\\n            \\&quot;merchantAccountCode\\&quot;:\\&quot;YOUR_MERCHANT_ACCOUNT\\&quot;,\\n            \\&quot;merchantReference\\&quot;: \\&quot;YOUR_UNIQUE_REFERENCE\\&quot;,\\n            \\&quot;originalReference\\&quot;:\\&quot;XB7XNCQ8HXSKGK82\\&quot;,\\n            \\&quot;paymentMethod\\&quot;:\\&quot;visa\\&quot;,\\n            \\&quot;pspReference\\&quot;:\\&quot;JDD6LKT8MBLZNN84\\&quot;,\\n            \\&quot;reason\\&quot;:\\&quot;Transaction hasn&#039;t been captured, refund not possible\\&quot;,\\n            \\&quot;success\\&quot;:\\&quot;false\\&quot;\\n         }\\n      }\\n   ]\\n}&lt;\\\/code&gt;&lt;\\\/pre&gt;\\n&quot;,&quot;altTitle&quot;:null,&quot;oldTabId&quot;:&quot;success:_false_1_2&quot;,&quot;relation&quot;:&quot;&quot;}]\"\n            :should-update-when-url-changes='false'>\n        <\/tabs>\n    <\/div>\n<\/div>\n\n<p>For more information about the included fields, see the  <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<h3 id=\"failed-refund-request\">Reasons for failed refund validation<\/h3>\n<p>When our validations of a refund fail, you receive a webhook for the refund with <code>success<\/code>: <strong>false<\/strong> and the reason of the failure. The next table shows the most common reasons.<br \/>\n<a id=\"payment-balance\"><\/a><br \/>\nWhere the table mentions the <em>balance on the payment<\/em>, this 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<table>\n<thead>\n<tr>\n<th style=\"text-align: left;\"><code>reason<\/code><\/th>\n<th style=\"text-align: left;\">Description<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"text-align: left;\"><code>Requested refund amount too high<\/code><\/td>\n<td style=\"text-align: left;\">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 style=\"text-align: left;\"><code>Already partially refunded, new requested refund amount too high<\/code><\/td>\n<td style=\"text-align: left;\">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 style=\"text-align: left;\"><code>Already partially disputed, new requested refund amount too high<\/code><\/td>\n<td style=\"text-align: left;\">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 style=\"text-align: left;\"><code>Already fully refunded, no balance available for new requested refund<\/code><\/td>\n<td style=\"text-align: left;\">Full refund has been processed, and the remaining balance on the payment is 0.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>Partially refunded and partially disputed, no balance available for new requested refund<\/code><\/td>\n<td style=\"text-align: left;\">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 style=\"text-align: left;\"><code>Already fully disputed, no balance available for new requested refund<\/code><\/td>\n<td style=\"text-align: left;\">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 style=\"text-align: left;\"><code>Insufficient in-process funds on account<\/code><\/td>\n<td style=\"text-align: left;\">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 style=\"text-align: left;\"><code>Transaction hasn't been captured, refund not possible<\/code><\/td>\n<td style=\"text-align: left;\">The refund was requested before the transaction was captured. You need to <a href=\"\/pt\/online-payments\/cancel\">cancel<\/a> the transaction instead or wait until the transaction is settled.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>The maximum period for this operation has expired<\/code><\/td>\n<td style=\"text-align: left;\">The refund was requested past the expiration date permitted by the payment method to process the request.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>Amount too low to be accepted by Card Network<\/code><\/td>\n<td style=\"text-align: left;\">The refund amount was too low. The amount must be greater than 0.01 in any currency.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>Modification in different currency than authorisation<\/code><\/td>\n<td style=\"text-align: left;\">The refund was requested in a currency different from the currency in which the authorization was made.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h2>See also<\/h2>\n<div class=\"see-also-links output-inline\" id=\"see-also\">\n<ul><li><a href=\"\/unified-commerce\/digital-receipts\"\n                        target=\"_self\"\n                        >\n                    Digital receipts\n                <\/a><\/li><\/ul><\/div>\n","url":"https:\/\/docs.adyen.com\/pt\/unified-commerce\/referenced-refunds","articleFields":{"description":"Enable omnichannel returns with simple reconciliation and better fraud protection.","feedback_component":true,"type":"page","_expandable":{"operations":""},"status":"current","last_edit_on":"01-02-2022 14:06"},"algolia":{"url":"https:\/\/docs.adyen.com\/pt\/unified-commerce\/referenced-refunds","title":"Referenced refunds","content":"Customers appreciate the possibility of omnichannel returns, allowing them to return an ecommerce purchase to a physical store, or return their in-store purchase by sending it to your distribution center. With referenced refunds, you can offer omnichannel returns with a minimum of operational burden.\nReferenced refunds are not processed synchronously. When you send an API request for a referenced refund, the API response only confirms we received the request. We process the refund asynchronously, and inform you of the result through a webhook.\nRefunded amounts are deducted from the in-process funds of the merchant account that processed the original payment. For example, if a sale took place on MerchantAccount_ECOM and the product is returned to MerchantAccount_POS, the funds are taken from the ECOM account.\nRequirements\n\n\n\nRequirement\nDescription\n\n\n\n\nIntegration type\nAn online payments integration and an in-person payments integration.\n\n\nWebhooks\nSubscribe to Standard webhooks.\n\n\nSetup steps\nBefore you begin: Synchronize your back-end systems. Ask our Support Team to enable refunds on the company level.\n\n\n\nSynchronize your back-end systems\nA requirement for omnichannel returns is that you have access to transaction information of all sales channels. For referenced refunds, this transaction information must include the PSP reference.\nIdeally you have a central database where you store information from both ecommerce and point-of-sale transactions. If you store the ecommerce and point-of-sale transaction information separately on different systems, these systems must be able read each other's data.\nEnable on the company level\nTo process returns between multiple merchant accounts, in this case omnichannel returns between ecommerce and point-of-sale merchants accounts, you need to contact our Support Team to enable refunds on the company level. You can then use the  \/payments\/{paymentPspReference}\/refunds endpoint to submit returns for any merchant account under your company account. \nBenefits\nOmnichannel referenced refunds offer the following benefits.\n\n\nSimpler reconciliation\nOn our unified payments platform we assign a unique identifier to each transaction. This identifier is known as the PSP&nbsp;reference. When you issue a referenced refund, you specify the PSP reference of the original payment. In this way, you can match each refund against a payment, regardless of the sales channel. You have the complete audit trail of a payment including any full or partial refunds.\n\n\nBetter fraud protection\nA referenced refund returns the funds to the payment method that was used for the original payment, not to the card the shopper is presenting in the store or as cash. This helps combat various return fraud types like returning stolen merchandise, receipt fraud, and cross-retailer returns.\n\n\nNever more than 100%\nWhen using referenced refunds, payments cannot be refunded multiple times, or for an amount exceeding 100% of the payment value.\n\n\nRefund authorization\nRefund 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.\nAdyen supports this for:\n\nAmerican Express\nDiscover\nMastercard\nVisa\n\nAs 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.\nIssuers can decline a refund authorization for reasons like:\n\nLost or expired card\nInvalid card number\nClosed account\nSuspected fraud\n\nWhen a refund authorization is declined, we still try to process the refund.\nPilot to prepare for 2026 changes\nAdyen is currently running a pilot where declined refund authorizations are handled differently:\n\nWe do not proceed with the refund. In your Customer Area, the transaction status remains Settled.\n\nWe 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.\n\n\n\n\n\nThis 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.\nThe behavior described above will become the default in 2026. 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.\nRefund options\nTo issue a full or partial referenced refund, you have these options:\n\n\nTerminal API reversal request: your POS app sends a Terminal API ReversalRequest to the payment terminal. The request includes the PSP reference of the original point-of-sale or ecommerce purchase. The terminal generates a receipt, and the funds are returned to the original card or other payment method without the need for the customer to present a card to the payment terminal.\n\n\nServer-to-server refund: you make a POST request to the \/payments\/{paymentPspReference}\/refunds endpoint, where paymentPspReference is the PSP reference of the original point-of-sale or ecommerce purchase.\n\n\nRefund from your Customer Area: this is a good option if you do not issue refunds often. We describe this in the Account section of our documentation.\n\n\nSend a Terminal API reversal request\nWhen you make a POS payment, the Terminal API response returns the transaction identifier of the payment in the format tenderReference.pspReference. To make a referenced refund, you specify this transaction identifier in your refund request.\nHowever, the tenderReference is generated by the payment terminal, and is missing for an ecommerce payment. In that case you include only the PSP reference, in the format .pspReference.\nYou can make a:\n\nFull refund to return the total value of the purchase to the shopper.\nPartial refund to return part of the purchase to the shopper. For example, when a shopper returns one of the items they purchased. You can also make multiple partial refunds. For example, when a shopper returns several items at different times.\n\nSelect a tab to see the parameters that you need to specify for a full referenced refund, or a partial referenced refund.\n\n\n    \n        \n        \n    \n\n\n\n\nRefunding an ecommerce payment\nAn ecommerce payment does have a PSP reference, but the tender reference is missing because it is generated by the terminal. To refund an ecommerce payment, you need to know the PSP reference, the date, and the currency of the original payment.\n\n\n    \n        \n        \n    \n\n\nSend a server-to-server refund request\nTo return funds to the shopper:\n\n\nFrom the  information of the payment you want to refund, get the PSP reference.\n\n\nMake a  \/payments\/{paymentPspReference}\/refunds request, including the following:\nIn your request, include:\n\n\n\nParameter\nRequired\nDescription\n\n\n\n\npaymentPspReference Path parameter\n\nThe PSP reference of the payment. You can find this in the following: The webhook message with eventCode: AUTHORISATION for the payment.In your Customer Area, in the list of payments (Transactions &gt; Payments).If you made a  \/payments request for the payment, the  \/payments response.\n\n\nmerchantAccount\n\nThe name of your merchant account that is used to process the payment.\n\n\namount\n\nThe amount that you want to refund. The value must be the same or, in case of a partial refund, less than the captured amount. The currency must match the currency used in the authorization.\n\n\nreference\n\nYour reference for the refund, for example to tag a partial refund for future reconciliation. The reference parameter is required for GrabPay refunds.\n\n\nmerchantRefundReason\n\nThe reason for the refund request. Possible values: FRAUDCUSTOMER REQUESTRETURNDUPLICATEOTHER\n\n\n\n\n\n\n\n\nWhen you receive the  \/payments\/{paymentPspReference}\/refunds response, note:\n\npaymentPspReference: the PSP reference of the authorization you want to refund.\npspReference: Adyen's unique reference associated with this refund request.\n\n\n\n\n\n\nWait for the REFUND webhook to learn the outcome of the refund request.\n\n\nWebhooks\nRefunds are not processed synchronously. When you send an API request for a referenced refund, the API response only confirms we received the request.\nWe process the refund asynchronously, and inform you of the result through a webhook.\n\nFor a Terminal API reversal request, we return a CANCEL_OR_REFUND webhook.\nFor a server-to-server refund, we return a REFUND webhook\n\n\nTo receive updates about your refunds, you must set up webhooks.\n\nCANCEL_OR_REFUND webhook\nBefore we send your Terminal API reversal 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  CANCEL_OR_REFUND webhook that includes:\n\n\n\nParameter\nDescription\n\n\n\n\neventCode\nCANCEL_OR_REFUND\n\n\noriginalReference\nThe PSP reference of the original payment.\n\n\npspReference\nThe PSP reference of the reversal that you can find in the  \/payments\/{paymentPspReference}\/reversals response\n\n\nsuccess\nIndicates 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.\n\n\n\n\n    \n\nFor more information about the included fields, see the  CANCEL_OR_REFUND webhook reference.\nREFUND webhook\nBefore 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:\n\neventCode: REFUND.\npspReference: the pspReference from the response for your refund request.\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\n    \n        \n        \n    \n\n\nFor more information about the included fields, see the  REFUND webhook reference.\nReasons for failed refund validation\nWhen 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.\n\nWhere the table mentions the balance on the payment, this 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\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\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\nAmount too low to be accepted by Card Network\nThe refund amount was too low. The amount must be greater than 0.01 in any currency.\n\n\nModification in different currency than authorisation\nThe refund was requested in a currency different from the currency in which the authorization was made.\n\n\n\nSee also\n\n\n                    Digital receipts\n                \n","type":"page","locale":"pt","boost":18,"hierarchy":{"lvl0":"Home","lvl1":"Omnichannel","lvl2":"Referenced refunds"},"hierarchy_url":{"lvl0":"https:\/\/docs.adyen.com\/pt","lvl1":"https:\/\/docs.adyen.com\/pt\/unified-commerce","lvl2":"\/pt\/unified-commerce\/referenced-refunds"},"levels":3,"category":"Omnichannel","category_color":"green","tags":["Referenced","refunds"]},"articleFiles":{"refund-payment_0.json":"<p alt=\"\">refund-payment_0.json<\/p>","refund-payment_1.json":"<p alt=\"\">refund-payment_1.json<\/p>"}}
