{"title":"Unreferenced refund","category":"default","creationDate":1737556560,"content":"<p>To return funds to a shopper after a payment is approved, you need to refund the payment. Unreferenced refunds let you return any amount to any card presented to the payment terminal. But you need to manually reconcile those refunds.<\/p>\n<p>If you want to use unreferenced refunds, we highly recommend that you ensure your POS app can reconcile a refund against the original purchase. This reduces the risk of return fraud (a payment being refunded multiple times), and human error (store staff enter the wrong refund amount).<\/p>\n<p>Also consider checking beforehand if the card that the shopper presents to the terminal is the same card that was used for the original payment. To do so, you need to implement card acquisition and save the card alias of all transactions. See <a href=\"\/pt\/point-of-sale\/shopper-recognition\/before-refund\">card acquisition before refunding<\/a>.<\/p>\n<h2>Requirements<\/h2>\n<p>Before you begin, take into account the following requirements, limitations, and preparations.<\/p>\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;\">A <a href=\"\/pt\/point-of-sale\/basic-tapi-integration\/\">Terminal API integration<\/a> with payment terminals or with a <a href=\"\/pt\/point-of-sale\/ipp-mobile\/\">Mobile solution<\/a>.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><strong><a href=\"\/pt\/development-resources\/api-credentials\">API credentials<\/a><\/strong><\/td>\n<td style=\"text-align: left;\">To enable unreferenced refunds using API calls, you must have an API credential with an API key and the following <a href=\"\/pt\/development-resources\/api-credentials#api-permissions\">role<\/a>: <ul><li markdown=\"1\"><strong>Management API\u2014Terminal settings read and write<\/strong><\/li><\/ul> <br>If you have a Terminal API integration with <a href=\"\/pt\/point-of-sale\/design-your-integration\/choose-your-architecture#cloud-communications\">cloud-based communications<\/a>, you can use the existing API key that you use for Terminal API requests.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><strong><a href=\"\/pt\/account\/user-roles\">Customer Area roles<\/a><\/strong><\/td>\n<td style=\"text-align: left;\">To enable unreferenced refunds using the Customer Area, you must have the following role: <ul><li markdown=\"1\"><strong>Merchant POS Terminal Management<\/strong><\/li><\/ul><\/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 the following webhook: <ul><li markdown=\"1\"><strong><a href=\"\/pt\/point-of-sale\/basic-tapi-integration\/refund-payment\/refund-webhooks\/#refund-with-data-webhook\">REFUND_WITH_DATA webhook<\/a><\/strong><\/li><\/ul><\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><strong>Limitations<\/strong><\/td>\n<td style=\"text-align: left;\">Note the following limitations: <ul><li markdown=\"1\">Due to anti-money laundering and payment industry regulations, it is not possible to enable unreferenced refunds for certain <a href=\"\/pt\/get-started-with-adyen\/adyen-glossary\/#merchant-category-code\">Merchant Category Codes (MCC)<\/a> and in the following countries: <ul><li markdown=\"1\">Brazil<\/li><li markdown=\"1\">Mexico<\/li><li markdown=\"1\">Australia<\/li><li markdown=\"1\">Malaysia<\/li><li markdown=\"1\">Singapore<\/li><li markdown=\"1\">Hong Kong<\/li><li markdown=\"1\">India<\/li><\/ul><\/li><li markdown=\"1\">It is not possible to make unreferenced refunds to a QR code wallet, such as Alipay and WeChat Pay. To refund these payment methods, you must make a referenced refund.<\/li><\/ul><\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><strong>Setup steps<\/strong><\/td>\n<td style=\"text-align: left;\">To enable unreferenced refunds at the company or merchant account level, 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>. <br> To enable unreferenced refunds on the store or for an individual terminal or mobile device, follow the setup steps for your <a href=\"#enable-through-the-customer-area\">Customer Area<\/a> or for <a href=\"#enable-with-api-calls\">making API calls<\/a>.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h2>Enable unreferenced refunds<\/h2>\n<p>You can enable unreferenced refunds at the store or terminal level in two ways:<\/p>\n<ul>\n<li><a href=\"#enable-through-the-customer-area\">Through the Customer Area<\/a><\/li>\n<li><a href=\"#enable-with-api-calls\">By making API calls<\/a><\/li>\n<\/ul>\n<p>Optionally, 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:<\/p>\n<ul>\n<li>Enable unreferenced refunds at the company or merchant account level.<\/li>\n<li>A refund delay, so you have time to <a href=\"\/pt\/point-of-sale\/basic-tapi-integration\/refund-payment\/cancel-unreferenced\">cancel an unreferenced refund<\/a> when necessary.<\/li>\n<\/ul>\n<h3>Enable through the Customer Area<\/h3>\n<p>To enable unreferenced refund for a store or for an individual terminal or mobile device through the Customer Area:<\/p>\n<ol>\n<li>Log in to your <a href=\"https:\/\/ca-test.adyen.com\/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\" class=\"external-link no-image\">Customer Area<\/a> and select the store or terminal.<\/li>\n<li>Go to <strong>Terminal Settings<\/strong> &gt; <strong>Payment features<\/strong> &gt; <strong>Refund<\/strong>.<\/li>\n<li>Under <strong>Unreferenced refunds<\/strong>, select <strong>Enabled<\/strong>.<\/li>\n<li>Optionally, under <strong>Offline refund limit<\/strong>, select <strong>Add new currency limit<\/strong> and enter the maximum amount you want to allow for offline refunds..\n<div class=\"notices yellow\">\n<p>Due to anti-money laundering and payment industry regulations, it is not always possible to enable unreferenced refunds. An error message will inform you if unreferenced refunds are not allowed: <ul><li markdown=\"1\"><code>Unreferenced refunds are not permitted for the country of this store.<\/code><\/li><li markdown=\"1\"><code>Unreferenced refunds are not permitted for this account or store due to its merchant category code.<\/code><\/li><\/ul><\/p>\n<\/div><\/li>\n<li>Select <strong>Save<\/strong>.<\/li>\n<\/ol>\n<h3>Enable with API calls<\/h3>\n<p>To enable unreferenced refunds at the store or terminal level using API calls:<\/p>\n<ol>\n<li>\n<p>Make a PATCH request to the <code>\/terminalSettings<\/code> endpoint for the store or terminal.<br \/>\nUse one of the following endpoints:<\/p>\n<ul>\n<li>PATCH  <a href=\"https:\/\/docs.adyen.com\/api-explorer\/Management\/latest\/patch\/stores\/(storeId)\/terminalSettings\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">\/stores\/{storeId}\/terminalSettings<\/a><\/li>\n<li>PATCH  <a href=\"https:\/\/docs.adyen.com\/api-explorer\/Management\/latest\/patch\/terminals\/(terminalId)\/terminalSettings\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">\/terminals\/{terminalId}\/terminalSettings<\/a><\/li>\n<\/ul>\n<p>In the request body include a <code>refunds<\/code> object with:<\/p>\n<ul>\n<li><code>unreferenced.enableUnreferencedRefunds<\/code>: Indicates whether unreferenced refunds are enabled on the terminal or mobile device. Set this to <span translate=\"no\"><strong>true<\/strong><\/span> to enable unreferenced refunds.<\/li>\n<\/ul>\n<p>The following example shows how to enable unreferenced refunds on the terminal level.<\/p>\n<div data-component-wrapper=\"code-sample\">\n<code-sample :title=\"' PATCH \/terminals\/(terminalId)\/terminalSettings request'\" :id=\"'enable-unreferenced-refunds'\" :code-data=\"[{&quot;language&quot;:&quot;bash&quot;,&quot;tabTitle&quot;:&quot;&quot;,&quot;content&quot;:&quot;curl https:\\\/\\\/management-test.adyen.com\\\/v3\\\/terminals\\\/{terminalId}\\\/terminalSettings \\\\\\n-H 'x-API-key: ADYEN_API_KEY' \\\\\\n-X Patch \\\\\\n-d '{\\n     \\&quot;refunds\\&quot;: {\\n        \\&quot;unreferenced\\&quot;: {\\n            \\&quot;enableUnreferencedRefunds\\&quot;: true\\n        }\\n     }\\n   }'&quot;}]\" :enable-copy-link-to-code-block=\"true\" :code-sample-card-size=\"'fullsize'\"><\/code-sample>\n<\/div>\n<div class=\"notices yellow\">\n<p>Due to anti-money laundering and payment industry regulations, it is not always possible to enable unreferenced refunds. The example below shows an error message returned when unreferenced refunds cannot be enabled.<\/p>\n<\/div>\n<div data-component-wrapper=\"code-sample\">\n<code-sample :title=\"'Error message - Unreferenced refunds not permitted'\" :id=\"''\" :code-data=\"[{&quot;language&quot;:&quot;json&quot;,&quot;tabTitle&quot;:&quot;&quot;,&quot;content&quot;:&quot;{\\n \\&quot;type\\&quot;: \\&quot;https:\\\/\\\/docs.adyen.com\\\/errors\\\/validation\\&quot;,\\n \\&quot;title\\&quot;: \\&quot;Invalid parameters\\&quot;,\\n \\&quot;status\\&quot;: 422,\\n \\&quot;detail\\&quot;: \\&quot;Field 'device.allowRefund' is not valid. Reason: Unreferenced refunds are not permitted for this account or store due to its merchant category code.\\&quot;,\\n \\&quot;errorCode\\&quot;: \\&quot;33_808\\&quot;\\n }&quot;}]\" :enable-copy-link-to-code-block=\"true\" :code-sample-card-size=\"'fullsize'\"><\/code-sample>\n<\/div>\n<\/li>\n<\/ol>\n<h2 id=\"unreferenced-request\">Make an unreferenced refund<\/h2>\n<div class=\"notices yellow\">\n<p>For an unreferenced refund to a gift card, you need to specify more parameters than we describe here. Refer to <a href=\"\/pt\/point-of-sale\/gift-cards-terminal-api\/refund-gift-cards\">Make a refund to a gift card<\/a>.<\/p>\n<\/div>\n<ol>\n<li>\n<p><a href=\"\/pt\/point-of-sale\/basic-tapi-integration\/make-a-payment\">Make a payment request<\/a>, specifying:<\/p>\n<ul>\n<li>\n<p>The standard <a href=\"\/pt\/point-of-sale\/design-your-integration\/terminal-api#request-message-header\">\n  <code>SaleToPOIRequest.MessageHeader<\/code>\n<\/a> object, with <code>MessageClass<\/code> set to <span translate=\"no\"><strong>Service<\/strong><\/span> and <code>MessageCategory<\/code> set to <span translate=\"no\"><strong>Payment<\/strong><\/span>.<\/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>ProtocolVersion<\/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;\"><strong>3.0<\/strong><\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>MessageClass<\/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;\"><span translate=\"no\"><strong>Service<\/strong><\/span><\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>MessageCategory<\/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;\"><span translate=\"no\"><strong>Payment<\/strong><\/span><\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>MessageType<\/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;\"><span translate=\"no\"><strong>Request<\/strong><\/span><\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>ServiceID<\/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;\">Your unique ID for this request, consisting of 1-10 alphanumeric characters. Must be unique within the last 48 hours for the terminal (<code>POIID<\/code>) being used.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>SaleID<\/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;\">Your unique ID for the POS system component to send this request from.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>POIID<\/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 unique ID of the terminal to send this request to. Format: <em>[device model]-[serial number]<\/em>.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/li>\n<\/ul>\n<ul>\n<li>\n<p>The  <a href=\"https:\/\/docs.adyen.com\/api-explorer\/terminal-api\/latest\/post\/payment\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">PaymentRequest<\/a> object with:<\/p>\n<table>\n<thead>\n<tr>\n<th style=\"text-align: left;\">Parameter<\/th>\n<th style=\"text-align: left;\">Description<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"text-align: left;\"><code>SaleData.SaleTransactionID<\/code><\/td>\n<td style=\"text-align: left;\">An object with: <ul><li markdown=\"1\"><code>TransactionID<\/code>: your unique reference to identify the refund. Your Customer Area and Adyen reports show this ID as the <strong>merchant reference<\/strong> for the transaction. If the original payment was an <a href=\"\/pt\/point-of-sale\/offline-payment\">offline payment<\/a>, you can make reconciliation easier by including the <strong>tender reference of the offline payment<\/strong>. <\/li> <li markdown=\"1\"><code>TimeStamp<\/code>: Date and time of the refund in <a href=\"https:\/\/en.wikipedia.org\/wiki\/ISO_8601#Coordinated_Universal_Time_(UTC)\" target=\"_blank\" rel=\"nofollow noopener noreferrer\" class=\"external-link no-image\">UTC format<\/a>.<\/li><\/ul><\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>PaymentTransaction.AmountsReq<\/code><\/td>\n<td style=\"text-align: left;\">An object with: <ul><li markdown=\"1\"><code>Currency<\/code>: The transaction <a href=\"\/pt\/development-resources\/currency-codes\">currency<\/a>.<\/li><li markdown=\"1\"><code>RequestedAmount<\/code>: The amount being refunded to the card.<\/li><\/ul><\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>PaymentData.PaymentType<\/code><\/td>\n<td style=\"text-align: left;\"><span translate=\"no\"><strong>Refund<\/strong><\/span><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/li>\n<\/ul>\n<p>The following example shows how to refund EUR 10.99 to a card.<\/p>\n<div data-component-wrapper=\"code-sample\">\n<code-sample :title=\"''\" :id=\"'refund-payment_2'\" :code-data='[{\"language\":\"json\",\"tabTitle\":\"JSON\",\"content\":\"{\\n    \\\"SaleToPOIRequest\\\":{\\n        \\\"MessageHeader\\\":{\\n            \\\"ProtocolVersion\\\":\\\"3.0\\\",\\n            \\\"MessageClass\\\":\\\"Service\\\",\\n            \\\"MessageCategory\\\":\\\"Payment\\\",\\n            \\\"MessageType\\\":\\\"Request\\\",\\n            \\\"SaleID\\\":\\\"POSSystemID12345\\\",\\n            \\\"ServiceID\\\":\\\"175\\\",\\n            \\\"POIID\\\":\\\"V400m-324688179\\\"\\n        },\\n        \\\"PaymentRequest\\\":{\\n            \\\"SaleData\\\":{\\n                \\\"SaleTransactionID\\\":{\\n                    \\\"TimeStamp\\\":\\\"2022-02-04T11:54:28.000Z\\\",\\n                    \\\"TransactionID\\\":\\\"YOUR_REFUND_REFERENCE\\\"\\n                }\\n            },\\n            \\\"PaymentTransaction\\\":{\\n                \\\"AmountsReq\\\":{\\n                    \\\"Currency\\\":\\\"EUR\\\",\\n                    \\\"RequestedAmount\\\":10.99\\n                }\\n            },\\n            \\\"PaymentData\\\":{\\n                \\\"PaymentType\\\":\\\"Refund\\\"\\n            }\\n        }\\n    }\\n}\"},{\"language\":\"java\",\"tabTitle\":\"Java\",\"content\":\"String saleID = \\\"YOUR_CASH_REGISTER_ID\\\";\\nString serviceID = \\\"YOUR_UNIQUE_ATTEMPT_ID\\\";\\nString POIID = \\\"YOUR_TERMINAL_ID\\\";\\nString transactionID = \\\"YOUR_UNIQUE_TRANSACTION_ID\\\";\\n\\nSaleToPOIRequest saleToPOIRequest = new SaleToPOIRequest();\\nMessageHeader messageHeader = new MessageHeader();\\nmessageHeader.setProtocolVersion(\\\"3.0\\\");\\nmessageHeader.setMessageClass( MessageClassType.SERVICE );\\nmessageHeader.setMessageCategory( MessageCategoryType.PAYMENT );\\nmessageHeader.setMessageType( MessageType.REQUEST );\\nmessageHeader.setSaleID(saleID);\\nmessageHeader.setServiceID(serviceID);\\nmessageHeader.setPOIID(POIID);\\nsaleToPOIRequest.setMessageHeader(messageHeader);\\n\\nPaymentRequest paymentRequest = new PaymentRequest();\\nSaleData saleData = new SaleData();\\nTransactionIdentification saleTransactionID = new TransactionIdentification();\\nsaleTransactionID.setTimeStamp(DatatypeFactory.newInstance().newXMLGregorianCalendar(new GregorianCalendar()));\\nsaleTransactionID.setTransactionID(transactionID);\\nsaleData.setSaleTransactionID(saleTransactionID);\\npaymentRequest.setSaleData(saleData);\\n\\nPaymentTransaction paymentTransaction = new PaymentTransaction();\\nAmountsReq amountsReq = new AmountsReq();\\namountsReq.setCurrency(\\\"EUR\\\");\\namountsReq.setRequestedAmount( BigDecimal.valueOf(10.99) );\\npaymentTransaction.setAmountsReq(amountsReq);\\npaymentRequest.setPaymentTransaction(paymentTransaction);\\n\\nPaymentData paymentData = new PaymentData();\\npaymentData.setPaymentType( PaymentType.REFUND );\\npaymentRequest.setPaymentData(paymentData);\\nsaleToPOIRequest.setPaymentRequest(paymentRequest);\\nterminalAPIRequest.setSaleToPOIRequest(saleToPOIRequest);\"}]' :enable-copy-link-to-code-block=\"true\" :code-sample-card-size=\"'fullsize'\"><\/code-sample>\n<\/div>\n<\/li>\n<li>\n<p>Let the shopper complete the transaction on the terminal. The terminal prompts the shopper to present their card, and then shows that the transaction is approved.<\/p>\n<\/li>\n<li>\n<p>When you receive the  <a href=\"https:\/\/docs.adyen.com\/api-explorer\/terminal-api\/latest\/post\/payment#responses-200\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">PaymentResponse<\/a>, note the following:<\/p>\n<ul>\n<li><code>Response.Result<\/code>: <span translate=\"no\"><strong>Success<\/strong><\/span>. This means we received your request. Usually, the refund is processed asynchronously.\n<div class=\"notices green\">\n<p>Whether the refund is processed synchronously or asynchronously depends on the card scheme and the country\/region where the card is used. If processed synchronously, you get the <code>acquirerResponseCode<\/code> in the <code>AdditionalResponse<\/code>.<\/p>\n<\/div><\/li>\n<li><code>POIData.POITransactionID.TransactionID<\/code>: the <a href=\"\/pt\/point-of-sale\/design-your-integration\/terminal-api#transaction-identifier\">transaction identifier<\/a> for this refund request, in the format <code>tenderReference.pspReference<\/code>.<\/li>\n<li><code>PaymentReceipt<\/code>: the generated receipt data. This includes <span translate=\"no\"><strong>transaction_type_refund<\/strong><\/span>.<\/li>\n<li><code>SaleData.SaleTransactionID.TransactionID<\/code>: the reference you provided in the request.<\/li>\n<li><code>Response.AdditionalResponse<\/code> with:\n<ul>\n<li><code>transactionType<\/code>: <span translate=\"no\"><strong>REFUND<\/strong><\/span><\/li>\n<li><code>posAuthAmountValue<\/code>: the refund amount (in <a href=\"\/pt\/development-resources\/currency-codes\">minor units<\/a>) that we try to get authorized.<\/li>\n<li><code>pspReference<\/code>: the PSP reference for this refund request.<\/li>\n<li><code>acquirerResponseCode<\/code>: if this field is included, the request was processed synchronously. The value <span translate=\"no\"><strong>Approved<\/strong><\/span> means the refund is approved.<\/li>\n<\/ul><\/li>\n<\/ul>\n<div data-component-wrapper=\"code-sample\">\n<code-sample :title=\"'Unreferenced refund response'\" :id=\"''\" :code-data='[{\"language\":\"json\",\"tabTitle\":\"\",\"content\":\"\\t{\\n       \\\"SaleToPOIResponse\\\": {\\n           \\\"MessageHeader\\\": {\\n               \\\"MessageCategory\\\": \\\"Payment\\\",\\n               \\\"MessageClass\\\": \\\"Service\\\",\\n               \\\"MessageType\\\": \\\"Response\\\",\\n               \\\"POIID\\\": \\\"V400m-324688179\\\",\\n               \\\"ProtocolVersion\\\": \\\"3.0\\\",\\n               \\\"SaleID\\\": \\\"POSSystemID12345\\\",\\n               \\\"ServiceID\\\": \\\"175\\\"\\n           },\\n           \\\"PaymentResponse\\\": {\\n               \\\"POIData\\\": {\\n                   \\\"POIReconciliationID\\\": \\\"1000\\\",\\n                   \\\"POITransactionID\\\": {\\n                       \\\"TimeStamp\\\": \\\"2022-02-04T11:54:29.000Z\\\",\\n                       \\\"TransactionID\\\": \\\"ItS6001643972069002.ZC4R4RBFJGXXGN82\\\"\\n                   }\\n               },\\n               \\\"PaymentReceipt\\\": [...],\\n               \\\"PaymentResult\\\": {\\n                   \\\"AmountsResp\\\": {\\n                       \\\"AuthorizedAmount\\\": 10.99,\\n                       \\\"Currency\\\": \\\"EUR\\\"\\n                   },\\n                   ...\\n                   \\\"PaymentAcquirerData\\\": {\\n                       \\\"AcquirerPOIID\\\": \\\"V400m-324688179\\\",\\n                       \\\"AcquirerTransactionID\\\": {\\n                           \\\"TimeStamp\\\": \\\"2022-02-04T11:54:29.000Z\\\",\\n                           \\\"TransactionID\\\": \\\"ZC4R4RBFJGXXGN82\\\"\\n                       },\\n                       \\\"MerchantID\\\": \\\"ADYEN_MERCHANT_ACCOUNT\\\"\\n                   },\\n                   \\\"PaymentInstrumentData\\\": {\\n                       \\\"CardData\\\": {...}\\n                       },\\n                       \\\"PaymentInstrumentType\\\": \\\"Card\\\"\\n                   },\\n                   \\\"PaymentType\\\": \\\"Refund\\\"\\n               },\\n               \\\"Response\\\": {\\n                   \\\"AdditionalResponse\\\": \\\"...transactionType=REFUND...{hint:This is included only if the refund is processed synchronously.}acquirerResponseCode=APPROVED{\\\/hint}...posAuthAmountValue=1099...pspReference=ZC4R4RBFJGXXGN82...alias=P601291289070502\\\",\\n                   \\\"Result\\\": \\\"Success\\\"\\n               },\\n               \\\"SaleData\\\": {\\n                   \\\"SaleTransactionID\\\": {\\n                       \\\"TimeStamp\\\": \\\"2022-02-04T10:54:26.740Z\\\",\\n                       \\\"TransactionID\\\": \\\"YOUR_REFUND_REFERENCE\\\"\\n                   }\\n               }\\n           }\\n       }\\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=\"\/pt\/point-of-sale\/basic-tapi-integration\/refund-payment\/refund-webhooks#refund-with-data-webhook\">REFUND_WITH_DATA webhook<\/a> to learn the outcome. If successful, the refund is issued to the shopper's account.<\/p>\n<\/li>\n<\/ol>\n<h2>See also<\/h2>\n<div class=\"see-also-links output-inline\" id=\"see-also\">\n<ul><li><a href=\"\/point-of-sale\/basic-tapi-integration\/refund-payment\/cancel-unreferenced\"\n                        target=\"_self\"\n                        >\n                    Cancel an unreferenced refund\n                <\/a><\/li><li><a href=\"\/point-of-sale\/basic-tapi-integration\/refund-payment\/refund-webhooks\"\n                        target=\"_self\"\n                        >\n                    Outcome of a refund\n                <\/a><\/li><li><a href=\"\/point-of-sale\/offline-payment#making-refunds-while-offline\"\n                        target=\"_self\"\n                        >\n                    Making refunds while offline\n                <\/a><\/li><li><a href=\"\/point-of-sale\/standalone\/standalone-use#refund\"\n                        target=\"_self\"\n                        >\n                    Refunds on standalone terminals\n                <\/a><\/li><li><a href=\"https:\/\/help.adyen.com\/knowledge\/payments\/refunds\/\"\n                        target=\"_blank\"\n                         class=\"external\">\n                    FAQs: Refunds\n                <\/a><\/li><\/ul><\/div>\n","url":"https:\/\/docs.adyen.com\/pt\/point-of-sale\/basic-tapi-integration\/refund-payment\/unreferenced","articleFields":{"description":"Issue a point-of-sale refund to any card presented to the payment terminal.","feedback_component":true,"type":"page","_expandable":{"operations":""},"status":"current","filters_component":false,"decision_tree":"[]","page_id":"51f08523-e835-43d7-a503-fa797044c531","last_edit_on":"22-01-2025 15:36"},"algolia":{"url":"https:\/\/docs.adyen.com\/pt\/point-of-sale\/basic-tapi-integration\/refund-payment\/unreferenced","title":"Unreferenced refund","content":"To return funds to a shopper after a payment is approved, you need to refund the payment. Unreferenced refunds let you return any amount to any card presented to the payment terminal. But you need to manually reconcile those refunds.\nIf you want to use unreferenced refunds, we highly recommend that you ensure your POS app can reconcile a refund against the original purchase. This reduces the risk of return fraud (a payment being refunded multiple times), and human error (store staff enter the wrong refund amount).\nAlso consider checking beforehand if the card that the shopper presents to the terminal is the same card that was used for the original payment. To do so, you need to implement card acquisition and save the card alias of all transactions. See card acquisition before refunding.\nRequirements\nBefore you begin, take into account the following requirements, limitations, and preparations.\n\n\n\nRequirement\nDescription\n\n\n\n\nIntegration type\nA Terminal API integration with payment terminals or with a Mobile solution.\n\n\nAPI credentials\nTo enable unreferenced refunds using API calls, you must have an API credential with an API key and the following role: Management API\u2014Terminal settings read and write If you have a Terminal API integration with cloud-based communications, you can use the existing API key that you use for Terminal API requests.\n\n\nCustomer Area roles\nTo enable unreferenced refunds using the Customer Area, you must have the following role: Merchant POS Terminal Management\n\n\nWebhooks\nSubscribe to the following webhook: REFUND_WITH_DATA webhook\n\n\nLimitations\nNote the following limitations: Due to anti-money laundering and payment industry regulations, it is not possible to enable unreferenced refunds for certain Merchant Category Codes (MCC) and in the following countries: BrazilMexicoAustraliaMalaysiaSingaporeHong KongIndiaIt is not possible to make unreferenced refunds to a QR code wallet, such as Alipay and WeChat Pay. To refund these payment methods, you must make a referenced refund.\n\n\nSetup steps\nTo enable unreferenced refunds at the company or merchant account level, contact our Support Team.  To enable unreferenced refunds on the store or for an individual terminal or mobile device, follow the setup steps for your Customer Area or for making API calls.\n\n\n\nEnable unreferenced refunds\nYou can enable unreferenced refunds at the store or terminal level in two ways:\n\nThrough the Customer Area\nBy making API calls\n\nOptionally, contact our Support Team to enable:\n\nEnable unreferenced refunds at the company or merchant account level.\nA refund delay, so you have time to cancel an unreferenced refund when necessary.\n\nEnable through the Customer Area\nTo enable unreferenced refund for a store or for an individual terminal or mobile device through the Customer Area:\n\nLog in to your Customer Area and select the store or terminal.\nGo to Terminal Settings &gt; Payment features &gt; Refund.\nUnder Unreferenced refunds, select Enabled.\nOptionally, under Offline refund limit, select Add new currency limit and enter the maximum amount you want to allow for offline refunds..\n\nDue to anti-money laundering and payment industry regulations, it is not always possible to enable unreferenced refunds. An error message will inform you if unreferenced refunds are not allowed: Unreferenced refunds are not permitted for the country of this store.Unreferenced refunds are not permitted for this account or store due to its merchant category code.\n\nSelect Save.\n\nEnable with API calls\nTo enable unreferenced refunds at the store or terminal level using API calls:\n\n\nMake a PATCH request to the \/terminalSettings endpoint for the store or terminal.\nUse one of the following endpoints:\n\nPATCH  \/stores\/{storeId}\/terminalSettings\nPATCH  \/terminals\/{terminalId}\/terminalSettings\n\nIn the request body include a refunds object with:\n\nunreferenced.enableUnreferencedRefunds: Indicates whether unreferenced refunds are enabled on the terminal or mobile device. Set this to true to enable unreferenced refunds.\n\nThe following example shows how to enable unreferenced refunds on the terminal level.\n\n\n\n\nDue to anti-money laundering and payment industry regulations, it is not always possible to enable unreferenced refunds. The example below shows an error message returned when unreferenced refunds cannot be enabled.\n\n\n\n\n\n\nMake an unreferenced refund\n\nFor an unreferenced refund to a gift card, you need to specify more parameters than we describe here. Refer to Make a refund to a gift card.\n\n\n\nMake a payment request, specifying:\n\n\nThe standard \n  SaleToPOIRequest.MessageHeader\n object, with MessageClass set to Service and MessageCategory set to Payment.\n\n\n\nParameter\nRequired\nDescription\n\n\n\n\nProtocolVersion\n\n3.0\n\n\nMessageClass\n\nService\n\n\nMessageCategory\n\nPayment\n\n\nMessageType\n\nRequest\n\n\nServiceID\n\nYour unique ID for this request, consisting of 1-10 alphanumeric characters. Must be unique within the last 48 hours for the terminal (POIID) being used.\n\n\nSaleID\n\nYour unique ID for the POS system component to send this request from.\n\n\nPOIID\n\nThe unique ID of the terminal to send this request to. Format: [device model]-[serial number].\n\n\n\n\n\n\n\nThe  PaymentRequest object with:\n\n\n\nParameter\nDescription\n\n\n\n\nSaleData.SaleTransactionID\nAn object with: TransactionID: your unique reference to identify the refund. Your Customer Area and Adyen reports show this ID as the merchant reference for the transaction. If the original payment was an offline payment, you can make reconciliation easier by including the tender reference of the offline payment.  TimeStamp: Date and time of the refund in UTC format.\n\n\nPaymentTransaction.AmountsReq\nAn object with: Currency: The transaction currency.RequestedAmount: The amount being refunded to the card.\n\n\nPaymentData.PaymentType\nRefund\n\n\n\n\n\nThe following example shows how to refund EUR 10.99 to a card.\n\n\n\n\n\nLet the shopper complete the transaction on the terminal. The terminal prompts the shopper to present their card, and then shows that the transaction is approved.\n\n\nWhen you receive the  PaymentResponse, note the following:\n\nResponse.Result: Success. This means we received your request. Usually, the refund is processed asynchronously.\n\nWhether the refund is processed synchronously or asynchronously depends on the card scheme and the country\/region where the card is used. If processed synchronously, you get the acquirerResponseCode in the AdditionalResponse.\n\nPOIData.POITransactionID.TransactionID: the transaction identifier for this refund request, in the format tenderReference.pspReference.\nPaymentReceipt: the generated receipt data. This includes transaction_type_refund.\nSaleData.SaleTransactionID.TransactionID: the reference you provided in the request.\nResponse.AdditionalResponse with:\n\ntransactionType: REFUND\nposAuthAmountValue: the refund amount (in minor units) that we try to get authorized.\npspReference: the PSP reference for this refund request.\nacquirerResponseCode: if this field is included, the request was processed synchronously. The value Approved means the refund is approved.\n\n\n\n\n\n\n\nWait for the REFUND_WITH_DATA webhook to learn the outcome. If successful, the refund is issued to the shopper's account.\n\n\nSee also\n\n\n                    Cancel an unreferenced refund\n                \n                    Outcome of a refund\n                \n                    Making refunds while offline\n                \n                    Refunds on standalone terminals\n                \n                    FAQs: Refunds\n                \n","type":"page","locale":"pt","boost":16,"hierarchy":{"lvl0":"Home","lvl1":"Terminais","lvl2":"Implement the payment flow","lvl3":"Reembolsar um pagamento","lvl4":"Unreferenced refund"},"hierarchy_url":{"lvl0":"https:\/\/docs.adyen.com\/pt","lvl1":"https:\/\/docs.adyen.com\/pt\/point-of-sale","lvl2":"https:\/\/docs.adyen.com\/pt\/point-of-sale\/basic-tapi-integration","lvl3":"https:\/\/docs.adyen.com\/pt\/point-of-sale\/basic-tapi-integration\/refund-payment","lvl4":"\/pt\/point-of-sale\/basic-tapi-integration\/refund-payment\/unreferenced"},"levels":5,"category":"In-person payments","category_color":"green","tags":["Unreferenced","refund"]}}
