{"title":"Card acquisition","category":"default","creationDate":1677147960,"content":"<p>With a Terminal API card acquisition request, you can obtain <a href=\"\/point-of-sale\/card-acquisition\/identifiers\">card and shopper identifiers<\/a> before making a payment, or outside of a payment flow.<\/p>\n<p>This enables you to answer questions like:<\/p>\n<ul>\n<li>What payment instrument is the customer using?<\/li>\n<li>Who is the customer?<\/li>\n<li>What country\/region does the shopper come from?<\/li>\n<li>What are the card details?<\/li>\n<\/ul>\n<p>Based on the answer, you decide what to do next. For example, make a Terminal API payment request with specific parameters, or use the acquired details in another system.<\/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=\"\/point-of-sale\/basic-tapi-integration\/\">Terminal API integration<\/a> with payment terminals.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><strong>Limitations<\/strong><\/td>\n<td style=\"text-align: left;\">QR code wallet details and one-time numeric code details cannot be obtained through card acquisition.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><strong>Setup steps<\/strong><\/td>\n<td style=\"text-align: left;\">Before you begin: <ul><li markdown=\"1\">Set up <a href=\"\/point-of-sale\/card-acquisition\/identifiers#receiving-identifiers-in-responses\">receiving identifiers in Terminal API responses<\/a>.<\/li> <li markdown=\"1\">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 <strong>single tap<\/strong>, for a better <a href=\"#customer-experience\">customer experience<\/a> with contactless transactions.<\/li><\/ul><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h2>How it works<\/h2>\n<p>The basic card acquisition flow is as follows.<\/p>\n<ol>\n<li>\n<p>You <a href=\"#card-acquisition-request\">make a card acquisition request<\/a>.<\/p>\n<\/li>\n<li>\n<p>On the terminal, the customer taps, inserts, or swipes their card or other payment instrument.<\/p>\n<\/li>\n<li>\n<p>You process the acquired card data from the response in your own systems, depending on what you want to achieve.<br \/>\nThe terminal shows <em>One moment<\/em>, or <em>Keep card inserted<\/em> if the customer inserted their card into the card reader.<\/p>\n<\/li>\n<li>\n<p>You finish the card acquisition in one of the following ways:<\/p>\n<ul>\n<li><a href=\"#continue-with-payment\">Finish with a payment<\/a>. This tells the terminal it needs to use the acquired data for the payment.<\/li>\n<li><a href=\"#cancel-completed\">Finish with a cancellation<\/a>. This tells the terminal it no longer needs to keep the acquired data.<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<h3>Customer experience<\/h3>\n<p>For the customer, card acquisition followed by a payment is a single flow that is the same as a regular payment.<\/p>\n<p>But with contactless payments, if the customer tapped their card for the card acquisition, they need to tap their card again for the payment in these cases:<\/p>\n<ul>\n<li>The card acquisition did not include an amount.<\/li>\n<li>The card acquisition and payment amounts are different.<\/li>\n<\/ul>\n<p>To avoid the second tap, you can ask our <a href=\"https:\/\/ca-test.adyen.com\/ca\/ca\/contactUs\/support.shtml?form=other\" target=\"_blank\" rel=\"nofollow noopener noreferrer\" class=\"external-link no-image\">Support Team<\/a> to enable <strong>single tap<\/strong>.<\/p>\n<h2>Scenarios<\/h2>\n<p>Card acquisition is a step in many advanced payment flows and other use cases. For example:<\/p>\n<ul>\n<li>\n<p><em>Autonomous stores<\/em>: the shopper presents their card to gain access to the autonomous store. You use card acquisition to pre-authorize a default amount without showing that amount to the shopper, and then provide access. When the shopper leaves, you adjust the pre-authorization for the products that the shopper took, and capture the payment.<\/p>\n<\/li>\n<li>\n<p><em>Card recognition use cases<\/em>:<\/p>\n<ul>\n<li>\n<p><a href=\"\/point-of-sale\/shopper-recognition\/identification\">Card-based customer identification<\/a>: For example, in a parking garage. Upon arrival, you identify the driver and record their time of arrival based on a card acquisition. Then you cancel the card acquisition. Upon departure, you identify the driver again through card acquisition, calculate the amount due, and make a payment for the calculated amount.<\/p>\n<\/li>\n<li>\n<p><a href=\"\/point-of-sale\/shopper-recognition\/before-refund\">Card check before refund<\/a>: Before issuing an unreferenced refund, you use card acquisition to verify if the shopper is using the same card for the refund as for the initial payment.<\/p>\n<\/li>\n<li>\n<p><em>Gift card usage<\/em>: You use card acquisition to check if the shopper is using a gift card. If you do not want to accept the gift card for this transaction, you cancel the card acquisition and ask for a different card. Or if you want to stimulate usage of your gift card, you give extra discounts in the payment following the card acquisition.<\/p>\n<\/li>\n<li>\n<p><a href=\"\/point-of-sale\/shopper-recognition\/tax-free-shopping\">Tax-free shopping<\/a>: You use the issuer country\/region and the card BIN returned in the card acquisition response to determine whether the transaction qualifies for a tax refund. Then you make a payment request.<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p><a href=\"\/point-of-sale\/loyalty\">Loyalty<\/a>: Based on the card acquisition, you look up the shopper in your loyalty program. You can then interact with the shopper on the terminal, through input requests. For example, if the shopper isn't recognized, you ask them to enroll in your loyalty program. Or if the shopper is recognized, you ask whether they want to redeem loyalty points. To finish, you make a payment request for the final transaction amount.<\/p>\n<ul>\n<li>In loyalty flows based on <a href=\"\/point-of-sale\/loyalty\/wallet-passes\">wallet passes<\/a>, the card acquisition response tells you if the shopper has your NFC-enabled wallet pass in their mobile NFC wallet app. If they do not, you can issue a pass and add this data to your payment request so the shopper gets notified. Or if they do, you can use the pass for the payment.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2 id=\"card-acquisition-request\">Make a card acquisition request<\/h2>\n<ol>\n<li>\n<p>Make a <a href=\"\/point-of-sale\/design-your-integration\/terminal-api\">Terminal API<\/a> card acquisition request, specifying:<\/p>\n<ul>\n<li>\n<p>The standard <a href=\"\/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>CardAcquisition<\/strong><\/span>.<\/p>\n<table>\n<thead>\n<tr>\n<th>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><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><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><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>CardAcquisition<\/strong><\/span><\/td>\n<\/tr>\n<tr>\n<td><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><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><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><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\/cardacquisition\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">CardAcquisitionRequest<\/a> object with:<\/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>SaleData.SaleTransactionID<\/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;\">An object with: <ul><li markdown=\"1\"><code>TransactionID<\/code>: your reference to identify a payment. We recommend using a unique value per payment.<\/li> <li markdown=\"1\"><code>TimeStamp<\/code>: date and time of the request 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>SaleData.TokenRequestedType<\/code><\/td>\n<td style=\"text-align: center;\"><\/td>\n<td style=\"text-align: left;\"><span translate=\"no\"><strong>Customer<\/strong><\/span>. Returns the card alias in the <code>TokenValue<\/code> field of the response. Note that the card alias is always returned in the <code>AdditionalResponse<\/code>.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>CardAcquisitionTransaction<\/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;\">A required object that can be empty or contain: <ul><li markdown=\"1\"><code>TotalAmount<\/code> (optional): the transaction amount. When you do not know the amount yet, you can omit this parameter or specify an initial amount and provide the final amount later, in the payment request.<\/li><li markdown=\"1\"><code>PaymentType<\/code> (optional): if you intend to continue with a payment, either omit this parameter or specify <span translate=\"no\"><strong>Normal<\/strong><\/span>. If you intend to continue with an unreferenced refund, see <a href=\"\/point-of-sale\/shopper-recognition\/before-refund\">Card check before refund<\/a>.<\/li><\/ul><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/li>\n<\/ul>\n<div data-component-wrapper=\"code-sample\">\n<code-sample :title=\"''\" :id=\"'card-acquisition'\" :code-data='[{\"language\":\"json\",\"tabTitle\":\"JSON\",\"content\":\"{\\n    \\\"SaleToPOIRequest\\\":{\\n        \\\"MessageHeader\\\":{\\n            \\\"ProtocolVersion\\\":\\\"3.0\\\",\\n            \\\"MessageClass\\\":\\\"Service\\\",\\n            \\\"MessageCategory\\\":\\\"CardAcquisition\\\",\\n            \\\"MessageType\\\":\\\"Request\\\",\\n            \\\"ServiceID\\\":\\\"282\\\",\\n            \\\"SaleID\\\":\\\"POSSystemID12345\\\",\\n            \\\"POIID\\\":\\\"V400m-346403161\\\"\\n        },\\n        \\\"CardAcquisitionRequest\\\":{\\n            \\\"SaleData\\\":{\\n                \\\"SaleTransactionID\\\":{\\n                    \\\"TransactionID\\\":\\\"369\\\",\\n                    \\\"TimeStamp\\\":\\\"2021-03-05T12:22:57.449Z\\\"\\n                },\\n                \\\"{hint:Optional, returns the card alias in TokenValue}TokenRequestedType{\\\/hint}\\\":\\\"Customer\\\"\\n            },\\n            \\\"CardAcquisitionTransaction\\\":{\\n                \\\"{hint:Optional}TotalAmount{\\\/hint}\\\":16.98\\n            }\\n        }\\n    }\\n}\"},{\"language\":\"java\",\"tabTitle\":\"Java\",\"content\":\"String serviceID = \\\"YOUR_UNIQUE_ATTEMPT_ID\\\";\\nString saleID = \\\"YOUR_CASH_REGISTER_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.CARD_ACQUISITION );\\nmessageHeader.setMessageType( MessageType.REQUEST );\\nmessageHeader.setServiceID(serviceID);\\nmessageHeader.setSaleID(saleID);\\nmessageHeader.setPOIID(POIID);\\nsaleToPOIRequest.setMessageHeader(messageHeader);\\n\\nCardAcquisitionRequest cardAcquisitionRequest = new CardAcquisitionRequest();\\nSaleData saleData = new SaleData();\\nTransactionIdentification saleTransactionID = new TransactionIdentification();\\nsaleTransactionID.setTransactionID(transactionID);\\nsaleTransactionID.setTimeStamp(DatatypeFactory.newInstance().newXMLGregorianCalendar(new GregorianCalendar()));\\nsaleData.setSaleTransactionID(saleTransactionID);\\nsaleData.setTokenRequestedType( TokenRequestedType.CUSTOMER );\\ncardAcquisitionRequest.setSaleData(saleData);\\n\\nCardAcquisitionTransaction cardAcquisitionTransaction = new CardAcquisitionTransaction();\\ncardAcquisitionTransaction.setTotalAmount( BigDecimal.valueOf(16.98) );\\ncardAcquisitionRequest.setCardAcquisitionTransaction(cardAcquisitionTransaction);\\nsaleToPOIRequest.setCardAcquisitionRequest(cardAcquisitionRequest);\\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>When the card acquisition succeeds, you receive a  <a href=\"https:\/\/docs.adyen.com\/api-explorer\/terminal-api\/latest\/post\/cardacquisition#responses-200-Response\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">CardAcquisitionResponse<\/a> with a <code>message<\/code> of  <span translate=\"no\"><strong>CARD_ACQ_COMPLETED<\/strong><\/span> in the <code>AdditionalResponse<\/code>.<\/p>\n<div data-component-wrapper=\"code-sample\">\n<code-sample :title=\"'Card acquisition response'\" :id=\"''\" :code-data='[{\"language\":\"json\",\"tabTitle\":\"\",\"content\":\"{\\n    \\\"SaleToPOIResponse\\\": {\\n        \\\"CardAcquisitionResponse\\\": {\\n            \\\"POIData\\\": {\\n                \\\"POITransactionID\\\": {\\n                    \\\"{hint:For use in subsequent payment}TimeStamp{\\\/hint}\\\": \\\"2021-03-05T12:22:59.000Z\\\",\\n                    \\\"{hint:For use in subsequent payment}TransactionID{\\\/hint}\\\": \\\"8ha5001614946979000\\\"\\n            },\\n            \\\"SaleData\\\": {...}\\n            },\\n            \\\"PaymentInstrumentData\\\": {\\n                \\\"CardData\\\": {\\n                    \\\"{hint:Included if you enabled receiving the issuer country}CardCountryCode{\\\/hint}\\\": \\\"528\\\",\\n                    \\\"MaskedPan\\\": \\\"541333 **** 9999\\\",\\n                    \\\"PaymentBrand\\\": \\\"mc\\\",\\n                    \\\"PaymentToken\\\": {\\n                        \\\"TokenRequestedType\\\": \\\"Customer\\\",\\n                        \\\"TokenValue\\\": \\\"{hint:This is the card alias}M469509594859802{\\\/hint}\\\"\\n                    },\\n                    \\\"SensitiveCardData\\\": {\\n                        \\\"ExpiryDate\\\": \\\"0228\\\"\\n                    }\\n                },\\n                \\\"PaymentInstrumentType\\\": \\\"Card\\\"\\n            },\\n            \\\"Response\\\": {\\n                \\\"AdditionalResponse\\\": \\\"tid=46403161&amp;transactionType=GOODS_SERVICES&amp;backendGiftcardIndicator=false&amp;posadditionalamounts.originalAmountValue=1698&amp;expiryYear=2028&amp;alias=M469509594859802&amp;posAmountGratuityValue=0&amp;giftcardIndicator=false&amp;paymentMethodVariant=mc&amp;txtime=13%3a22%3a59&amp;iso8601TxDate=2021-03-05T12%3a22%3a59.0000000%2b0000&amp;cardType=mc&amp;posOriginalAmountValue=1698&amp;aliasType=Default&amp;txdate=05-03-2021&amp;paymentMethod=mc&amp;merchantReference=369&amp;expiryMonth=02&amp;cardSummary=9999&amp;posadditionalamounts.originalAmountCurrency=EUR&amp;posAuthAmountCurrency=EUR&amp;message=CARD_ACQ_COMPLETED&amp;cardIssuerCountryId=528&amp;posAmountCashbackValue=0&amp;posEntryMode=CLESS_CHIP&amp;fundingSource=CREDIT&amp;issuerCountry=NL&amp;cardScheme=mc&amp;cardBin=541333&amp;posAuthAmountValue=1698\\\",\\n                \\\"Result\\\": \\\"Success\\\"\\n            }\\n        },\\n        \\\"MessageHeader\\\": {...}\\n    }\\n}\"}]' :enable-copy-link-to-code-block=\"true\" :code-sample-card-size=\"'fullsize'\"><\/code-sample>\n<\/div>\n<\/li>\n<li>\n<p>From the <code>CardAcquisitionResponse<\/code>, get the details that you need for your use case.<\/p>\n<table>\n<thead>\n<tr>\n<th style=\"text-align: left;\">Parameter<\/th>\n<th style=\"text-align: left;\">Usage<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"text-align: left;\"><code>POIData.POITransactionID<\/code><\/td>\n<td style=\"text-align: left;\">If you are going to continue with a payment, keep the <code>TimeStamp<\/code> and <code>TransactionID<\/code>, because you need these card acquisition details in your payment request.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>PaymentInstrumentData.CardData<\/code><\/td>\n<td style=\"text-align: left;\">Includes: <ul><li markdown=\"1\"><code>CardCountryCode<\/code>: The three-digit code of the issuer country\/region. This parameter is included if you <a href=\"\/point-of-sale\/card-acquisition\/identifiers\">enabled receiving the issuer country\/region<\/a>.<\/li> <li markdown=\"1\"><code>PaymentToken.TokenValue<\/code>: The card alias. You can use this to identify the shopper based on their card, but not to make payments. This parameter is included if you specified a <code>TokenRequestedType<\/code> of <span translate=\"no\"><strong>Customer<\/strong><\/span> in the request.<\/li><\/ul><\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>Response.AdditionalResponse<\/code><\/td>\n<td style=\"text-align: left;\">Transaction data that you may need in your use case. You receive either a string of form-encoded key-value pairs or a Base64 string that you need to decode to get a JSON object.<br>Data that you may need: <ul><li markdown=\"1\"><code>alias<\/code>: The card alias, to identify the shopper based on their card.<\/li> <li markdown=\"1\"><code>PaymentAccountReference<\/code>: If the shopper used an NFC wallet, you can use this instead of the <code>alias<\/code>. (Not present for card payments.)  <li markdown=\"1\"><code>cardBin<\/code> and <code>issuerCountry<\/code>: Data to determine eligibility for tax free shopping.<\/li> <li markdown=\"1\"><code>shopperReference<\/code> and <code>shopperEmail<\/code>: For use in loyalty use cases.<\/li> <li markdown=\"1\"><code>giftcardIndicator<\/code>: If <span translate=\"no\"><b>true<\/b><\/span>, indicates the shopper presented a gift card.<\/li><\/ul><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<div class=\"sc-notice note\"><div>\n<p>If the <code>AdditionalResponse<\/code> doesn't include the expected details, you may need to enable receiving those details. Refer to <a href=\"\/point-of-sale\/card-acquisition\/identifiers#receiving-identifiers-in-responses\">Receive identifiers<\/a>.<\/p>\n<\/div><\/div>\n<p>As an example, the <code>AdditionalResponse<\/code> from the <code>CardAcquisitionResponse<\/code> above contains:<\/p>\n<pre><code class=\"language-raw\">tid=46403161\ntransactionType=GOODS_SERVICES\nbackendGiftcardIndicator=false\nposadditionalamounts.originalAmountValue=1698\nexpiryYear=2028\nalias=M469509594859802\nposAmountGratuityValue=0\ngiftcardIndicator=false\npaymentMethodVariant=mc\ntxtime=13%3a22%3a59\niso8601TxDate=2021-03-05T12%3a22%3a59.0000000%2b0000\ncardType=mc\nposOriginalAmountValue=1698\naliasType=Default\ntxdate=05-03-2021\npaymentMethod=mc\nmerchantReference=369\nexpiryMonth=02\ncardSummary=9999\nposadditionalamounts.originalAmountCurrency=EUR\nposAuthAmountCurrency=EUR\nmessage=CARD_ACQ_COMPLETED\ncardIssuerCountryId=528\nposAmountCashbackValue=0\nposEntryMode=CLESS_CHIP\nfundingSource=CREDIT\nissuerCountry=NL\ncardScheme=mc\ncardBin=541333\nposAuthAmountValue=1698<\/code><\/pre>\n<\/li>\n<\/ol>\n<h2 id=\"continue-with-payment\">Finish with a payment<\/h2>\n<p>Depending on your use case, you may want to complete the card acquisition flow with a payment. To do so, the payment request must include a reference to the card acquisition.<\/p>\n<ol>\n<li>\n<p><a href=\"\/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=\"\/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: 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>SaleData.SaleTransactionID<\/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;\">An object with: <ul><li markdown=\"1\"><code>TransactionID<\/code>: Your reference to identify a payment. We recommend using a unique value per payment.<\/li> <li markdown=\"1\"><code>TimeStamp<\/code>: The date and time of the request 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>SaleData.SaleToAcquirerData<\/code><\/td>\n<td style=\"text-align: center;\"><\/td>\n<td style=\"text-align: left;\">Depending on your use case, you may need to provide <a href=\"\/point-of-sale\/add-data\/tender-options\">tender options<\/a> or <a href=\"\/point-of-sale\/add-data\">additional data<\/a> here, or a <a href=\"\/point-of-sale\/shopper-recognition\/tax-free-shopping\">flag for tax free shopping<\/a>.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>PaymentTransaction.AmountsReq<\/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;\">An object with: <ul><li markdown=\"1\"><code>Currency<\/code>: The transaction <a href=\"\/development-resources\/currency-codes\">currency<\/a>.<\/li><li markdown=\"1\"><code>RequestedAmount<\/code>: The final transaction amount.<\/li><\/ul><\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>PaymentData.CardAcquisitionReference<\/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;\">An object referring to the card acquisition: <ul><li markdown=\"1\"><code>TimeStamp<\/code>: The time stamp returned in the <code>POIData.POITransactionID<\/code> of the card acquisition response.<\/li> <li markdown=\"1\"><code>TransactionID<\/code>: The transaction ID returned in the <code>POIData.POITransactionID<\/code> of the card acquisition response.<\/li><\/ul><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/li>\n<\/ul>\n<p>Here is how you make a payment referring to a card acquisition that had a <code>TimeStamp<\/code> of <strong>2021-03-05T12:22:59.000Z<\/strong> and a <code>TransactionID<\/code> of <strong>8ha5001614946979000<\/strong>.<\/p>\n<div data-component-wrapper=\"code-sample\">\n<code-sample :title=\"''\" :id=\"'card-acq-payment'\" :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\\\":\\\"2020711110\\\",\\n         \\\"POIID\\\":\\\"V400m-346403161\\\"\\n      },\\n      \\\"PaymentRequest\\\":{\\n         \\\"SaleData\\\":{\\n            \\\"SaleTransactionID\\\":{\\n               \\\"TransactionID\\\":\\\"899\\\",\\n               \\\"TimeStamp\\\":\\\"2021-03-05T12:23:44.684Z\\\"\\n            }\\n         },\\n         \\\"PaymentTransaction\\\":{\\n            \\\"AmountsReq\\\":{\\n               \\\"Currency\\\":\\\"EUR\\\",\\n               \\\"RequestedAmount\\\":16.98\\n            }\\n         },\\n         \\\"PaymentData\\\":{\\n            \\\"CardAcquisitionReference\\\":{\\n               \\\"{hint:From the POITransactionID of the card acquisition}TimeStamp{\\\/hint}\\\":\\\"2021-03-05T12:22:59.000Z\\\",\\n               \\\"{hint:From the POITransactionID of the card acquisition}TransactionID{\\\/hint}\\\":\\\"8ha5001614946979000\\\"\\n            }\\n         }\\n      }\\n   }\\n}\"},{\"language\":\"java\",\"tabTitle\":\"Java\",\"content\":\"String serviceID = \\\"YOUR_UNIQUE_ATTEMPT_ID\\\";\\nString saleID = \\\"YOUR_CASH_REGISTER_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.setServiceID(serviceID);\\nmessageHeader.setSaleID(saleID);\\nmessageHeader.setPOIID(POIID);\\nsaleToPOIRequest.setMessageHeader(messageHeader);\\n\\nPaymentRequest paymentRequest = new PaymentRequest();\\nSaleData saleData = new SaleData();\\nTransactionIdentification saleTransactionID = new TransactionIdentification();\\nsaleTransactionID.setTransactionID(transactionID);\\nsaleTransactionID.setTimeStamp(DatatypeFactory.newInstance().newXMLGregorianCalendar(new GregorianCalendar()));\\nsaleData.setSaleTransactionID(saleTransactionID);\\npaymentRequest.setSaleData(saleData);\\n\\nPaymentTransaction paymentTransaction = new PaymentTransaction();\\nAmountsReq amountsReq = new AmountsReq();\\namountsReq.setCurrency(\\\"EUR\\\");\\namountsReq.setRequestedAmount( BigDecimal.valueOf(16.98) );\\npaymentTransaction.setAmountsReq(amountsReq);\\npaymentRequest.setPaymentTransaction(paymentTransaction);\\n\\nPaymentData paymentData = new PaymentData();\\nTransactionIdentification cardAcquisitionReference = new TransactionIdentification();\\ncardAcquisitionReference.setTransactionID(transactionID);\\ncardAcquisitionReference.setTimeStamp(DatatypeFactory.newInstance().newXMLGregorianCalendar(new GregorianCalendar()));\\npaymentData.setCardAcquisitionReference(cardAcquisitionReference);\\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>In 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>PaymentInstrumentData.CardData<\/code>: The same card details that you received in the card acquisition response.<\/li>\n<li><code>Response.AdditionalResponse<\/code>: Transaction data, including the same details that you received in the card acquisition response. You 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<div data-component-wrapper=\"code-sample\">\n<code-sample :title=\"'Payment response'\" :id=\"''\" :code-data='[{\"language\":\"json\",\"tabTitle\":\"\",\"content\":\"{\\n    \\\"SaleToPOIResponse\\\":{\\n        \\\"PaymentResponse\\\":{\\n            \\\"POIData\\\":{\\n                \\\"POIReconciliationID\\\":\\\"1000\\\",\\n                \\\"POITransactionID\\\":{\\n                    \\\"TimeStamp\\\":\\\"2021-03-05T12:23:00.000Z\\\",\\n                    \\\"TransactionID\\\":\\\"8ha5001614946979000.NC6HT9CRT65ZGN82\\\"\\n                },\\n                \\\"SaleData\\\":{\\n                    \\\"...\\\"\\n                },\\n                \\\"PaymentReceipt\\\":[\\n                    \\\"...\\\"\\n                ],\\n                \\\"PaymentResult\\\":{\\n                    \\\"AmountsResp\\\":{\\n                        \\\"AuthorizedAmount\\\":16.98,\\n                        \\\"Currency\\\":\\\"EUR\\\"\\n                    },\\n                    \\\"PaymentInstrumentData\\\":{\\n                        \\\"CardData\\\":{\\n                            \\\"CardCountryCode\\\":\\\"826\\\",\\n                            \\\"EntryMode\\\":[\\n                                \\\"Contactless\\\"\\n                            ],\\n                            \\\"MaskedPan\\\":\\\"541333 **** 9999\\\",\\n                            \\\"PaymentBrand\\\":\\\"mc\\\",\\n                            \\\"SensitiveCardData\\\":{\\n                                \\\"CardSeqNumb\\\":\\\"33\\\",\\n                                \\\"ExpiryDate\\\":\\\"0228\\\"\\n                            }\\n                        },\\n                        \\\"PaymentInstrumentType\\\":\\\"Card\\\"\\n                    }\\n                },\\n                \\\"Response\\\":{\\n                    \\\"AdditionalResponse\\\":\\\"tid=46403161&amp;AID=A000000004101001&amp;transactionType=GOODS_SERVICES&amp;backendGiftcardIndicator=false&amp;posadditionalamounts.originalAmountValue=1698&amp;expiryYear=2028&amp;alias=M469509594859802&amp;posAmountGratuityValue=0&amp;giftcardIndicator=false&amp;pspReference=NC6HT9CRT65ZGN82&amp;paymentMethodVariant=mc&amp;batteryLevel=100%25&amp;applicationPreferredName=mc%20en%20gbr%20gbp&amp;store=StoreOne&amp;txtime=13%3a23%3a46&amp;iso8601TxDate=2021-03-05T12%3a23%3a46.0000000%2b0000&amp;cardType=mc&amp;posOriginalAmountValue=1698&amp;offline=false&amp;aliasType=Default&amp;txdate=05-03-2021&amp;paymentMethod=mc&amp;startYear=2017&amp;tc=FA13E605EE521667&amp;cardIssueNumber=33&amp;mid=1000&amp;merchantReference=899&amp;transactionReferenceNumber=NC6HT9CRT65ZGN82&amp;expiryMonth=02&amp;cardSummary=9999&amp;posadditionalamounts.originalAmountCurrency=EUR&amp;posAuthAmountCurrency=EUR&amp;cardHolderVerificationMethodResults=1F0302&amp;cardIssuerCountryId=826&amp;adjustAuthorisationData=BQABAQAMGo8BEaAMaNcBTGTHMTvXOdf7UbVZeYkBUCArY2Kem%2fu4oaTz4nBLiHBOBxsHvhGkdMy6qPnoJPWQAu2qgn9VDfHqaLvszJ9niBI7%2bCcW1n7mc7WyUXqI%2bXddD4iH5SQzeydVNs72fqjoBDm7TFnYy6FyVMQcROqWdTdOqbInN7e279CYf3Bg4XlRUdtWgkGwQEn%2bmmCPljvpqNY1HhWae61CKujEIpJl%2bOHvKSdQ0EUPjhABf12Knyo74XorVCUKS2eCg44lodVmz%2bXiQMgeTwnpAYOniVrOmuks5UFim0OM9NzuzYG1J3s76UMuIk43U4V0wQgdgrH%2fJMzmW61gEK42LACWgN%2fNLjLEa360kI0AAD%2fLAxXIzw9f11GbftqiweIehsMmoYRHqPO5CQseMVtRrE7zCV2FQSDYwGIH9MUKh%2fyiGYpB34tlRYT3GLOOK3Bp3GQfHSaChyTQEXHpvwR8Wd1rEWQDTIsLQawvK3W05uQZpSU%2bXbzoJy3txW0f2nlo91j%2fVRQR%2fBkQhiqT05uVHBldzQA%2bamjAcsHlRjJKgsGFIA4hKdeHIk6s5W3kfidbXMJDtue54gnKGXN1yvoblE5NLmQXBAHKx2eFvYxufLvB3om6AJD5ISc4XQLqE1vY3J%2bh%2bViBvsLRERSB3tij7fd3G%2bH5WtE6L%2b1dzs1MpZgSEWGVAfshmZ456jBlTJ2kFL%2bmE%2fHb462q1wFeXKIo8Llhi1tx%2b%2b0is7Z34%2bFuAMxSioaPUsle3Y9a%2b2J1ZhribRKBcZlSUlWiuXmlo%2fUSmeERC%2fiztpYs3%2fjdlbdO6Mkq3GlphRIQFwcR8fDvlygb&amp;posAmountCashbackValue=0&amp;posEntryMode=CLESS_CHIP&amp;startMonth=01&amp;fundingSource=CREDIT&amp;issuerCountry=GB&amp;cardScheme=mc&amp;cardBin=541333&amp;posAuthAmountValue=1698\\\",\\n                    \\\"Result\\\":\\\"Success\\\"\\n                }\\n            },\\n            \\\"MessageHeader\\\":{\\n                \\\"...\\\"\\n            }\\n        }\\n    }\\n}\"}]' :enable-copy-link-to-code-block=\"true\" :code-sample-card-size=\"'fullsize'\"><\/code-sample>\n<\/div>\n<\/li>\n<\/ol>\n<h2 id=\"cancel-completed\">Finish with a cancellation<\/h2>\n<p>Depending on your use case, you may want to stop the card acquisition flow after you have received the response. For this, you make an <code>EnableServiceRequest<\/code> to abort the transaction. The terminal then discards the acquired card data.<\/p>\n<ol>\n<li>\n<p>Make a <a href=\"\/point-of-sale\/design-your-integration\/terminal-api\">Terminal API<\/a> enable service request, specifying:<\/p>\n<ul>\n<li>\n<p>The standard <a href=\"\/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>EnableService<\/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>EnableService<\/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\/enableservice\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">EnableServiceRequest<\/a> object with:<\/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>TransactionAction<\/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>AbortTransaction<\/strong><\/span>.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>DisplayOutput<\/code><\/td>\n<td style=\"text-align: center;\"><\/td>\n<td style=\"text-align: left;\"><a href=\"#alternative\">Optional object<\/a> to show your own message and an 'Approved' icon (green check mark) or a 'Declined' icon (red cross).<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/li>\n<\/ul>\n<p>The next example is the basic request, without <code>DisplayOutput<\/code> object, to end the card acquisition flow with a cancellation. The terminal will show <em>Canceled<\/em>, a red cross <strong><img alt=\"\" src=\"\/images\/e\/b\/5\/8\/6\/eb5864c171bd3eac47d4a415a1f7e5dc0b075c28-cancel2x.png\" \/><\/strong>, and <em>Transaction canceled<\/em>.<\/p>\n<div data-component-wrapper=\"code-sample\">\n<code-sample :title=\"'Basic request to cancel the card acquisition data'\" :id=\"''\" :code-data='[{\"language\":\"json\",\"tabTitle\":\"\",\"content\":\"{\\n   \\\"SaleToPOIRequest\\\":{\\n      \\\"MessageHeader\\\":{\\n         \\\"ProtocolVersion\\\":\\\"3.0\\\",\\n         \\\"MessageClass\\\":\\\"Service\\\",\\n         \\\"MessageCategory\\\":\\\"EnableService\\\",\\n         \\\"MessageType\\\":\\\"Request\\\",\\n         \\\"ServiceID\\\":\\\"3020711110\\\",\\n         \\\"SaleID\\\":\\\"POSSystemID12345\\\",\\n         \\\"POIID\\\":\\\"V400m-346403161\\\"\\n      },\\n      \\\"EnableServiceRequest\\\":{\\n         \\\"TransactionAction\\\":\\\"AbortTransaction\\\"\\n      }\\n   }\\n}\"}]' :enable-copy-link-to-code-block=\"true\" :code-sample-card-size=\"'fullsize'\"><\/code-sample>\n<\/div>\n<h4 id=\"alternative\">Show your own message<\/h4>\n<p>To show your own message when ending the card acquisition with a cancellation, extend your <code>EnableServiceRequest<\/code> with a <code>DisplayOutput<\/code> object containing:<\/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>Device<\/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>CustomerDisplay<\/strong><\/span><\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>InfoQualify<\/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>Display<\/strong><\/span><\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>OutputContent.PredefinedContent.ReferenceID<\/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;\">Icon to show:<ul><li markdown=\"1\"><span translate=\"no\"><strong>Accepted<\/strong><\/span>: green check mark.<\/li><li markdown=\"1\"><span translate=\"no\"><strong>AcceptedAnimated<\/strong><\/span>: animated green check mark.<\/li><li markdown=\"1\"><span translate=\"no\"><strong>Declined<\/strong><\/span>: red cross.<\/li><li markdown=\"1\"><span translate=\"no\"><strong>DeclinedAnimated<\/strong><\/span>: animated red cross.<\/li><li markdown=\"1\"><span translate=\"no\"><strong>Idle<\/strong><\/span>: no icon.<\/li><\/ul>.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>OutputContent.OutputFormat<\/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>Text<\/strong><\/span><\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>OutputContent.OutputText<\/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;\">An array with one or two <code>Text<\/code> objects containing header and footer text. Provide empty values if you do not want to show text.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>The following example will show <em>Welcome!<\/em>, an animated green check mark <img title=\"-white_check_mark-\" alt=\"-white_check_mark-\" class=\"smileys\" src=\"\/user\/data\/smileys\/emoji\/white_check_mark.png\" \/>, and <em>We logged your arrival time<\/em>.<\/p>\n<div data-component-wrapper=\"code-sample\">\n<code-sample :title=\"'Cancellation using a custom message'\" :id=\"''\" :code-data='[{\"language\":\"json\",\"tabTitle\":\"\",\"content\":\"{\\n   \\\"SaleToPOIRequest\\\":{\\n      \\\"MessageHeader\\\":{\\n         \\\"ProtocolVersion\\\":\\\"3.0\\\",\\n         \\\"MessageClass\\\":\\\"Service\\\",\\n         \\\"MessageCategory\\\":\\\"EnableService\\\",\\n         \\\"MessageType\\\":\\\"Request\\\",\\n         \\\"ServiceID\\\":\\\"3020711110\\\",\\n         \\\"SaleID\\\":\\\"POSSystemID12345\\\",\\n         \\\"POIID\\\":\\\"V400m-346403161\\\"\\n      },\\n      \\\"EnableServiceRequest\\\":{\\n         \\\"TransactionAction\\\":\\\"AbortTransaction\\\",\\n         \\\"DisplayOutput\\\":{\\n            \\\"Device\\\":\\\"CustomerDisplay\\\",\\n            \\\"InfoQualify\\\":\\\"Display\\\",\\n            \\\"OutputContent\\\":{\\n               \\\"PredefinedContent\\\":{\\n                  \\\"ReferenceID\\\":\\\"AcceptedAnimated\\\"\\n               },\\n               \\\"OutputFormat\\\":\\\"Text\\\",\\n               \\\"OutputText\\\":[\\n                  {\\n                     \\\"Text\\\":\\\"Welcome!\\\"\\n                  },\\n                  {\\n                     \\\"Text\\\":\\\"We logged your arrival time\\\"\\n                  }\\n               ]\\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>When the cancellation succeeds, you receive an  <a href=\"https:\/\/docs.adyen.com\/api-explorer\/terminal-api\/latest\/post\/enableservice#responses-200-Response\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">EnableServiceResponse<\/a> that contains:<\/p>\n<ul>\n<li><code>Response.Result<\/code>: <span translate=\"no\"><strong>Success<\/strong><\/span><\/li>\n<\/ul>\n<div data-component-wrapper=\"code-sample\">\n<code-sample :title=\"'Response for canceling the card acquisition data'\" :id=\"''\" :code-data='[{\"language\":\"json\",\"tabTitle\":\"\",\"content\":\"{\\n  \\\"SaleToPOIResponse\\\":{\\n    \\\"EnableServiceResponse\\\":{\\n      \\\"Response\\\":{\\n        \\\"Result\\\":\\\"Success\\\"\\n      }\\n    },\\n    \\\"MessageHeader\\\":{\\n      \\\"ProtocolVersion\\\":\\\"3.0\\\",\\n      \\\"SaleID\\\":\\\"POSSystemID12345\\\",\\n      \\\"MessageClass\\\":\\\"Service\\\",\\n      \\\"MessageCategory\\\":\\\"EnableService\\\",\\n      \\\"ServiceID\\\":\\\"3020711110\\\",\\n      \\\"POIID\\\":\\\"V400m-346403161\\\",\\n      \\\"MessageType\\\":\\\"Response\\\"\\n    }\\n  }\\n}\"}]' :enable-copy-link-to-code-block=\"true\" :code-sample-card-size=\"'fullsize'\"><\/code-sample>\n<\/div>\n<\/li>\n<\/ol>\n<p>If you try to make a payment with a <code>CardAcquisitionReference<\/code> referring to the completed card acquisition that you cancelled, the payment will fail with a message <em>Validation failed: No prior card acquisition data available<\/em>.<\/p>\n<h2 id=\"cancel-in-progress\">Stop an in-progress card acquisition<\/h2>\n<p>If necessary, you can cancel a card acquisition before you receive a response, while the terminal is prompting the shopper to present their card. To do this, send an abort request from your POS system.<\/p>\n<ol>\n<li>\n<p>Make a <a href=\"\/point-of-sale\/design-your-integration\/terminal-api\">Terminal API<\/a> abort request, specifying:<\/p>\n<ul>\n<li>\n<p>The standard <a href=\"\/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>Abort<\/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>Abort<\/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\/abort\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">AbortRequest<\/a> object with:<\/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>AbortReason<\/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>MerchantAbort<\/strong><\/span><\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>MessageReference<\/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;\">An object with: <ul><li markdown=\"1\"><code>MessageCategory<\/code>: <span translate=\"no\"><strong>CardAcquisition<\/strong><\/span><\/li> <li markdown=\"1\"><code>SaleID<\/code>: Your unique ID of the POS system component that made the card acquisition request.<\/li> <li markdown=\"1\"><code>ServiceID<\/code>: The <code>ServiceID<\/code> of the card acquisition request being cancelled.<\/li><\/ul><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/li>\n<\/ul>\n<p>The example shows a request to cancel an in-progress card acquisition with a <code>ServiceID<\/code> of <strong>21796<\/strong>.<\/p>\n<div data-component-wrapper=\"code-sample\">\n<code-sample :title=\"'Abort an in-progress card acquisition request'\" :id=\"''\" :code-data='[{\"language\":\"json\",\"tabTitle\":\"\",\"content\":\"{\\n  \\\"SaleToPOIRequest\\\":{\\n    \\\"MessageHeader\\\":{\\n      \\\"ProtocolVersion\\\":\\\"3.0\\\",\\n      \\\"MessageClass\\\":\\\"Service\\\",\\n      \\\"MessageCategory\\\":\\\"Abort\\\",\\n      \\\"MessageType\\\":\\\"Request\\\",\\n      \\\"SaleID\\\":\\\"POSSystemID12345\\\",\\n      \\\"ServiceID\\\":\\\"29239\\\",\\n      \\\"POIID\\\":\\\"V400m-324688179\\\"\\n    },\\n    \\\"AbortRequest\\\":{\\n      \\\"AbortReason\\\":\\\"MerchantAbort\\\",\\n      \\\"MessageReference\\\":{\\n        \\\"MessageCategory\\\":\\\"CardAcquisition\\\",\\n        \\\"SaleID\\\":\\\"POSSystemID12345\\\",\\n        \\\"ServiceID\\\":\\\"21796\\\"\\n      }\\n    }\\n  }\\n}\"}]' :enable-copy-link-to-code-block=\"true\" :code-sample-card-size=\"'fullsize'\"><\/code-sample>\n<\/div>\n<p>A successful <code>AbortRequest<\/code> returns a response with a 200 OK HTTP status code and no body.<\/p>\n<\/li>\n<li>\n<p>Check whether the cancellation succeeded:<\/p>\n<ul>\n<li>The <em>Present card<\/em> prompt generated by your <code>CardAcquisitionRequest<\/code> disappears from the terminal display.<\/li>\n<li>You receive a <code>CardAcquisitionResponse<\/code> containing:\n<ul>\n<li><code>Result<\/code>: <span translate=\"no\"><strong>Failure<\/strong><\/span><\/li>\n<li><code>ErrorCondition<\/code>: <span translate=\"no\"><strong>Aborted<\/strong><\/span><\/li>\n<\/ul><\/li>\n<\/ul>\n<p>The following example shows the response for a card acquisition that was cancelled before it was completed.<\/p>\n<div data-component-wrapper=\"code-sample\">\n<code-sample :title=\"'CardAcquisitionResponse after canceling before completion'\" :id=\"''\" :code-data='[{\"language\":\"json\",\"tabTitle\":\"\",\"content\":\"{\\n    \\\"SaleToPOIResponse\\\": {\\n        \\\"CardAcquisitionResponse\\\": {\\n            \\\"POIData\\\": {\\n                \\\"POITransactionID\\\": {\\n                    \\\"TimeStamp\\\": \\\"2020-11-04T18:44:11.000Z\\\",\\n                    \\\"TransactionID\\\": \\\"8ha5001604515451028\\\"\\n                },\\n                \\\"POIReconciliationID\\\": \\\"1000\\\"\\n            },\\n            \\\"SaleData\\\": {\\n                \\\"SaleTransactionID\\\": {\\n                    \\\"TimeStamp\\\": \\\"2020-11-04T18:44:11.022Z\\\",\\n                    \\\"TransactionID\\\": \\\"152\\\"\\n                }\\n            },\\n            \\\"Response\\\": {\\n                \\\"Result\\\": \\\"Failure\\\",\\n                \\\"AdditionalResponse\\\": \\\"refusalReason=104%20Merchant%20cancelled%20tx...\\\",\\n                \\\"ErrorCondition\\\": \\\"Aborted\\\"\\n            }\\n        },\\n        \\\"MessageHeader\\\": {\\n            \\\"ProtocolVersion\\\": \\\"3.0\\\",\\n            \\\"SaleID\\\": \\\"POSSystemID12345\\\",\\n            \\\"MessageClass\\\": \\\"Service\\\",\\n            \\\"MessageCategory\\\": \\\"CardAcquisition\\\",\\n            \\\"ServiceID\\\": \\\"21796\\\",\\n            \\\"POIID\\\": \\\"V400m-346403161\\\",\\n            \\\"MessageType\\\": \\\"Response\\\"\\n        }\\n    }\\n}\"}]' :enable-copy-link-to-code-block=\"true\" :code-sample-card-size=\"'fullsize'\"><\/code-sample>\n<\/div>\n<\/li>\n<\/ol>\n<h2>See also<\/h2>\n<p><strong>Card acquisition scenarios<\/strong>:<\/p>\n<div class=\"see-also-links output-inline\" id=\"see-also\">\n<ul><li><a href=\"\/point-of-sale\/shopper-recognition\/identification\"\n                        target=\"_self\"\n                        >\n                    Card-based customer identification\n                <\/a><\/li><li><a href=\"\/point-of-sale\/shopper-recognition\/before-refund\"\n                        target=\"_self\"\n                        >\n                    Card check before refund\n                <\/a><\/li><li><a href=\"\/point-of-sale\/shopper-recognition\/tax-free-shopping\"\n                        target=\"_self\"\n                        >\n                    Tax-free shopping\n                <\/a><\/li><li><a href=\"\/point-of-sale\/loyalty\"\n                        target=\"_self\"\n                        >\n                    Shopper loyalty\n                <\/a><\/li><li><a href=\"\/point-of-sale\/loyalty\/wallet-passes\"\n                        target=\"_self\"\n                        >\n                    Wallet passes\n                <\/a><\/li><\/ul><\/div>\n\n<p><strong>Other resources<\/strong>:<\/p>\n<div class=\"see-also-links output-inline\" id=\"see-also\">\n<ul><li><a href=\"\/point-of-sale\/card-acquisition\/identifiers\"\n                        target=\"_self\"\n                        >\n                    Receive card and shopper identifiers\n                <\/a><\/li><\/ul><\/div>\n","url":"https:\/\/docs.adyen.com\/point-of-sale\/card-acquisition","articleFields":{"description":"Check the card and cardholder details before or outside of a payment.","feedback_component":false,"id":"42828987","type":"page","_expandable":{"operations":""},"status":"current","last_edit_on":"23-02-2023 11:26"},"algolia":{"url":"https:\/\/docs.adyen.com\/point-of-sale\/card-acquisition","title":"Card acquisition","content":"With a Terminal API card acquisition request, you can obtain card and shopper identifiers before making a payment, or outside of a payment flow.\nThis enables you to answer questions like:\n\nWhat payment instrument is the customer using?\nWho is the customer?\nWhat country\/region does the shopper come from?\nWhat are the card details?\n\nBased on the answer, you decide what to do next. For example, make a Terminal API payment request with specific parameters, or use the acquired details in another system.\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.\n\n\nLimitations\nQR code wallet details and one-time numeric code details cannot be obtained through card acquisition.\n\n\nSetup steps\nBefore you begin: Set up receiving identifiers in Terminal API responses. Contact our Support Team to enable single tap, for a better customer experience with contactless transactions.\n\n\n\nHow it works\nThe basic card acquisition flow is as follows.\n\n\nYou make a card acquisition request.\n\n\nOn the terminal, the customer taps, inserts, or swipes their card or other payment instrument.\n\n\nYou process the acquired card data from the response in your own systems, depending on what you want to achieve.\nThe terminal shows One moment, or Keep card inserted if the customer inserted their card into the card reader.\n\n\nYou finish the card acquisition in one of the following ways:\n\nFinish with a payment. This tells the terminal it needs to use the acquired data for the payment.\nFinish with a cancellation. This tells the terminal it no longer needs to keep the acquired data.\n\n\n\nCustomer experience\nFor the customer, card acquisition followed by a payment is a single flow that is the same as a regular payment.\nBut with contactless payments, if the customer tapped their card for the card acquisition, they need to tap their card again for the payment in these cases:\n\nThe card acquisition did not include an amount.\nThe card acquisition and payment amounts are different.\n\nTo avoid the second tap, you can ask our Support Team to enable single tap.\nScenarios\nCard acquisition is a step in many advanced payment flows and other use cases. For example:\n\n\nAutonomous stores: the shopper presents their card to gain access to the autonomous store. You use card acquisition to pre-authorize a default amount without showing that amount to the shopper, and then provide access. When the shopper leaves, you adjust the pre-authorization for the products that the shopper took, and capture the payment.\n\n\nCard recognition use cases:\n\n\nCard-based customer identification: For example, in a parking garage. Upon arrival, you identify the driver and record their time of arrival based on a card acquisition. Then you cancel the card acquisition. Upon departure, you identify the driver again through card acquisition, calculate the amount due, and make a payment for the calculated amount.\n\n\nCard check before refund: Before issuing an unreferenced refund, you use card acquisition to verify if the shopper is using the same card for the refund as for the initial payment.\n\n\nGift card usage: You use card acquisition to check if the shopper is using a gift card. If you do not want to accept the gift card for this transaction, you cancel the card acquisition and ask for a different card. Or if you want to stimulate usage of your gift card, you give extra discounts in the payment following the card acquisition.\n\n\nTax-free shopping: You use the issuer country\/region and the card BIN returned in the card acquisition response to determine whether the transaction qualifies for a tax refund. Then you make a payment request.\n\n\n\n\nLoyalty: Based on the card acquisition, you look up the shopper in your loyalty program. You can then interact with the shopper on the terminal, through input requests. For example, if the shopper isn't recognized, you ask them to enroll in your loyalty program. Or if the shopper is recognized, you ask whether they want to redeem loyalty points. To finish, you make a payment request for the final transaction amount.\n\nIn loyalty flows based on wallet passes, the card acquisition response tells you if the shopper has your NFC-enabled wallet pass in their mobile NFC wallet app. If they do not, you can issue a pass and add this data to your payment request so the shopper gets notified. Or if they do, you can use the pass for the payment.\n\n\n\nMake a card acquisition request\n\n\nMake a Terminal API card acquisition request, specifying:\n\n\nThe standard \n  SaleToPOIRequest.MessageHeader\n object, with MessageClass set to Service and MessageCategory set to CardAcquisition.\n\n\n\nParameter\nRequired\nDescription\n\n\n\n\nProtocolVersion\n\n3.0\n\n\nMessageClass\n\nService\n\n\nMessageCategory\n\nCardAcquisition\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  CardAcquisitionRequest object with:\n\n\n\nParameter\nRequired\nDescription\n\n\n\n\nSaleData.SaleTransactionID\n\nAn object with: TransactionID: your reference to identify a payment. We recommend using a unique value per payment. TimeStamp: date and time of the request in UTC format.\n\n\nSaleData.TokenRequestedType\n\nCustomer. Returns the card alias in the TokenValue field of the response. Note that the card alias is always returned in the AdditionalResponse.\n\n\nCardAcquisitionTransaction\n\nA required object that can be empty or contain: TotalAmount (optional): the transaction amount. When you do not know the amount yet, you can omit this parameter or specify an initial amount and provide the final amount later, in the payment request.PaymentType (optional): if you intend to continue with a payment, either omit this parameter or specify Normal. If you intend to continue with an unreferenced refund, see Card check before refund.\n\n\n\n\n\n\n\n\n\n\nWhen the card acquisition succeeds, you receive a  CardAcquisitionResponse with a message of  CARD_ACQ_COMPLETED in the AdditionalResponse.\n\n\n\n\n\nFrom the CardAcquisitionResponse, get the details that you need for your use case.\n\n\n\nParameter\nUsage\n\n\n\n\nPOIData.POITransactionID\nIf you are going to continue with a payment, keep the TimeStamp and TransactionID, because you need these card acquisition details in your payment request.\n\n\nPaymentInstrumentData.CardData\nIncludes: CardCountryCode: The three-digit code of the issuer country\/region. This parameter is included if you enabled receiving the issuer country\/region. PaymentToken.TokenValue: The card alias. You can use this to identify the shopper based on their card, but not to make payments. This parameter is included if you specified a TokenRequestedType of Customer in the request.\n\n\nResponse.AdditionalResponse\nTransaction data that you may need in your use case. You receive either a string of form-encoded key-value pairs or a Base64 string that you need to decode to get a JSON object.Data that you may need: alias: The card alias, to identify the shopper based on their card. PaymentAccountReference: If the shopper used an NFC wallet, you can use this instead of the alias. (Not present for card payments.)  cardBin and issuerCountry: Data to determine eligibility for tax free shopping. shopperReference and shopperEmail: For use in loyalty use cases. giftcardIndicator: If true, indicates the shopper presented a gift card.\n\n\n\n\nIf the AdditionalResponse doesn't include the expected details, you may need to enable receiving those details. Refer to Receive identifiers.\n\nAs an example, the AdditionalResponse from the CardAcquisitionResponse above contains:\ntid=46403161\ntransactionType=GOODS_SERVICES\nbackendGiftcardIndicator=false\nposadditionalamounts.originalAmountValue=1698\nexpiryYear=2028\nalias=M469509594859802\nposAmountGratuityValue=0\ngiftcardIndicator=false\npaymentMethodVariant=mc\ntxtime=13%3a22%3a59\niso8601TxDate=2021-03-05T12%3a22%3a59.0000000%2b0000\ncardType=mc\nposOriginalAmountValue=1698\naliasType=Default\ntxdate=05-03-2021\npaymentMethod=mc\nmerchantReference=369\nexpiryMonth=02\ncardSummary=9999\nposadditionalamounts.originalAmountCurrency=EUR\nposAuthAmountCurrency=EUR\nmessage=CARD_ACQ_COMPLETED\ncardIssuerCountryId=528\nposAmountCashbackValue=0\nposEntryMode=CLESS_CHIP\nfundingSource=CREDIT\nissuerCountry=NL\ncardScheme=mc\ncardBin=541333\nposAuthAmountValue=1698\n\n\nFinish with a payment\nDepending on your use case, you may want to complete the card acquisition flow with a payment. To do so, the payment request must include a reference to the card acquisition.\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\nRequired\nDescription\n\n\n\n\nSaleData.SaleTransactionID\n\nAn object with: TransactionID: Your reference to identify a payment. We recommend using a unique value per payment. TimeStamp: The date and time of the request in UTC format.\n\n\nSaleData.SaleToAcquirerData\n\nDepending on your use case, you may need to provide tender options or additional data here, or a flag for tax free shopping.\n\n\nPaymentTransaction.AmountsReq\n\nAn object with: Currency: The transaction currency.RequestedAmount: The final transaction amount.\n\n\nPaymentData.CardAcquisitionReference\n\nAn object referring to the card acquisition: TimeStamp: The time stamp returned in the POIData.POITransactionID of the card acquisition response. TransactionID: The transaction ID returned in the POIData.POITransactionID of the card acquisition response.\n\n\n\n\n\nHere is how you make a payment referring to a card acquisition that had a TimeStamp of 2021-03-05T12:22:59.000Z and a TransactionID of 8ha5001614946979000.\n\n\n\n\n\nIn the  PaymentResponse note the following:\n\nPaymentInstrumentData.CardData: The same card details that you received in the card acquisition response.\nResponse.AdditionalResponse: Transaction data, including the same details that you received in the card acquisition response. You 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\n\n\n\n\n\nFinish with a cancellation\nDepending on your use case, you may want to stop the card acquisition flow after you have received the response. For this, you make an EnableServiceRequest to abort the transaction. The terminal then discards the acquired card data.\n\n\nMake a Terminal API enable service request, specifying:\n\n\nThe standard \n  SaleToPOIRequest.MessageHeader\n object, with MessageClass set to Service and MessageCategory set to EnableService.\n\n\n\nParameter\nRequired\nDescription\n\n\n\n\nProtocolVersion\n\n3.0\n\n\nMessageClass\n\nService\n\n\nMessageCategory\n\nEnableService\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  EnableServiceRequest object with:\n\n\n\nParameter\nRequired\nDescription\n\n\n\n\nTransactionAction\n\nAbortTransaction.\n\n\nDisplayOutput\n\nOptional object to show your own message and an 'Approved' icon (green check mark) or a 'Declined' icon (red cross).\n\n\n\n\n\nThe next example is the basic request, without DisplayOutput object, to end the card acquisition flow with a cancellation. The terminal will show Canceled, a red cross , and Transaction canceled.\n\n\n\nShow your own message\nTo show your own message when ending the card acquisition with a cancellation, extend your EnableServiceRequest with a DisplayOutput object containing:\n\n\n\nParameter\nRequired\nDescription\n\n\n\n\nDevice\n\nCustomerDisplay\n\n\nInfoQualify\n\nDisplay\n\n\nOutputContent.PredefinedContent.ReferenceID\n\nIcon to show:Accepted: green check mark.AcceptedAnimated: animated green check mark.Declined: red cross.DeclinedAnimated: animated red cross.Idle: no icon..\n\n\nOutputContent.OutputFormat\n\nText\n\n\nOutputContent.OutputText\n\nAn array with one or two Text objects containing header and footer text. Provide empty values if you do not want to show text.\n\n\n\nThe following example will show Welcome!, an animated green check mark , and We logged your arrival time.\n\n\n\n\n\nWhen the cancellation succeeds, you receive an  EnableServiceResponse that contains:\n\nResponse.Result: Success\n\n\n\n\n\n\nIf you try to make a payment with a CardAcquisitionReference referring to the completed card acquisition that you cancelled, the payment will fail with a message Validation failed: No prior card acquisition data available.\nStop an in-progress card acquisition\nIf necessary, you can cancel a card acquisition before you receive a response, while the terminal is prompting the shopper to present their card. To do this, send an abort request from your POS system.\n\n\nMake a Terminal API abort request, specifying:\n\n\nThe standard \n  SaleToPOIRequest.MessageHeader\n object, with MessageClass set to Service and MessageCategory set to Abort.\n\n\n\nParameter\nRequired\nDescription\n\n\n\n\nProtocolVersion\n\n3.0\n\n\nMessageClass\n\nService\n\n\nMessageCategory\n\nAbort\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  AbortRequest object with:\n\n\n\nParameter\nRequired\nDescription\n\n\n\n\nAbortReason\n\nMerchantAbort\n\n\nMessageReference\n\nAn object with: MessageCategory: CardAcquisition SaleID: Your unique ID of the POS system component that made the card acquisition request. ServiceID: The ServiceID of the card acquisition request being cancelled.\n\n\n\n\n\nThe example shows a request to cancel an in-progress card acquisition with a ServiceID of 21796.\n\n\n\nA successful AbortRequest returns a response with a 200 OK HTTP status code and no body.\n\n\nCheck whether the cancellation succeeded:\n\nThe Present card prompt generated by your CardAcquisitionRequest disappears from the terminal display.\nYou receive a CardAcquisitionResponse containing:\n\nResult: Failure\nErrorCondition: Aborted\n\n\nThe following example shows the response for a card acquisition that was cancelled before it was completed.\n\n\n\n\n\nSee also\nCard acquisition scenarios:\n\n\n                    Card-based customer identification\n                \n                    Card check before refund\n                \n                    Tax-free shopping\n                \n                    Shopper loyalty\n                \n                    Wallet passes\n                \n\nOther resources:\n\n\n                    Receive card and shopper identifiers\n                \n","type":"page","locale":"en","boost":18,"hierarchy":{"lvl0":"Home","lvl1":"In-person payments","lvl2":"Card acquisition"},"hierarchy_url":{"lvl0":"https:\/\/docs.adyen.com\/","lvl1":"https:\/\/docs.adyen.com\/point-of-sale","lvl2":"\/point-of-sale\/card-acquisition"},"levels":3,"category":"In-person payments","category_color":"green","tags":["acquisition"]},"articleFiles":{"2nd-tap.png":"<img alt=\"\" src=\"https:\/\/docs.adyen.com\/user\/pages\/docs\/03.point-of-sale\/33.card-acquisition\/2nd-tap.png\" \/>","card-acq-payment-response.json":"<p alt=\"\">card-acq-payment-response.json<\/p>","card-acq-payment.json":"<p alt=\"\">card-acq-payment.json<\/p>","card-acquisition-response.json":"<p alt=\"\">card-acquisition-response.json<\/p>","card-acquisition.json":"<p alt=\"\">card-acquisition.json<\/p>","enable-service-abort-response.json":"<p alt=\"\">enable-service-abort-response.json<\/p>","enable-service-abort.json":"<p alt=\"\">enable-service-abort.json<\/p>"}}
