{"title":"Handle responses","category":"default","creationDate":1560352500,"content":"<p>Terminal API responses inform you about the processing status of your request. The status of your request is communicated in the <code>Response<\/code> object of the API response. The sections below explain the structure of the response and detail the steps you can take to handle common error scenarios, such as:<\/p>\n<ul>\n<li>The request failed because it was invalid.<\/li>\n<li>You made a payment request but didn't receive a result.<\/li>\n<li>The result of your payment request indicates the transaction failed.<\/li>\n<\/ul>\n<h2>Response object format<\/h2>\n<p>To be able to resolve issues with your requests, you need to know how Terminal API informs you of the processing status of your request. This is communicated in the <code>Response<\/code> object of the API response, which has:<\/p>\n<ul>\n<li><code>Result<\/code>: one of the following values:\n<ul>\n<li><span translate=\"no\"><strong>Success<\/strong><\/span>: The request succeeded \/ the transaction was approved on the terminal.<\/li>\n<li><span translate=\"no\"><strong>Partial<\/strong><\/span>: The transaction amount has been partially approved.<\/li>\n<li><span translate=\"no\"><strong>Failure<\/strong><\/span>: The request or transaction didn't succeed. The remaining <code>Response<\/code> fields provide more information about the error, to enable you to determine how to handle it.<\/li>\n<\/ul><\/li>\n<li><code>ErrorCondition<\/code>: This field is included when the request or transaction fails, and indicates the cause of the failure.<\/li>\n<li><code>AdditionalResponse<\/code>: More information about the error condition. You'll receive either a string of form-encoded key-value pairs or a Base64 string that you need to decode to get a JSON object.<\/li>\n<\/ul>\n<p>The information in the <code>Response<\/code> object help you to identify if and why a request has failed.<\/p>\n<h2 id=\"invalid-message-format\">Invalid message format<\/h2>\n<p>A <code>Response<\/code> object with <code>Result<\/code> <span translate=\"no\"><strong>Failure<\/strong><\/span> and <code>ErrorCondition<\/code> <span translate=\"no\"><strong>MessageFormat<\/strong><\/span> indicates there was a mistake in the request you sent. Proceed as follows:<\/p>\n<ol>\n<li>\n<p>Determine what caused the error, based on the <code>message<\/code>, <code>warnings<\/code>, or <code>errors<\/code> in the <code>AdditionalResponse<\/code>. For example, a missing required field or an unexpected field.<\/p>\n<p>The following example is for a response indicating that the <code>Currency<\/code> field is missing from the payment request:<\/p>\n<div data-component-wrapper=\"code-sample\">\n<code-sample :title=\"'Currency missing'\" :id=\"''\" :code-data='[{\"language\":\"json\",\"tabTitle\":\"\",\"content\":\"{\\n...\\n   \\\"Response\\\":{\\n      \\\"Result\\\":\\\"Failure\\\",\\n      \\\"AdditionalResponse\\\": \\\"errors=At%20SaleToPOIRequest.PaymentRequest.PaymentTransaction.AmountsReq%2c%20field%20Currency%3a%20Missing\\\",\\n      \\\"ErrorCondition\\\":\\\"MessageFormat\\\"\\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>Refer to the  <a href=\"https:\/\/docs.adyen.com\/api-explorer\/terminal-api\/latest\/overview\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Terminal API<\/a> reference if necessary, then manually fix your request and try again.<\/p>\n<\/li>\n<\/ol>\n<h2 id=\"invalid-json\">Invalid JSON format<\/h2>\n<p>If your API request does not contain a valid JSON object, you receive a <span translate=\"no\"><strong>Bad JSON<\/strong><\/span> HTTP reply that specifies the line number and a description of the issue:<\/p>\n<div data-component-wrapper=\"code-sample\">\n    <code-sample :title=\"'Bad JSON'\" :id=\"''\" :code-data='[{\"language\":\"json\",\"tabTitle\":\"\",\"content\":\"[\\\"Bad JSON:LINE_NUMBER: DESCRIPTION\\\"]\"}]' :enable-copy-link-to-code-block=\"true\" :code-sample-card-size=\"'fullsize'\"><\/code-sample>\n<\/div>\n<ul>\n<li>Manually fix the JSON error on the line mentioned in the HTTP reply and try again.<\/li>\n<\/ul>\n<h2 id=\"unavailable-service\">Unavailable service<\/h2>\n<p>A <code>Response<\/code> object with <code>Result<\/code> <span translate=\"no\"><strong>Failure<\/strong><\/span> and <code>ErrorCondition<\/code> <span translate=\"no\"><strong>UnavailableService<\/strong><\/span> indicates we were unable to implement your request. Proceed as follows:<\/p>\n<ol>\n<li>\n<p>Determine what caused the error, based on the <code>message<\/code>, <code>warnings<\/code>, or <code>errors<\/code> in the <code>AdditionalResponse<\/code>. For example:<\/p>\n<ul>\n<li>You tried to use functionality that the payment terminal doesn't support.<\/li>\n<li>You tried to use a <span translate=\"no\"><strong>ProtocolVersion<\/strong><\/span> that the terminal cannot manage.<\/li>\n<li>You tried to use functionality that we do not support.<\/li>\n<\/ul>\n<p>The following example is for a response indicating that there's a mismatch between the protocol versions (2.0 in the request and 3.0 on the terminal):<\/p>\n<div data-component-wrapper=\"code-sample\">\n<code-sample :title=\"'Unavailable Service'\" :id=\"''\" :code-data='[{\"language\":\"json\",\"tabTitle\":\"\",\"content\":\"{\\n...\\n   \\\"Response\\\": {\\n      \\\"Result\\\": \\\"Failure\\\",\\n      \\\"AdditionalResponse\\\": \\\"message=Sale%20Protocol%20Version%202.0%20mismatch%2c%20Version%20implemented%3a%203.0\\\",\\n      \\\"ErrorCondition\\\": \\\"UnavailableService\\\"\\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>Depending on the cause of the error, manually fix your request and send it again. For example, after receiving the above failure response you'd specify the same protocol version that the terminal supports.<\/p>\n<\/li>\n<\/ol>\n<h2 id=\"no-result-received\">No result received<\/h2>\n<p>We recommend that your integration automatically checks the status of a transaction any time it fails to receive a transaction response.<\/p>\n<p>Payment requests time out after a while. If you do not receive a payment response (or you receive a response indicating a time-out) after 120 seconds (local integration) or 150 seconds (cloud integration), and the internet connection hasn't dropped, your integration should automatically check the transaction status.<\/p>\n<p>If you do not receive a transaction result, neither synchronously nor asynchronously, proceed as follows:<\/p>\n<ol>\n<li>\n<p><a href=\"\/point-of-sale\/basic-tapi-integration\/verify-transaction-status\">Make a transaction status request<\/a>.<\/p>\n<\/li>\n<li>\n<p>Determine your next action based on the  <a href=\"https:\/\/docs.adyen.com\/api-explorer\/terminal-api\/latest\/post\/transactionstatus#responses-200-Response\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">TransactionStatusResponse.Response<\/a>:<\/p>\n<table>\n<thead>\n<tr>\n<th style=\"text-align: left;\">Response<\/th>\n<th style=\"text-align: left;\">Description<\/th>\n<th style=\"text-align: left;\">Action<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"text-align: left;\"><code>Result<\/code> <span translate=\"no\"><strong>Success<\/strong><\/span><\/td>\n<td style=\"text-align: left;\">The transaction was processed.<\/td>\n<td style=\"text-align: left;\">Use the <code>RepeatedResponseMessageBody<\/code> to determine how to process the transaction.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>ErrorCondition<\/code> <span translate=\"no\"><strong>InProgress<\/strong><\/span><\/td>\n<td style=\"text-align: left;\">The payment terminal is waiting for a response from the shopper, or there is a delay with the card issuer.<\/td>\n<td style=\"text-align: left;\">Continue making a transaction status request for this transaction every five seconds until you receive a response indicating the transaction was processed.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>ErrorCondition<\/code> <span translate=\"no\"><strong>NotFound<\/strong><\/span><\/td>\n<td style=\"text-align: left;\">Possible causes: <ul><li markdown=\"1\">The details you specified in the transaction status request are incorrect.<\/li><li markdown=\"1\">We did not receive your request; maybe your connection dropped after sending the request.<\/li><\/ul><\/td>\n<td style=\"text-align: left;\">Possible actions: <ul><li markdown=\"1\">Provide the details of the <em>original<\/em> transaction in the <code>MessageReference<\/code> of your transaction status request.<\/li><li markdown=\"1\">Retry the <em>original<\/em> transaction.<\/li><\/ul><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/li>\n<\/ol>\n<h2 id=\"terminal-unavailable\">Terminal unavailable (cloud integration)<\/h2>\n<p>When you send a <a href=\"\/point-of-sale\/basic-tapi-integration\/make-a-payment\">payment request<\/a> to a payment terminal that is unavailable, the payment cannot be processed. In a cloud integration, the Terminal API generates a <span translate=\"no\"><strong>Reject<\/strong><\/span> <a href=\"\/point-of-sale\/design-your-integration\/notifications\/event-notifications\">event notification<\/a>.<\/p>\n<div class=\"sc-notice info\"><div>\n<p>Note that event notifications are always presented as a <code>SaleToPOIRequest<\/code>.<\/p>\n<\/div><\/div>\n<p>The <code>EventNotification<\/code> body contains:<\/p>\n<ul>\n<li><code>RejectedMessage<\/code>: a Base64 string containing the payment request that couldn't be processed. Decode this to get the original payment request as a JSON object.<\/li>\n<li><code>EventToNotify<\/code>: <span translate=\"no\"><strong>Reject<\/strong><\/span><\/li>\n<li><code>EventDetails<\/code>: a message indicating why the payment terminal is unavailable.<\/li>\n<\/ul>\n<p>Here's an example event notification for an unavailable payment terminal in a cloud integration:<\/p>\n<div data-component-wrapper=\"code-sample\">\n    <code-sample :title=\"'Terminal unavailable'\" :id=\"''\" :code-data='[{\"language\":\"json\",\"tabTitle\":\"\",\"content\":\"{\\n   \\\"SaleToPOIRequest\\\": {\\n      \\\"EventNotification\\\": {\\n         \\\"EventToNotify\\\": \\\"Reject\\\",\\n         \\\"EventDetails\\\": \\\"message=Did+not+receive+a+response+from+the+POI.\\\",\\n         \\\"RejectedMessage\\\": \\\"ewoi...0KfQo=\\\",\\n         \\\"TimeStamp\\\": \\\"2020-03-31T10:28:39.515Z\\\"\\n      },\\n      \\\"MessageHeader\\\": {\\n         \\\"DeviceID\\\": \\\"666568147\\\",\\n         \\\"MessageCategory\\\": \\\"Event\\\",\\n         \\\"MessageClass\\\": \\\"Event\\\",\\n         \\\"MessageType\\\": \\\"Notification\\\",\\n         \\\"POIID\\\": \\\"P400Plus-123456789\\\",\\n         \\\"ProtocolVersion\\\": \\\"3.0\\\",\\n         \\\"SaleID\\\": \\\"saleid-4c32759faaa7\\\",\\n         \\\"ServiceID\\\": \\\"31122609\\\"\\n      }\\n   }\\n}\"}]' :enable-copy-link-to-code-block=\"true\" :code-sample-card-size=\"'fullsize'\"><\/code-sample>\n<\/div>\n<p>The steps that you can take, relate to the <code>EventDetails<\/code> message you receive:<\/p>\n<h4>Did not receive a response<\/h4>\n<pre><code class=\"language-raw\">\"message=Did+not+receive+a+response+from+the+POI.\"<\/code><\/pre>\n<p>This message indicates that the request was sent but the payment terminal didn't respond, possibly because the WebSocket is down at the terminal.<\/p>\n<ul>\n<li><a href=\"\/point-of-sale\/basic-tapi-integration\/verify-transaction-status\">Make a transaction status request<\/a> to verify whether the WebSocket connection has been restored and the payment is now processed.<\/li>\n<\/ul>\n<h4>Failed to send message<\/h4>\n<pre><code class=\"language-raw\">\"message=Failed+to+send+message+to+POI.+There+may+be+a+network+issue+or+it+may+not+have+the+websocket+connected.\"<\/code><\/pre>\n<p>This message indicates that probably the WebSocket for the payment terminal is not available on the cloud router for Terminal API.<\/p>\n<ul>\n<li>\n<p>Check the WebSocket connection:<\/p>\n<ul>\n<li>The terminal display should have a cloud icon in the top row.<\/li>\n<li>\n<p><a href=\"\/point-of-sale\/diagnostics\/check-cloud-connection\">Check the cloud connection<\/a> from your Customer Area, using an API request, or on the terminal itself.<\/p>\n<!-- list separator -->\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h4>Unknown POIID<\/h4>\n<pre><code class=\"language-raw\">\"message=Unknown+POIID+P400Plus-123456789\"<\/code><\/pre>\n<p>This message indicates that the terminal ID (POIID) in the payment request is incorrect, or that the terminal is in the inventory of the Company account and hasn't been <a href=\"\/point-of-sale\/managing-terminals\/assign-terminals\">assigned<\/a> to a merchant account or store that allows processing payments.<\/p>\n<ol>\n<li>On the payment terminal, go to the <a href=\"\/point-of-sale\/menu-access\">\n  <strong>Device info<\/strong>\n<\/a> menu option and verify that the terminal ID in the format <em>[device model]-[serial number]<\/em> matches the POIID that you specified in the payment request. For example, P400Plus-123456789.<br \/>\nIf the POIID matches, go to the next step.<\/li>\n<li>Verify that the payment terminal is assigned to a merchant account or store. You can do this using a GET  <a href=\"https:\/\/docs.adyen.com\/api-explorer\/Management\/latest\/get\/terminals\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">\/terminals<\/a> request, or using your <a href=\"https:\/\/ca-test.adyen.com\/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\" class=\"external-link no-image\">Customer Area<\/a>.<\/li>\n<\/ol>\n<h2 id=\"declined-payment\">Declined payment<\/h2>\n<p>When the  <a href=\"https:\/\/docs.adyen.com\/api-explorer\/terminal-api\/latest\/post\/payment#responses-200-Response\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">PaymentResponse.Response<\/a> includes <code>Result<\/code> <span translate=\"no\"><strong>Failure<\/strong><\/span> and one of the <a href=\"#error_conditions\">error conditions<\/a> listed below, the transaction was declined.<br \/>\nThe <code>AdditionalResponse<\/code> has more information about why the transaction was declined in the <code>refusalReason<\/code> and <code>message<\/code> fields. These fields are our mapping of the response we receive from acquirers and issuers.<\/p>\n<p>Here's an example failure response for a declined payment:<\/p>\n<div data-component-wrapper=\"code-sample\">\n    <code-sample :title=\"'Additional response'\" :id=\"''\" :code-data='[{\"language\":\"json\",\"tabTitle\":\"\",\"content\":\"{\\n...\\n   \\\"Response\\\": {\\n      \\\"Result\\\": \\\"Failure\\\",\\n      \\\"AdditionalResponse\\\": \\\"refusalReason=214%Declined%20online...&amp;message=CANCELLED...\\\",\\n      \\\"ErrorCondition\\\": \\\"Refusal\\\"\\n   }\\n...\\n}\"}]' :enable-copy-link-to-code-block=\"true\" :code-sample-card-size=\"'fullsize'\"><\/code-sample>\n<\/div>\n<p>When your payment request is declined, you need to determine whether you can retry it:<\/p>\n<ol>\n<li>\n<p>Check the  <a href=\"https:\/\/docs.adyen.com\/api-explorer\/terminal-api\/latest\/post\/payment#responses-200-Response-ErrorCondition\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">ErrorCondition<\/a> in the <code>PaymentResponse.Response<\/code>, because in many cases this already indicates whether you can retry the transaction. <a id=\"error_conditions\"><\/a><\/p>\n<table>\n<thead>\n<tr>\n<th style=\"text-align: left;\">Error condition<\/th>\n<th style=\"text-align: center;\">Retry?<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"text-align: left;\"><span translate=\"no\"><strong>Aborted<\/strong><\/span><\/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<\/tr>\n<tr>\n<td style=\"text-align: left;\"><span translate=\"no\"><strong>Busy<\/strong><\/span><\/td>\n<td style=\"text-align: center;\">See next step<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><span translate=\"no\"><strong>Cancel<\/strong><\/span><\/td>\n<td style=\"text-align: center;\">See next step<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><span translate=\"no\"><strong>DeviceOut<\/strong><\/span><\/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<\/tr>\n<tr>\n<td style=\"text-align: left;\"><span translate=\"no\"><strong>InvalidCard<\/strong><\/span><\/td>\n<td style=\"text-align: center;\">See next step<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><span translate=\"no\"><strong>NotAllowed<\/strong><\/span><\/td>\n<td style=\"text-align: center;\"><img title=\"-x-\" alt=\"-x-\" class=\"smileys\" src=\"\/user\/data\/smileys\/emoji\/x.png\" \/><\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><span translate=\"no\"><strong>Refusal<\/strong><\/span><\/td>\n<td style=\"text-align: center;\">See next step<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><span translate=\"no\"><strong>UnreachableHost<\/strong><\/span><\/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<\/tr>\n<tr>\n<td style=\"text-align: left;\"><span translate=\"no\"><strong>WrongPIN<\/strong><\/span><\/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<\/tr>\n<\/tbody>\n<\/table>\n<\/li>\n<li>\n<p>For the error conditions <span translate=\"no\"><strong>Cancel<\/strong><\/span>, <span translate=\"no\"><strong>InvalidCard<\/strong><\/span>, and <span translate=\"no\"><strong>Refusal<\/strong><\/span>, check the <code>AdditionalResponse<\/code> for the <code>refusalReason<\/code> and <code>message<\/code>. For the error condition <span translate=\"no\"><strong>Busy<\/strong><\/span>, check the response for a <code>serviceId<\/code>. You can use this if you want to cancel the transaction.<\/p>\n<div class=\"sc-notice note\"><div>\n<p>You can use the <code>ErrorCondition<\/code> to code your POS app. The <code>refusalReason<\/code> and <code>Message<\/code> fields are included for additional insight, and should not be coded against.<br \/>\nThe <code>serviceId<\/code> can be used by the POS app to cancel a transaction.<\/p>\n<\/div><\/div>\n<p>Select the tabs for details.<\/p>\n\n<div id=\"tabbcv3a\">\n    <div data-component-wrapper=\"tabs\">\n        <tabs\n                        :items=\"[{&quot;title&quot;:&quot;Cancel&quot;,&quot;content&quot;:&quot;\\n&lt;table&gt;\\n&lt;thead&gt;\\n&lt;tr&gt;\\n&lt;th style=\\&quot;text-align: left;\\&quot;&gt;ErrorCondition&lt;\\\/th&gt;\\n&lt;th style=\\&quot;text-align: left;\\&quot;&gt;refusalReason&lt;\\\/th&gt;\\n&lt;th style=\\&quot;text-align: left;\\&quot;&gt;message&lt;\\\/th&gt;\\n&lt;th style=\\&quot;text-align: left;\\&quot;&gt;Retry?&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;Cancel&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;Approved&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;APPROVED&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;&lt;img title=\\&quot;-x-\\&quot; alt=\\&quot;-x-\\&quot; class=\\&quot;smileys\\&quot; src=\\&quot;\\\/user\\\/data\\\/smileys\\\/emoji\\\/x.png\\&quot; \\\/&gt;&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;Cancel&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;(all other refusalReasons)&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;(all other messages)&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&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;\\\/tr&gt;\\n&lt;\\\/tbody&gt;\\n&lt;\\\/table&gt;\\n&lt;p&gt;The &lt;code&gt;ErrorCondition&lt;\\\/code&gt; &lt;span translate=\\&quot;no\\&quot;&gt;&lt;strong&gt;Cancel&lt;\\\/strong&gt;&lt;\\\/span&gt; can be caused by a device &lt;a href=\\&quot;#time-out\\&quot;&gt;time-out&lt;\\\/a&gt;.&lt;\\\/p&gt;\\n&quot;,&quot;altTitle&quot;:null,&quot;oldTabId&quot;:1,&quot;relation&quot;:&quot;&quot;},{&quot;title&quot;:&quot;Busy&quot;,&quot;content&quot;:&quot;\\n&lt;table&gt;\\n&lt;thead&gt;\\n&lt;tr&gt;\\n&lt;th style=\\&quot;text-align: left;\\&quot;&gt;ErrorCondition&lt;\\\/th&gt;\\n&lt;th style=\\&quot;text-align: left;\\&quot;&gt;serviceId&lt;\\\/th&gt;\\n&lt;th style=\\&quot;text-align: left;\\&quot;&gt;message&lt;\\\/th&gt;\\n&lt;th style=\\&quot;text-align: left;\\&quot;&gt;Retry?&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;Busy&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;1234567890&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;Forbidden Request, Service Dialogue PaymentRequest is in Progress&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;&lt;img title=\\&quot;-x-\\&quot; alt=\\&quot;-x-\\&quot; class=\\&quot;smileys\\&quot; src=\\&quot;\\\/user\\\/data\\\/smileys\\\/emoji\\\/x.png\\&quot; \\\/&gt;&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;Busy&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;ADMIN_MENU&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;&lt;img title=\\&quot;-x-\\&quot; alt=\\&quot;-x-\\&quot; class=\\&quot;smileys\\&quot; src=\\&quot;\\\/user\\\/data\\\/smileys\\\/emoji\\\/x.png\\&quot; \\\/&gt;&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;Busy&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;(all other messages)&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;&lt;img title=\\&quot;-x-\\&quot; alt=\\&quot;-x-\\&quot; class=\\&quot;smileys\\&quot; src=\\&quot;\\\/user\\\/data\\\/smileys\\\/emoji\\\/x.png\\&quot; \\\/&gt;&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;\\\/tbody&gt;\\n&lt;\\\/table&gt;\\n&lt;p&gt;Using the &lt;code&gt;serviceId&lt;\\\/code&gt; you can make an &lt;a href=\\&quot;\\\/point-of-sale\\\/basic-tapi-integration\\\/cancel-a-transaction#cancel-from-register\\&quot;&gt;\\n  &lt;code&gt;AbortRequest&lt;\\\/code&gt;\\n&lt;\\\/a&gt; to cancel the in-progress transaction that the terminal is busy with.&lt;\\\/p&gt;\\n&quot;,&quot;altTitle&quot;:null,&quot;oldTabId&quot;:1,&quot;relation&quot;:&quot;&quot;},{&quot;title&quot;:&quot;InvalidCard&quot;,&quot;content&quot;:&quot;\\n&lt;table&gt;\\n&lt;thead&gt;\\n&lt;tr&gt;\\n&lt;th style=\\&quot;text-align: left;\\&quot;&gt;ErrorCondition&lt;\\\/th&gt;\\n&lt;th style=\\&quot;text-align: left;\\&quot;&gt;refusalReason&lt;\\\/th&gt;\\n&lt;th style=\\&quot;text-align: left;\\&quot;&gt;message&lt;\\\/th&gt;\\n&lt;th style=\\&quot;text-align: left;\\&quot;&gt;Retry?&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;InvalidCard&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;Card data authentication failed&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;DECLINED&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;&lt;img title=\\&quot;-x-\\&quot; alt=\\&quot;-x-\\&quot; class=\\&quot;smileys\\&quot; src=\\&quot;\\\/user\\\/data\\\/smileys\\\/emoji\\\/x.png\\&quot; \\\/&gt;&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;InvalidCard&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;No checking account available on Card&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;NO_CHECKING_ACCOUNT_AVAILABLE_ON_CARD&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&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;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;InvalidCard&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;No savings account available on Card&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;NO_SAVINGS_ACCOUNT_AVAILABLE_ON_CARD&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&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;\\\/tr&gt;\\n&lt;\\\/tbody&gt;\\n&lt;\\\/table&gt;\\n&quot;,&quot;altTitle&quot;:null,&quot;oldTabId&quot;:1,&quot;relation&quot;:&quot;&quot;},{&quot;title&quot;:&quot;Refusal&quot;,&quot;content&quot;:&quot;\\n&lt;table&gt;\\n&lt;thead&gt;\\n&lt;tr&gt;\\n&lt;th style=\\&quot;text-align: left;\\&quot;&gt;ErrorCondition&lt;\\\/th&gt;\\n&lt;th style=\\&quot;text-align: left;\\&quot;&gt;refusalReason&lt;\\\/th&gt;\\n&lt;th style=\\&quot;text-align: left;\\&quot;&gt;message&lt;\\\/th&gt;\\n&lt;th style=\\&quot;text-align: left;\\&quot;&gt;Retry?&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;Refusal&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;Acquirer Error&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;ERROR&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&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;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;Refusal&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;AID banned&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;ERROR&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;&lt;img title=\\&quot;-x-\\&quot; alt=\\&quot;-x-\\&quot; class=\\&quot;smileys\\&quot; src=\\&quot;\\\/user\\\/data\\\/smileys\\\/emoji\\\/x.png\\&quot; \\\/&gt;&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;Refusal&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;Always refused&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;DECLINED&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;&lt;img title=\\&quot;-x-\\&quot; alt=\\&quot;-x-\\&quot; class=\\&quot;smileys\\&quot; src=\\&quot;\\\/user\\\/data\\\/smileys\\\/emoji\\\/x.png\\&quot; \\\/&gt;&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;Refusal&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;Amount too low to be accepted by Card Network&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;DECLINED&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;&lt;img title=\\&quot;-x-\\&quot; alt=\\&quot;-x-\\&quot; class=\\&quot;smileys\\&quot; src=\\&quot;\\\/user\\\/data\\\/smileys\\\/emoji\\\/x.png\\&quot; \\\/&gt;&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;Refusal&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;Card is blocked&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;BLOCK_CARD&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;&lt;img title=\\&quot;-x-\\&quot; alt=\\&quot;-x-\\&quot; class=\\&quot;smileys\\&quot; src=\\&quot;\\\/user\\\/data\\\/smileys\\\/emoji\\\/x.png\\&quot; \\\/&gt;&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;Refusal&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;Card requires online pin&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;PIN_REQUIRED&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&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;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;Refusal&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;CVC Declined&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;CVC_DECLINED&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&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;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;Refusal&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;declined&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;DECLINED&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&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;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;Refusal&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;Declined Non Generic&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;DECLINED&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&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;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;Refusal&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;Do Not Honor&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;DECLINED&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;&lt;img title=\\&quot;-x-\\&quot; alt=\\&quot;-x-\\&quot; class=\\&quot;smileys\\&quot; src=\\&quot;\\\/user\\\/data\\\/smileys\\\/emoji\\\/x.png\\&quot; \\\/&gt;&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;Refusal&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;Expired Card&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;CARD_EXPIRED&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&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;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;Refusal&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;Issuer Suspected Fraud&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;ISSUER_SUSPECTED_FRAUD&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;&lt;img title=\\&quot;-x-\\&quot; alt=\\&quot;-x-\\&quot; class=\\&quot;smileys\\&quot; src=\\&quot;\\\/user\\\/data\\\/smileys\\\/emoji\\\/x.png\\&quot; \\\/&gt;&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;Refusal&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;Mobile PIN required&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;MOBILE_PIN_REQUIRED&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&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;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;Refusal&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;Not enough balance&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;NOT_ENOUGH_BALANCE&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&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;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;Refusal&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;Not Submitted&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;NOT_SUBMITTED&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&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;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;Refusal&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;Not supported&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;NOT_SUPPORTED&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&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;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;Refusal&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;Pin tries exceeded&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;PIN_TRIES_EXCEEDED&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&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;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;Refusal&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;Pin validation not possible&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;PIN_VALIDATION_NOT_POSSIBLE&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;&lt;img title=\\&quot;-x-\\&quot; alt=\\&quot;-x-\\&quot; class=\\&quot;smileys\\&quot; src=\\&quot;\\\/user\\\/data\\\/smileys\\\/emoji\\\/x.png\\&quot; \\\/&gt;&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;Refusal&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;Refused&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;DECLINED&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&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;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;Refusal&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;Restricted Card&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;RESTRICTED_CARD&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;&lt;img title=\\&quot;-x-\\&quot; alt=\\&quot;-x-\\&quot; class=\\&quot;smileys\\&quot; src=\\&quot;\\\/user\\\/data\\\/smileys\\\/emoji\\\/x.png\\&quot; \\\/&gt;&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;Refusal&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;Timeout waiting for card after contactless fallback&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;CONTACTLESS_FALLBACK&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&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;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;Refusal&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;Transaction Not Permitted&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;TRANSACTION_NOT_PERMITTED&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&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;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;Refusal&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;Withdrawal amount exceeded&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;WITHDRAWAL_AMOUNT_EXCEEDED&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&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;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;Refusal&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;Withdrawal count exceeded&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;WITHDRAWAL_COUNT_EXCEEDED&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&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;\\\/tr&gt;\\n&lt;\\\/tbody&gt;\\n&lt;\\\/table&gt;\\n&quot;,&quot;altTitle&quot;:null,&quot;oldTabId&quot;:1,&quot;relation&quot;:&quot;&quot;}]\"\n            :should-update-when-url-changes='false'>\n        <\/tabs>\n    <\/div>\n<\/div>\n\n<p>For more information, see our reference documentation for <a href=\"\/point-of-sale\/error-scenarios\/refusal-reasons-pos\">refusal reasons<\/a>. If you enabled receiving the <code>refusalReasonRaw<\/code> field in the <code>AdditionalResponse<\/code>, also see our reference documentation for <a href=\"\/point-of-sale\/error-scenarios\/raw-acquirer-responses\">raw acquirer responses<\/a>.<\/p>\n<div class=\"sc-notice note\"><div>\n<p>The <code>refusalReasonRaw<\/code> provides additional information. But if you base your code on it, that might break your integration because acquirers and issuers sometimes change their raw responses without notice.<\/p>\n<\/div><\/div>\n<\/li>\n<li>\n<p>If applicable, retry the transaction.<\/p>\n<\/li>\n<\/ol>\n<h2 id=\"time-out\">Time-out<\/h2>\n<p>Various time-outs can occur during a transaction:<\/p>\n<ul>\n<li>A <a href=\"\/point-of-sale\/error-scenarios\/pos-timeouts#processing-time-out\">processing time-out<\/a>. You receive a <span translate=\"no\"><strong>Failure<\/strong><\/span> response and the transaction is cancelled.<\/li>\n<li>A <a href=\"\/point-of-sale\/error-scenarios\/pos-timeouts#device-time-out\">device time-out<\/a>. You receive a <span translate=\"no\"><strong>Failure<\/strong><\/span> response and the transaction is cancelled.<\/li>\n<li>A <a href=\"\/point-of-sale\/error-scenarios\/pos-timeouts#request-time-out\">request time-out<\/a>. You receive an event notification and the transaction can still be completed on the payment terminal.<\/li>\n<\/ul>\n<table>\n<thead>\n<tr>\n<th style=\"text-align: left;\"><div style=\"width:130px\">Time-out<\/div><\/th>\n<th style=\"text-align: left;\">How to recognize<\/th>\n<th style=\"text-align: left;\">Action<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"text-align: left;\">Processing time-out<\/td>\n<td style=\"text-align: left;\">Transaction response with: <br><code>Response.Result<\/code>: <span translate=\"no\"><strong>Failure<\/strong><\/span> <br><code>ErrorCondition<\/code>: <span translate=\"no\"><strong>Communication&nbsp;timeout<\/strong><\/span><\/td>\n<td style=\"text-align: left;\">Retry the transaction using a different card or payment method.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\">Device time-out<\/td>\n<td style=\"text-align: left;\">Transaction response with: <br><code>Response.Result<\/code>: <span translate=\"no\"><strong>Failure<\/strong><\/span> <br><code>ErrorCondition<\/code>: <span translate=\"no\"><strong>Cancel<\/strong><\/span> <br><code>AdditionalResponse<\/code>: indicates the type of device time-out<\/td>\n<td style=\"text-align: left;\">Retry the transaction.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\">Request time-out<\/td>\n<td style=\"text-align: left;\">Event notification with: <br><code>EventToNotify<\/code>: <span translate=\"no\"><strong>Reject<\/strong><\/span> <br><code>EventDetails<\/code>: <span translate=\"no\"><strong>message=Timed+out+waiting+for+response+from+POI.<\/strong><\/span><\/td>\n<td style=\"text-align: left;\"><a href=\"\/point-of-sale\/basic-tapi-integration\/verify-transaction-status\">Make a transactions status request<\/a> to see if the transaction has been processed.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h2 id=\"error-conditions\">Error condition comparison<\/h2>\n<p>The table below compares error conditions and troubleshooting steps specific to making a <code>PaymentRequest<\/code>, <code>TransactionStatusRequest<\/code>, or <code>ReversalRequest<\/code> (a <a href=\"\/point-of-sale\/basic-tapi-integration\/refund-payment\/referenced\">referenced refund<\/a>).<\/p>\n<table>\n<thead>\n<tr>\n<th style=\"text-align: left;\">Error condition<\/th>\n<th style=\"text-align: left;\">PaymentRequest<\/th>\n<th style=\"text-align: left;\">TransactionStatusRequest<\/th>\n<th style=\"text-align: left;\">ReversalRequest<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"text-align: left;\">Aborted<\/td>\n<td style=\"text-align: left;\">Retry<\/td>\n<td style=\"text-align: left;\"><em>not applicable<\/em><\/td>\n<td style=\"text-align: left;\">Optionally retry<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\">Cancel<\/td>\n<td style=\"text-align: left;\">See <a href=\"#declined-payment\">Declined payment<\/a><\/td>\n<td style=\"text-align: left;\"><em>not applicable<\/em><\/td>\n<td style=\"text-align: left;\"><em>not applicable<\/em><\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\">DeviceOut<\/td>\n<td style=\"text-align: left;\">Wait and retry<\/td>\n<td style=\"text-align: left;\">Wait and retry<\/td>\n<td style=\"text-align: left;\">Wait and retry<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\">InProgress<\/td>\n<td style=\"text-align: left;\"><em>not applicable<\/em><\/td>\n<td style=\"text-align: left;\">See <a href=\"#no-result-received\">No result received<\/a><\/td>\n<td style=\"text-align: left;\"><em>not applicable<\/em><\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\">InvalidCard<\/td>\n<td style=\"text-align: left;\">See <a href=\"#declined-payment\">Declined payment<\/a><\/td>\n<td style=\"text-align: left;\"><em>not applicable<\/em><\/td>\n<td style=\"text-align: left;\"><em>not applicable<\/em><\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><a href=\"#invalid-message-format\">Invalid message format<\/a><\/td>\n<td style=\"text-align: left;\"><\/td>\n<td style=\"text-align: left;\"><\/td>\n<td style=\"text-align: left;\"><\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\">NotAllowed<\/td>\n<td style=\"text-align: left;\">Do not retry<\/td>\n<td style=\"text-align: left;\">Wait and retry<\/td>\n<td style=\"text-align: left;\">Wait and retry or Retry different device<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\">NotFound<\/td>\n<td style=\"text-align: left;\">Manual recovery<\/td>\n<td style=\"text-align: left;\">See <a href=\"#no-result-received\">No result received<\/a><\/td>\n<td style=\"text-align: left;\">Manual recovery<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\">Refusal<\/td>\n<td style=\"text-align: left;\">See <a href=\"#declined-payment\">Declined payment<\/a><\/td>\n<td style=\"text-align: left;\"><em>not applicable<\/em><\/td>\n<td style=\"text-align: left;\">Manual recovery<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><a href=\"#unavailable-service\">Unavailable service<\/a><\/td>\n<td style=\"text-align: left;\"><\/td>\n<td style=\"text-align: left;\"><\/td>\n<td style=\"text-align: left;\"><\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\">UnreachableHost<\/td>\n<td style=\"text-align: left;\">Retry<\/td>\n<td style=\"text-align: left;\">Retry<\/td>\n<td style=\"text-align: left;\">Retry<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\">WrongPIN<\/td>\n<td style=\"text-align: left;\">Retry<\/td>\n<td style=\"text-align: left;\"><em>not applicable<\/em><\/td>\n<td style=\"text-align: left;\"><em>not applicable<\/em><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h2>Unexpected card entry modes<\/h2>\n<p>A payment can fail if it is not within the transaction limits that you set or if the entry mode is not supported. For example, making a contactless chip transaction that is above the <strong>Contactless reader limit<\/strong>.<br \/>\nYou can check the <code>posEntryMode<\/code> inside the <code>AdditionalResponse<\/code> to see whether a card, a QR code, or another entry mode was used to make the transaction.<\/p>\n<p>The <code>posEntryMode<\/code> values can be:<\/p>\n<table>\n<thead>\n<tr>\n<th style=\"text-align: left;\">Entry mode<\/th>\n<th style=\"text-align: left;\">Description<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"text-align: left;\"><span translate=\"no\"><strong>CheckReader<\/strong><\/span><\/td>\n<td style=\"text-align: left;\">Check reader<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><span translate=\"no\"><strong>Contactless<\/strong><\/span><\/td>\n<td style=\"text-align: left;\">Magnetic Stripe Contactless card reader conform to ISO 14443<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><span translate=\"no\"><strong>File<\/strong><\/span><\/td>\n<td style=\"text-align: left;\">Account data on file<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><span translate=\"no\"><strong>ICC<\/strong><\/span><\/td>\n<td style=\"text-align: left;\">Contact ICC (asynchronous)<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><span translate=\"no\"><strong>Keyed<\/strong><\/span><\/td>\n<td style=\"text-align: left;\">Manual key entry<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><span translate=\"no\"><strong>MagStripe<\/strong><\/span><\/td>\n<td style=\"text-align: left;\">Magnetic stripe card reader<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><span translate=\"no\"><strong>Manual<\/strong><\/span><\/td>\n<td style=\"text-align: left;\">Reading of embossing or optical character recognition (OCR) of printed data either at time of transaction or after the event<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><span translate=\"no\"><strong>RFID<\/strong><\/span><\/td>\n<td style=\"text-align: left;\">Payment instrument information taken from RFID<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><span translate=\"no\"><strong>Scanned<\/strong><\/span><\/td>\n<td style=\"text-align: left;\">Scanned by a barcode reader<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><span translate=\"no\"><strong>MagStripe<\/strong><\/span><\/td>\n<td style=\"text-align: left;\">Magnetic stripe card reader<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><span translate=\"no\"><strong>SynchronousICC<\/strong><\/span><\/td>\n<td style=\"text-align: left;\">Contact ICC (synchronous)<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><span translate=\"no\"><strong>Tapped<\/strong><\/span><\/td>\n<td style=\"text-align: left;\">Contactless card reader<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>In some cases, you may want to enforce using a specific entry mode, for example when making a <a href=\"\/point-of-sale\/enter-payment-manually\/\">Manual key entry<\/a> payment. You can do this by specifying one of the entry modes from the table inside the  <a href=\"https:\/\/docs.adyen.com\/api-explorer\/terminal-api\/latest\/post\/payment#request-PaymentTransaction-TransactionConditions\" class=\" external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">TransactionConditions.ForceEntryMode<\/a> array of the payment request:<\/p>\n<div data-component-wrapper=\"code-sample\">\n    <code-sample :title=\"'Manual key entry payment'\" :id=\"'manual-keyed-entry_1'\" :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            \\\"ServiceID\\\":\\\"037\\\",\\n            \\\"SaleID\\\":\\\"POSSystemID12345\\\",\\n            \\\"POIID\\\":\\\"P400Plus-275040702\\\"\\n        },\\n        \\\"PaymentRequest\\\":{\\n            \\\"SaleData\\\":{\\n                \\\"SaleToAcquirerData\\\":\\\"\\\",\\n                \\\"SaleTransactionID\\\":{\\n                    \\\"TransactionID\\\":\\\"8377PME_POS\\\",\\n                    \\\"TimeStamp\\\":\\\"2021-01-19T11:03:39.000Z\\\"\\n                }\\n            },\\n            \\\"PaymentTransaction\\\":{\\n                \\\"AmountsReq\\\":{\\n                    \\\"RequestedAmount\\\":17.50,\\n                    \\\"Currency\\\":\\\"EUR\\\"\\n                },\\n                \\\"TransactionConditions\\\":{\\n                    \\\"ForceEntryMode\\\":[\\n                        \\\"Keyed\\\"\\n                    ]\\n                }\\n            }\\n        }\\n    }\\n}\"},{\"language\":\"java\",\"tabTitle\":\"Java\",\"content\":\"String POIID = \\\"YOUR_TERMINAL_ID\\\";\\nString serviceID = \\\"YOUR_UNIQUE_ATTEMPT_ID\\\";\\nString saleID = \\\"YOUR_CASH_REGISTER_ID\\\";\\nString transactionID = \\\"YOUR_UNIQUE_TRANSACTION_ID\\\";\\n\\nSaleToPOIRequest saleToPOIRequest = new SaleToPOIRequest();\\nMessageHeader messageHeader = new MessageHeader();\\nmessageHeader.setPOIID(POIID);\\nmessageHeader.setMessageClass( MessageClassType.SERVICE );\\nmessageHeader.setMessageType( MessageType.REQUEST );\\nmessageHeader.setProtocolVersion(\\\"3.0\\\");\\nmessageHeader.setServiceID(serviceID);\\nmessageHeader.setSaleID(saleID);\\nmessageHeader.setMessageCategory( MessageCategoryType.PAYMENT );\\nsaleToPOIRequest.setMessageHeader(messageHeader);\\n\\nPaymentRequest paymentRequest = new PaymentRequest();\\nPaymentTransaction paymentTransaction = new PaymentTransaction();\\nAmountsReq amountsReq = new AmountsReq();\\namountsReq.setRequestedAmount( BigDecimal.valueOf(17.5) );\\namountsReq.setCurrency(\\\"EUR\\\");\\npaymentTransaction.setAmountsReq(amountsReq);\\n\\nTransactionConditions transactionConditions = new TransactionConditions();\\ntransactionConditions.getForceEntryMode().add( ForceEntryModeType.KEYED );\\npaymentTransaction.setTransactionConditions(transactionConditions);\\npaymentRequest.setPaymentTransaction(paymentTransaction);\\n\\nSaleData saleData = new SaleData();\\nsaleData.setSaleToAcquirerData(\\\"\\\");\\nTransactionIdentification saleTransactionID = new TransactionIdentification();\\nsaleTransactionID.setTransactionID(transactionID);\\nsaleTransactionID.setTimeStamp(DatatypeFactory.newInstance().newXMLGregorianCalendar(new GregorianCalendar()));\\nsaleData.setSaleTransactionID(saleTransactionID);\\npaymentRequest.setSaleData(saleData);\\nsaleToPOIRequest.setPaymentRequest(paymentRequest);\\nterminalAPIRequest.setSaleToPOIRequest(saleToPOIRequest);\"}]' :enable-copy-link-to-code-block=\"true\" :code-sample-card-size=\"'fullsize'\"><\/code-sample>\n<\/div>\n<h2>See also<\/h2>\n<div class=\"see-also-links output-inline\" id=\"see-also\">\n<ul><li><a href=\"\/point-of-sale\/error-scenarios\/refusal-reasons-pos\"\n                        target=\"_self\"\n                        >\n                    Refusal reasons\n                <\/a><\/li><li><a href=\"\/point-of-sale\/error-scenarios\/raw-acquirer-responses\"\n                        target=\"_self\"\n                        >\n                    Raw acquirer responses\n                <\/a><\/li><li><a href=\"\/point-of-sale\/basic-tapi-integration\/verify-transaction-status\"\n                        target=\"_self\"\n                        >\n                    Verify transaction status\n                <\/a><\/li><li><a href=\"\/point-of-sale\/error-scenarios\/pos-timeouts\"\n                        target=\"_self\"\n                        >\n                    Time-outs\n                <\/a><\/li><\/ul><\/div>\n","url":"https:\/\/docs.adyen.com\/point-of-sale\/error-scenarios","articleFields":{"description":"Learn how to resolve Terminal API errors and handle declined payments.","last_edit_on":"20-08-2019 15:14"},"algolia":{"url":"https:\/\/docs.adyen.com\/point-of-sale\/error-scenarios","title":"Handle responses","content":"Terminal API responses inform you about the processing status of your request. The status of your request is communicated in the Response object of the API response. The sections below explain the structure of the response and detail the steps you can take to handle common error scenarios, such as:\n\nThe request failed because it was invalid.\nYou made a payment request but didn't receive a result.\nThe result of your payment request indicates the transaction failed.\n\nResponse object format\nTo be able to resolve issues with your requests, you need to know how Terminal API informs you of the processing status of your request. This is communicated in the Response object of the API response, which has:\n\nResult: one of the following values:\n\nSuccess: The request succeeded \/ the transaction was approved on the terminal.\nPartial: The transaction amount has been partially approved.\nFailure: The request or transaction didn't succeed. The remaining Response fields provide more information about the error, to enable you to determine how to handle it.\n\nErrorCondition: This field is included when the request or transaction fails, and indicates the cause of the failure.\nAdditionalResponse: More information about the error condition. You'll receive either a string of form-encoded key-value pairs or a Base64 string that you need to decode to get a JSON object.\n\nThe information in the Response object help you to identify if and why a request has failed.\nInvalid message format\nA Response object with Result Failure and ErrorCondition MessageFormat indicates there was a mistake in the request you sent. Proceed as follows:\n\n\nDetermine what caused the error, based on the message, warnings, or errors in the AdditionalResponse. For example, a missing required field or an unexpected field.\nThe following example is for a response indicating that the Currency field is missing from the payment request:\n\n\n\n\n\nRefer to the  Terminal API reference if necessary, then manually fix your request and try again.\n\n\nInvalid JSON format\nIf your API request does not contain a valid JSON object, you receive a Bad JSON HTTP reply that specifies the line number and a description of the issue:\n\n    \n\n\nManually fix the JSON error on the line mentioned in the HTTP reply and try again.\n\nUnavailable service\nA Response object with Result Failure and ErrorCondition UnavailableService indicates we were unable to implement your request. Proceed as follows:\n\n\nDetermine what caused the error, based on the message, warnings, or errors in the AdditionalResponse. For example:\n\nYou tried to use functionality that the payment terminal doesn't support.\nYou tried to use a ProtocolVersion that the terminal cannot manage.\nYou tried to use functionality that we do not support.\n\nThe following example is for a response indicating that there's a mismatch between the protocol versions (2.0 in the request and 3.0 on the terminal):\n\n\n\n\n\nDepending on the cause of the error, manually fix your request and send it again. For example, after receiving the above failure response you'd specify the same protocol version that the terminal supports.\n\n\nNo result received\nWe recommend that your integration automatically checks the status of a transaction any time it fails to receive a transaction response.\nPayment requests time out after a while. If you do not receive a payment response (or you receive a response indicating a time-out) after 120 seconds (local integration) or 150 seconds (cloud integration), and the internet connection hasn't dropped, your integration should automatically check the transaction status.\nIf you do not receive a transaction result, neither synchronously nor asynchronously, proceed as follows:\n\n\nMake a transaction status request.\n\n\nDetermine your next action based on the  TransactionStatusResponse.Response:\n\n\n\nResponse\nDescription\nAction\n\n\n\n\nResult Success\nThe transaction was processed.\nUse the RepeatedResponseMessageBody to determine how to process the transaction.\n\n\nErrorCondition InProgress\nThe payment terminal is waiting for a response from the shopper, or there is a delay with the card issuer.\nContinue making a transaction status request for this transaction every five seconds until you receive a response indicating the transaction was processed.\n\n\nErrorCondition NotFound\nPossible causes: The details you specified in the transaction status request are incorrect.We did not receive your request; maybe your connection dropped after sending the request.\nPossible actions: Provide the details of the original transaction in the MessageReference of your transaction status request.Retry the original transaction.\n\n\n\n\n\nTerminal unavailable (cloud integration)\nWhen you send a payment request to a payment terminal that is unavailable, the payment cannot be processed. In a cloud integration, the Terminal API generates a Reject event notification.\n\nNote that event notifications are always presented as a SaleToPOIRequest.\n\nThe EventNotification body contains:\n\nRejectedMessage: a Base64 string containing the payment request that couldn't be processed. Decode this to get the original payment request as a JSON object.\nEventToNotify: Reject\nEventDetails: a message indicating why the payment terminal is unavailable.\n\nHere's an example event notification for an unavailable payment terminal in a cloud integration:\n\n    \n\nThe steps that you can take, relate to the EventDetails message you receive:\nDid not receive a response\n\"message=Did+not+receive+a+response+from+the+POI.\"\nThis message indicates that the request was sent but the payment terminal didn't respond, possibly because the WebSocket is down at the terminal.\n\nMake a transaction status request to verify whether the WebSocket connection has been restored and the payment is now processed.\n\nFailed to send message\n\"message=Failed+to+send+message+to+POI.+There+may+be+a+network+issue+or+it+may+not+have+the+websocket+connected.\"\nThis message indicates that probably the WebSocket for the payment terminal is not available on the cloud router for Terminal API.\n\n\nCheck the WebSocket connection:\n\nThe terminal display should have a cloud icon in the top row.\n\nCheck the cloud connection from your Customer Area, using an API request, or on the terminal itself.\n\n\n\n\n\nUnknown POIID\n\"message=Unknown+POIID+P400Plus-123456789\"\nThis message indicates that the terminal ID (POIID) in the payment request is incorrect, or that the terminal is in the inventory of the Company account and hasn't been assigned to a merchant account or store that allows processing payments.\n\nOn the payment terminal, go to the \n  Device info\n menu option and verify that the terminal ID in the format [device model]-[serial number] matches the POIID that you specified in the payment request. For example, P400Plus-123456789.\nIf the POIID matches, go to the next step.\nVerify that the payment terminal is assigned to a merchant account or store. You can do this using a GET  \/terminals request, or using your Customer Area.\n\nDeclined payment\nWhen the  PaymentResponse.Response includes Result Failure and one of the error conditions listed below, the transaction was declined.\nThe AdditionalResponse has more information about why the transaction was declined in the refusalReason and message fields. These fields are our mapping of the response we receive from acquirers and issuers.\nHere's an example failure response for a declined payment:\n\n    \n\nWhen your payment request is declined, you need to determine whether you can retry it:\n\n\nCheck the  ErrorCondition in the PaymentResponse.Response, because in many cases this already indicates whether you can retry the transaction. \n\n\n\nError condition\nRetry?\n\n\n\n\nAborted\n\n\n\nBusy\nSee next step\n\n\nCancel\nSee next step\n\n\nDeviceOut\n\n\n\nInvalidCard\nSee next step\n\n\nNotAllowed\n\n\n\nRefusal\nSee next step\n\n\nUnreachableHost\n\n\n\nWrongPIN\n\n\n\n\n\n\nFor the error conditions Cancel, InvalidCard, and Refusal, check the AdditionalResponse for the refusalReason and message. For the error condition Busy, check the response for a serviceId. You can use this if you want to cancel the transaction.\n\nYou can use the ErrorCondition to code your POS app. The refusalReason and Message fields are included for additional insight, and should not be coded against.\nThe serviceId can be used by the POS app to cancel a transaction.\n\nSelect the tabs for details.\n\n\n    \n        \n        \n    \n\n\nFor more information, see our reference documentation for refusal reasons. If you enabled receiving the refusalReasonRaw field in the AdditionalResponse, also see our reference documentation for raw acquirer responses.\n\nThe refusalReasonRaw provides additional information. But if you base your code on it, that might break your integration because acquirers and issuers sometimes change their raw responses without notice.\n\n\n\nIf applicable, retry the transaction.\n\n\nTime-out\nVarious time-outs can occur during a transaction:\n\nA processing time-out. You receive a Failure response and the transaction is cancelled.\nA device time-out. You receive a Failure response and the transaction is cancelled.\nA request time-out. You receive an event notification and the transaction can still be completed on the payment terminal.\n\n\n\n\nTime-out\nHow to recognize\nAction\n\n\n\n\nProcessing time-out\nTransaction response with: Response.Result: Failure ErrorCondition: Communication&nbsp;timeout\nRetry the transaction using a different card or payment method.\n\n\nDevice time-out\nTransaction response with: Response.Result: Failure ErrorCondition: Cancel AdditionalResponse: indicates the type of device time-out\nRetry the transaction.\n\n\nRequest time-out\nEvent notification with: EventToNotify: Reject EventDetails: message=Timed+out+waiting+for+response+from+POI.\nMake a transactions status request to see if the transaction has been processed.\n\n\n\nError condition comparison\nThe table below compares error conditions and troubleshooting steps specific to making a PaymentRequest, TransactionStatusRequest, or ReversalRequest (a referenced refund).\n\n\n\nError condition\nPaymentRequest\nTransactionStatusRequest\nReversalRequest\n\n\n\n\nAborted\nRetry\nnot applicable\nOptionally retry\n\n\nCancel\nSee Declined payment\nnot applicable\nnot applicable\n\n\nDeviceOut\nWait and retry\nWait and retry\nWait and retry\n\n\nInProgress\nnot applicable\nSee No result received\nnot applicable\n\n\nInvalidCard\nSee Declined payment\nnot applicable\nnot applicable\n\n\nInvalid message format\n\n\n\n\n\nNotAllowed\nDo not retry\nWait and retry\nWait and retry or Retry different device\n\n\nNotFound\nManual recovery\nSee No result received\nManual recovery\n\n\nRefusal\nSee Declined payment\nnot applicable\nManual recovery\n\n\nUnavailable service\n\n\n\n\n\nUnreachableHost\nRetry\nRetry\nRetry\n\n\nWrongPIN\nRetry\nnot applicable\nnot applicable\n\n\n\nUnexpected card entry modes\nA payment can fail if it is not within the transaction limits that you set or if the entry mode is not supported. For example, making a contactless chip transaction that is above the Contactless reader limit.\nYou can check the posEntryMode inside the AdditionalResponse to see whether a card, a QR code, or another entry mode was used to make the transaction.\nThe posEntryMode values can be:\n\n\n\nEntry mode\nDescription\n\n\n\n\nCheckReader\nCheck reader\n\n\nContactless\nMagnetic Stripe Contactless card reader conform to ISO 14443\n\n\nFile\nAccount data on file\n\n\nICC\nContact ICC (asynchronous)\n\n\nKeyed\nManual key entry\n\n\nMagStripe\nMagnetic stripe card reader\n\n\nManual\nReading of embossing or optical character recognition (OCR) of printed data either at time of transaction or after the event\n\n\nRFID\nPayment instrument information taken from RFID\n\n\nScanned\nScanned by a barcode reader\n\n\nMagStripe\nMagnetic stripe card reader\n\n\nSynchronousICC\nContact ICC (synchronous)\n\n\nTapped\nContactless card reader\n\n\n\nIn some cases, you may want to enforce using a specific entry mode, for example when making a Manual key entry payment. You can do this by specifying one of the entry modes from the table inside the  TransactionConditions.ForceEntryMode array of the payment request:\n\n    \n\nSee also\n\n\n                    Refusal reasons\n                \n                    Raw acquirer responses\n                \n                    Verify transaction status\n                \n                    Time-outs\n                \n","type":"page","locale":"en","boost":18,"hierarchy":{"lvl0":"Home","lvl1":"In-person payments","lvl2":"Handle responses"},"hierarchy_url":{"lvl0":"https:\/\/docs.adyen.com\/","lvl1":"https:\/\/docs.adyen.com\/point-of-sale","lvl2":"\/point-of-sale\/error-scenarios"},"levels":3,"category":"In-person payments","category_color":"green","tags":["Handle","responses"]}}
