{"title":"Card and shopper identifiers for loyalty use cases","category":"default","creationDate":1776961627,"content":"<div class=\"additional-info-block output-inline\">\n<div class=\"additional-info-block__body\"><p><img style=\"width: 25px;\" alt=\"\" src=\"\/user\/pages\/docs\/03.point-of-sale\/36.loyalty\/payment-data\/postman-logo-vertical-orange-2021.svg?decoding=auto&amp;fetchpriority=auto\" \/>&nbsp;&nbsp;<a href=\"https:\/\/www.postman.com\/adyendev\/workspace\/adyen-in-person-payments\/overview\" target=\"_blank\" rel=\"nofollow noopener noreferrer\" class=\"external-link no-image\">Postman collection<\/a><\/p><p><strong>Implementation examples<\/strong><br \/><img style=\"width: 25px;\" alt=\"\" src=\"\/user\/pages\/reuse\/development-resources\/additional-info-resources\/dot-net-original.svg?decoding=auto&amp;fetchpriority=auto\" \/>&nbsp;&nbsp;<a href=\"https:\/\/github.com\/adyen-examples\/adyen-dotnet-online-payments\/tree\/main\/in-person-payments-loyalty-example\" target=\"_blank\" rel=\"nofollow noopener noreferrer\" class=\"external-link no-image\">.NET<\/a><\/p><\/div><\/div>\n\n<p>You can use the card alias to recognize the shopper's card. But for shopper loyalty use cases you can also go one step further and create your own identifiers to be returned in card acquisition and payment responses. That enables you to identify an individual instead of just their payment card, and make the shopping experience more personal.<\/p>\n<p>To use this method, you need to create customer profiles in your back-end system.<\/p>\n<h2>Requirements<\/h2>\n<p>Before you begin, take into account the following requirements and preparations.<\/p>\n<table>\n<thead>\n<tr>\n<th style=\"text-align: left;\">Requirement<\/th>\n<th style=\"text-align: left;\">Description<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"text-align: left;\"><strong>Integration type<\/strong><\/td>\n<td style=\"text-align: left;\">A <a href=\"\/pt\/point-of-sale\/basic-tapi-integration\/\">Terminal API integration<\/a> with payment terminals.<\/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\">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 check that your account is correctly configured for your loyalty use case.<\/li> <li markdown=\"1\"><a href=\"\/pt\/point-of-sale\/card-acquisition\/identifiers#receiving-identifiers-in-responses\">Enable receiving identifiers in Terminal API responses<\/a><\/li><\/ul><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h2>Identifiers to save<\/h2>\n<p>To be able to personalize the shopper experience, save the following <a href=\"\/pt\/point-of-sale\/card-acquisition\/identifiers\">identifiers<\/a> in the shopper profiles that you create in your back-end system:<\/p>\n<ul>\n<li><strong>Card alias<\/strong> (<code>alias<\/code>): A value that uniquely represents the shopper's card number (PAN), for example <strong>A37317672402294<\/strong>. With this, you can recognize the card that a shopper is using. You cannot use the card alias for making payments. You receive the card alias in the <code>AdditionalResponse<\/code>.<\/li>\n<li><strong>Shopper reference<\/strong> (<code>shopperReference<\/code>): Your reference to identify the shopper. You submit it with a payment, and receive it back in the <code>AdditionalResponse<\/code> for that payment and also in any later card acquisition and payment responses.\n<div class=\"sc-notice note\"><div>\n<p>To get the shopper reference, you need to <a href=\"\/pt\/point-of-sale\/card-acquisition\/identifiers#receiving-identifiers-in-responses\">enable receiving this identifier<\/a>.<\/p>\n<\/div><\/div><\/li>\n<li><strong>Shopper email<\/strong> (<code>shopperEmail<\/code>): You collect the shopper's email address in some way, and submit it with a payment. You receive it back in the <code>AdditionalResponse<\/code> for that payment and also in any later card acquisition and payment responses.<\/li>\n<\/ul>\n<h2>Shopper consent and PIN entry<\/h2>\n<p>To save a shopper profile in your back-end system and to submit the shopper reference and email with your payment requests to our platform, you need to ask the shopper for their consent.<\/p>\n<p>We can only return the shopper reference and email if your initial request also contains the <span translate=\"no\"><strong>recurringProcessingModel<\/strong><\/span> flag. This flag triggers the terminal to ask the shopper to authenticate by entering their PIN. Because there are still cards being used that do not have a PIN, 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> can disable asking for a PIN when the <span translate=\"no\"><strong>recurringProcessingModel<\/strong><\/span> flag is set. However, it goes against best practices to set this flag for every transaction.<\/p>\n<h2>Synchronous flow<\/h2>\n<p>The synchronous flow allows you to actively engage the shopper on the spot. For example, if you recognize the shopper from a card acquisition, you can apply a discount or offer to redeem loyalty points before making the payment.<\/p>\n<ol>\n<li>Make a card acquisition request to <a href=\"#pre-transaction-recognition\">check whether the shopper is recognized<\/a>.<\/li>\n<li>If the card acquisition response indicates the shopper is not known yet, <a href=\"#create-shopper\">create a new customer profile and make a payment<\/a>. To ask the shopper's consent and gather the data for the customer profile, you can make input requests.<\/li>\n<li>If the card acquisition response indicates the shopper is already known, optionally make input requests to communicate with the shopper, and then <a href=\"#payment-for-recognized-shopper\">make a payment for a recognized shopper<\/a>.<\/li>\n<\/ol>\n<h3 id=\"pre-transaction-recognition\">Check whether the shopper is recognized<\/h3>\n<p>When the shopper makes a purchase, first check if you already know the shopper.<\/p>\n<p>If you are in Estonia, choose the <em>Estonian ID card check<\/em> tab below to learn how to identify the shopper with their national ID card.<\/p>\n\n<div id=\"tabiM1nW\">\n    <div data-component-wrapper=\"tabs\">\n        <tabs\n                        :items=\"[{&quot;title&quot;:&quot;Payment card check&quot;,&quot;content&quot;:&quot;\\n&lt;ol&gt;\\n&lt;li&gt;\\n&lt;p&gt;&lt;a href=\\&quot;\\\/pt\\\/point-of-sale\\\/card-acquisition\\&quot;&gt;Make a card acquisition request&lt;\\\/a&gt; with:&lt;\\\/p&gt;\\n&lt;table&gt;\\n&lt;thead&gt;\\n&lt;tr&gt;\\n&lt;th style=\\&quot;text-align: left;\\&quot;&gt;Parameter&lt;\\\/th&gt;\\n&lt;th style=\\&quot;text-align: center;\\&quot;&gt;Required&lt;\\\/th&gt;\\n&lt;th style=\\&quot;text-align: left;\\&quot;&gt;Description&lt;\\\/th&gt;\\n&lt;\\\/tr&gt;\\n&lt;\\\/thead&gt;\\n&lt;tbody&gt;\\n&lt;tr&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;&lt;code&gt;CardAcquisitionTransaction&lt;\\\/code&gt;&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: center;\\&quot;&gt;&lt;img title=\\&quot;-white_check_mark-\\&quot; alt=\\&quot;-white_check_mark-\\&quot; class=\\&quot;smileys\\&quot; src=\\&quot;\\\/user\\\/data\\\/smileys\\\/emoji\\\/white_check_mark.png\\&quot; \\\/&gt;&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;This object is either empty, or contains: &lt;ul&gt;&lt;li markdown=\\&quot;1\\&quot;&gt;&lt;code&gt;TotalAmount&lt;\\\/code&gt;: The transaction amount.&lt;\\\/li&gt;&lt;\\\/ul&gt; You can omit &lt;code&gt;TotalAmount&lt;\\\/code&gt; when you do not know the amount yet. Or you can also change the transaction amount later, in the payment request.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;&lt;code&gt;TokenRequestType&lt;\\\/code&gt;&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: center;\\&quot;&gt;&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;&lt;span translate=\\&quot;no\\&quot;&gt;&lt;strong&gt;Customer&lt;\\\/strong&gt;&lt;\\\/span&gt;. Returns the card alias in the &lt;code&gt;TokenValue&lt;\\\/code&gt; field of the response. Note that the card alias is always returned in the &lt;code&gt;AdditionalResponse&lt;\\\/code&gt;.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;\\\/tbody&gt;\\n&lt;\\\/table&gt;\\n&lt;div data-component-wrapper=\\&quot;code-sample\\&quot;&gt;\\n&lt;code-sample :title=\\&quot;&#039;&#039;\\&quot; :id=\\&quot;&#039;card-acquisition&#039;\\&quot; :code-data=&#039;[{\\&quot;language\\&quot;:\\&quot;json\\&quot;,\\&quot;tabTitle\\&quot;:\\&quot;JSON\\&quot;,\\&quot;content\\&quot;:\\&quot;{\\\\n    \\\\\\&quot;SaleToPOIRequest\\\\\\&quot;:{\\\\n        \\\\\\&quot;MessageHeader\\\\\\&quot;:{\\\\n            \\\\\\&quot;ProtocolVersion\\\\\\&quot;:\\\\\\&quot;3.0\\\\\\&quot;,\\\\n            \\\\\\&quot;MessageClass\\\\\\&quot;:\\\\\\&quot;Service\\\\\\&quot;,\\\\n            \\\\\\&quot;MessageCategory\\\\\\&quot;:\\\\\\&quot;CardAcquisition\\\\\\&quot;,\\\\n            \\\\\\&quot;MessageType\\\\\\&quot;:\\\\\\&quot;Request\\\\\\&quot;,\\\\n            \\\\\\&quot;SaleID\\\\\\&quot;:\\\\\\&quot;POSSystemID12345\\\\\\&quot;,\\\\n            \\\\\\&quot;ServiceID\\\\\\&quot;:\\\\\\&quot;1020711110\\\\\\&quot;,\\\\n            \\\\\\&quot;POIID\\\\\\&quot;:\\\\\\&quot;V400m-346403161\\\\\\&quot;\\\\n        },\\\\n        \\\\\\&quot;CardAcquisitionRequest\\\\\\&quot;:{\\\\n            \\\\\\&quot;SaleData\\\\\\&quot;:{\\\\n                \\\\\\&quot;SaleTransactionID\\\\\\&quot;:{\\\\n                    \\\\\\&quot;TransactionID\\\\\\&quot;:\\\\\\&quot;02072\\\\\\&quot;,\\\\n                    \\\\\\&quot;TimeStamp\\\\\\&quot;:\\\\\\&quot;2020-01-07T14:14:04+00:00\\\\\\&quot;\\\\n                },\\\\n                \\\\\\&quot;TokenRequestedType\\\\\\&quot;:\\\\\\&quot;Customer\\\\\\&quot;\\\\n            },\\\\n            \\\\\\&quot;CardAcquisitionTransaction\\\\\\&quot;:{\\\\n                \\\\\\&quot;TotalAmount\\\\\\&quot;:24.98\\\\n            }\\\\n        }\\\\n    }\\\\n}\\&quot;},{\\&quot;language\\&quot;:\\&quot;java\\&quot;,\\&quot;tabTitle\\&quot;:\\&quot;Java\\&quot;,\\&quot;content\\&quot;:\\&quot;String serviceID = \\\\\\&quot;YOUR_UNIQUE_ATTEMPT_ID\\\\\\&quot;;\\\\nString saleID = \\\\\\&quot;YOUR_CASH_REGISTER_ID\\\\\\&quot;;\\\\nString POIID = \\\\\\&quot;YOUR_TERMINAL_ID\\\\\\&quot;;\\\\nString transactionID = \\\\\\&quot;YOUR_UNIQUE_TRANSACTION_ID\\\\\\&quot;;\\\\n\\\\nSaleToPOIRequest saleToPOIRequest = new SaleToPOIRequest();\\\\nMessageHeader messageHeader = new MessageHeader();\\\\nmessageHeader.setProtocolVersion(\\\\\\&quot;3.0\\\\\\&quot;);\\\\nmessageHeader.setMessageClass( MessageClassType.SERVICE );\\\\nmessageHeader.setMessageCategory( MessageCategoryType.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(24.98) );\\\\ncardAcquisitionRequest.setCardAcquisitionTransaction(cardAcquisitionTransaction);\\\\nsaleToPOIRequest.setCardAcquisitionRequest(cardAcquisitionRequest);\\\\nterminalAPIRequest.setSaleToPOIRequest(saleToPOIRequest);\\&quot;}]&#039; :enable-copy-link-to-code-block=\\&quot;true\\&quot; :code-sample-card-size=\\&quot;&#039;fullsize&#039;\\&quot;&gt;&lt;\\\/code-sample&gt;\\n&lt;\\\/div&gt;\\n&lt;\\\/li&gt;\\n&lt;li&gt;\\n&lt;p&gt;When you receive the  &lt;a href=\\&quot;https:\\\/\\\/docs.adyen.com\\\/api-explorer\\\/terminal-api\\\/latest\\\/post\\\/cardacquisition#responses-200-Response\\&quot; class=\\&quot;codeLabel  external-link no-image\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot;&gt;CardAcquisitionResponse&lt;\\\/a&gt;, keep the &lt;code&gt;TimeStamp&lt;\\\/code&gt; and &lt;code&gt;TransactionID&lt;\\\/code&gt; from the &lt;code&gt;POIData.POITransactionID&lt;\\\/code&gt;. You need these details later in your payment request.&lt;\\\/p&gt;\\n&lt;div data-component-wrapper=\\&quot;code-sample\\&quot;&gt;\\n&lt;code-sample :title=\\&quot;&#039;Card acquisition response&#039;\\&quot; :id=\\&quot;&#039;&#039;\\&quot; :code-data=&#039;[{\\&quot;language\\&quot;:\\&quot;json\\&quot;,\\&quot;tabTitle\\&quot;:\\&quot;\\&quot;,\\&quot;content\\&quot;:\\&quot;{\\\\n    \\\\\\&quot;SaleToPOIResponse\\\\\\&quot;: {\\\\n        \\\\\\&quot;CardAcquisitionResponse\\\\\\&quot;: {\\\\n            \\\\\\&quot;POIData\\\\\\&quot;: {\\\\n                \\\\\\&quot;POITransactionID\\\\\\&quot;: {\\\\n                    \\\\\\&quot;TimeStamp\\\\\\&quot;: \\\\\\&quot;2020-01-17T14:14:48.000Z\\\\\\&quot;,\\\\n                    \\\\\\&quot;TransactionID\\\\\\&quot;: \\\\\\&quot;8ha5001579009268002\\\\\\&quot;\\\\n                },\\\\n                \\\\\\&quot;SaleData\\\\\\&quot;: {...}\\\\n            },\\\\n            \\\\\\&quot;PaymentInstrumentData\\\\\\&quot;: {\\\\n                \\\\\\&quot;CardData\\\\\\&quot;: {\\\\n                    \\\\\\&quot;PaymentToken\\\\\\&quot;: {\\\\n                        \\\\\\&quot;TokenRequestedType\\\\\\&quot;: \\\\\\&quot;Customer\\\\\\&quot;,\\\\n                        \\\\\\&quot;TokenValue\\\\\\&quot;: \\\\\\&quot;M469509594859802\\\\\\&quot;\\\\n                    },\\\\n                    ...\\\\n                    \\\\\\&quot;PaymentBrand\\\\\\&quot;: \\\\\\&quot;mc\\\\\\&quot;,\\\\n                    \\\\\\&quot;MaskedPan\\\\\\&quot;: \\\\\\&quot;541333 **** 9999\\\\\\&quot;,\\\\n                    \\\\\\&quot;SensitiveCardData\\\\\\&quot;: {\\\\n                        \\\\\\&quot;ExpiryDate\\\\\\&quot;: \\\\\\&quot;0228\\\\\\&quot;\\\\n                    }\\\\n                },\\\\n                \\\\\\&quot;PaymentInstrumentType\\\\\\&quot;: \\\\\\&quot;Card\\\\\\&quot;\\\\n            },\\\\n            \\\\\\&quot;Response\\\\\\&quot;: {\\\\n                \\\\\\&quot;Result\\\\\\&quot;: \\\\\\&quot;Success\\\\\\&quot;,\\\\n                \\\\\\&quot;AdditionalResponse\\\\\\&quot;: \\\\\\&quot;tid=46403161&amp;amp;transactionType=GOODS_SERVICES&amp;amp;backendGiftcardIndicator=false&amp;amp;posadditionalamounts.originalAmountValue=2370&amp;amp;expiryYear=2028&amp;amp;alias=M469509594859802&amp;amp;posAmountGratuityValue=0&amp;amp;giftcardIndicator=false&amp;amp;paymentMethodVariant=mc&amp;amp;txtime=17%3a34%3a33&amp;amp;iso8601TxDate=2020-01-08T16%3a34%3a33.0000000%2b0000&amp;amp;cardType=mc&amp;amp;posOriginalAmountValue=2370&amp;amp;aliasType=Default&amp;amp;txdate=08-01-2020&amp;amp;paymentMethod=mc&amp;amp;merchantReference=02076&amp;amp;expiryMonth=02&amp;amp;cardSummary=9999&amp;amp;posadditionalamounts.originalAmountCurrency=EUR&amp;amp;posAuthAmountCurrency=EUR&amp;amp;posAmountCashbackValue=0&amp;amp;posEntryMode=CLESS_CHIP&amp;amp;fundingSource=CREDIT&amp;amp;cardScheme=mc&amp;amp;cardBin=541333&amp;amp;posAuthAmountValue=2370\\\\\\&quot;\\\\n            }\\\\n        },\\\\n        \\\\\\&quot;MessageHeader\\\\\\&quot;: {...}\\\\n    }\\\\n}\\&quot;}]&#039; :enable-copy-link-to-code-block=\\&quot;true\\&quot; :code-sample-card-size=\\&quot;&#039;fullsize&#039;\\&quot;&gt;&lt;\\\/code-sample&gt;\\n&lt;\\\/div&gt;\\n&lt;\\\/li&gt;\\n&lt;li&gt;\\n&lt;p&gt;To verify whether you already know the shopper, check the &lt;code&gt;AdditionalResponse&lt;\\\/code&gt;. You may need to Base64-decode the string first.&lt;\\\/p&gt;\\n&lt;ul&gt;\\n&lt;li&gt;\\n&lt;p&gt;If the &lt;code&gt;AdditionalResponse&lt;\\\/code&gt; contains a &lt;code&gt;shopperReference&lt;\\\/code&gt; and\\\/or a &lt;code&gt;shopperEmail&lt;\\\/code&gt;, you already created a customer profile for the shopper. This means the shopper is known.&lt;\\\/p&gt;\\n&lt;\\\/li&gt;\\n&lt;li&gt;\\n&lt;p&gt;Or check the &lt;code&gt;alias&lt;\\\/code&gt; in the &lt;code&gt;AdditionalResponse&lt;\\\/code&gt; against the card aliases stored in your system.&lt;br \\\/&gt;\\nIf you specified a &lt;code&gt;TokenRequestedType&lt;\\\/code&gt; of &lt;span translate=\\&quot;no\\&quot;&gt;&lt;strong&gt;Customer&lt;\\\/strong&gt;&lt;\\\/span&gt; in the request, the card alias is also returned in &lt;code&gt;PaymentToken.TokenValue&lt;\\\/code&gt;.&lt;br \\\/&gt;\\nIf the shopper used an NFC wallet, there is no card alias. In that case, use the &lt;code&gt;PaymentAccountReference&lt;\\\/code&gt; instead.&lt;\\\/p&gt;\\n&lt;\\\/li&gt;\\n&lt;\\\/ul&gt;\\n&lt;\\\/li&gt;\\n&lt;li&gt;\\n&lt;p&gt;Take the next step:&lt;\\\/p&gt;\\n&lt;ul&gt;\\n&lt;li&gt;If the shopper is not known yet, &lt;a href=\\&quot;#create-shopper\\&quot;&gt;create a new customer profile and make a payment&lt;\\\/a&gt;.&lt;\\\/li&gt;\\n&lt;li&gt;If the shopper is already known, &lt;a href=\\&quot;#payment-for-recognized-shopper\\&quot;&gt;make a payment for a recognized shopper&lt;\\\/a&gt;.&lt;\\\/li&gt;\\n&lt;\\\/ul&gt;\\n&lt;\\\/li&gt;\\n&lt;\\\/ol&gt;\\n&quot;,&quot;altTitle&quot;:null,&quot;oldTabId&quot;:&quot;payment_card_check_0_1&quot;,&quot;relation&quot;:&quot;&quot;},{&quot;title&quot;:&quot;Estonian ID card check &quot;,&quot;content&quot;:&quot;\\n&lt;p&gt;In Estonia, you can recognize the shopper by their national ID card.&lt;\\\/p&gt;\\n&lt;ol&gt;\\n&lt;li&gt;\\n&lt;p&gt;&lt;a href=\\&quot;\\\/pt\\\/point-of-sale\\\/card-acquisition\\&quot;&gt;Make a card acquisition request&lt;\\\/a&gt; with:&lt;\\\/p&gt;\\n&lt;table&gt;\\n&lt;thead&gt;\\n&lt;tr&gt;\\n&lt;th style=\\&quot;text-align: left;\\&quot;&gt;Parameter&lt;\\\/th&gt;\\n&lt;th style=\\&quot;text-align: center;\\&quot;&gt;Required&lt;\\\/th&gt;\\n&lt;th style=\\&quot;text-align: left;\\&quot;&gt;Description&lt;\\\/th&gt;\\n&lt;\\\/tr&gt;\\n&lt;\\\/thead&gt;\\n&lt;tbody&gt;\\n&lt;tr&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;&lt;code&gt;CardAcquisitionTransaction&lt;\\\/code&gt;&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: center;\\&quot;&gt;&lt;img title=\\&quot;-white_check_mark-\\&quot; alt=\\&quot;-white_check_mark-\\&quot; class=\\&quot;smileys\\&quot; src=\\&quot;\\\/user\\\/data\\\/smileys\\\/emoji\\\/white_check_mark.png\\&quot; \\\/&gt;&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;This object is either empty, or contains: &lt;ul&gt;&lt;li markdown=\\&quot;1\\&quot;&gt;&lt;code&gt;TotalAmount&lt;\\\/code&gt;: The transaction amount.&lt;\\\/li&gt;&lt;\\\/ul&gt; You can omit &lt;code&gt;TotalAmount&lt;\\\/code&gt; when you do not know the amount yet. Or you can also change the transaction amount later, in the payment request.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;&lt;code&gt;SaleToPOIData&lt;\\\/code&gt;&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: center;\\&quot;&gt;&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;&lt;div class=\\&quot;sc-notice note\\&quot;&gt;&lt;div&gt; Only required in Estonia, where Estonian ID cards are used as loyalty cards. &lt;\\\/div&gt;&lt;\\\/div&gt; &lt;br&gt; Contains the following Base64-encoded string: &lt;code&gt;\\&quot;eyJPcGVyYXRpb24iOiBbeyJUeXBlIjogIlNtYXJ0Q2FyZExveWFsdHlSZWFkIn1dfQ==\\&quot;&lt;\\\/code&gt;.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;&lt;code&gt;TokenRequestType&lt;\\\/code&gt;&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: center;\\&quot;&gt;&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;&lt;span translate=\\&quot;no\\&quot;&gt;&lt;strong&gt;Customer&lt;\\\/strong&gt;&lt;\\\/span&gt;. Returns the card alias in the &lt;code&gt;TokenValue&lt;\\\/code&gt; field of the response. Note that the card alias is always returned in the &lt;code&gt;AdditionalResponse&lt;\\\/code&gt;.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;\\\/tbody&gt;\\n&lt;\\\/table&gt;\\n&lt;div data-component-wrapper=\\&quot;code-sample\\&quot;&gt;\\n&lt;code-sample :title=\\&quot;&#039;&#039;\\&quot; :id=\\&quot;&#039;card-acquisition-estonia&#039;\\&quot; :code-data=&#039;[{\\&quot;language\\&quot;:\\&quot;json\\&quot;,\\&quot;tabTitle\\&quot;:\\&quot;JSON\\&quot;,\\&quot;content\\&quot;:\\&quot;{\\\\n    \\\\\\&quot;SaleToPOIRequest\\\\\\&quot;:{\\\\n        \\\\\\&quot;MessageHeader\\\\\\&quot;:{\\\\n            \\\\\\&quot;ProtocolVersion\\\\\\&quot;:\\\\\\&quot;3.0\\\\\\&quot;,\\\\n            \\\\\\&quot;MessageClass\\\\\\&quot;:\\\\\\&quot;Service\\\\\\&quot;,\\\\n            \\\\\\&quot;MessageCategory\\\\\\&quot;:\\\\\\&quot;CardAcquisition\\\\\\&quot;,\\\\n            \\\\\\&quot;MessageType\\\\\\&quot;:\\\\\\&quot;Request\\\\\\&quot;,\\\\n            \\\\\\&quot;SaleID\\\\\\&quot;:\\\\\\&quot;POSSystemID12345\\\\\\&quot;,\\\\n            \\\\\\&quot;ServiceID\\\\\\&quot;:\\\\\\&quot;1020711110\\\\\\&quot;,\\\\n            \\\\\\&quot;POIID\\\\\\&quot;:\\\\\\&quot;V400m-346403161\\\\\\&quot;\\\\n        },\\\\n        \\\\\\&quot;CardAcquisitionRequest\\\\\\&quot;:{\\\\n            \\\\\\&quot;SaleData\\\\\\&quot;:{\\\\n                \\\\\\&quot;SaleTransactionID\\\\\\&quot;:{\\\\n                    \\\\\\&quot;TransactionID\\\\\\&quot;:\\\\\\&quot;02072\\\\\\&quot;,\\\\n                    \\\\\\&quot;TimeStamp\\\\\\&quot;:\\\\\\&quot;2020-01-07T14:14:04+00:00\\\\\\&quot;\\\\n                },\\\\n                \\\\\\&quot;SaleToPOIData\\\\\\&quot;: \\\\\\&quot;eyJPcGVyYXRpb24iOiBbeyJUeXBlIjogIlNtYXJ0Q2FyZExveWFsdHlSZWFkIn1dfQ==\\\\\\&quot;\\\\n            },\\\\n            \\\\\\&quot;CardAcquisitionTransaction\\\\\\&quot;:{\\\\n                \\\\\\&quot;TotalAmount\\\\\\&quot;:24.98\\\\n            }\\\\n        }\\\\n    }\\\\n}\\&quot;},{\\&quot;language\\&quot;:\\&quot;java\\&quot;,\\&quot;tabTitle\\&quot;:\\&quot;Java\\&quot;,\\&quot;content\\&quot;:\\&quot;String serviceID = \\\\\\&quot;YOUR_UNIQUE_ATTEMPT_ID\\\\\\&quot;;\\\\nString saleID = \\\\\\&quot;YOUR_CASH_REGISTER_ID\\\\\\&quot;;\\\\nString POIID = \\\\\\&quot;YOUR_TERMINAL_ID\\\\\\&quot;;\\\\nString transactionID = \\\\\\&quot;YOUR_UNIQUE_TRANSACTION_ID\\\\\\&quot;;\\\\n\\\\nSaleToPOIRequest saleToPOIRequest = new SaleToPOIRequest();\\\\nMessageHeader messageHeader = new MessageHeader();\\\\nmessageHeader.setProtocolVersion(\\\\\\&quot;3.0\\\\\\&quot;);\\\\nmessageHeader.setMessageClass( MessageClassType.SERVICE );\\\\nmessageHeader.setMessageCategory( MessageCategoryType.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.setSaleToPOIData(\\\\\\&quot;eyJPcGVyYXRpb24iOiBbeyJUeXBlIjogIlNtYXJ0Q2FyZExveWFsdHlSZWFkIn1dfQ==\\\\\\&quot;);\\\\ncardAcquisitionRequest.setSaleData(saleData);\\\\n\\\\nCardAcquisitionTransaction cardAcquisitionTransaction = new CardAcquisitionTransaction();\\\\ncardAcquisitionTransaction.setTotalAmount( BigDecimal.valueOf(24.98) );\\\\ncardAcquisitionRequest.setCardAcquisitionTransaction(cardAcquisitionTransaction);\\\\nsaleToPOIRequest.setCardAcquisitionRequest(cardAcquisitionRequest);\\\\nterminalAPIRequest.setSaleToPOIRequest(saleToPOIRequest);\\&quot;}]&#039; :enable-copy-link-to-code-block=\\&quot;true\\&quot; :code-sample-card-size=\\&quot;&#039;fullsize&#039;\\&quot;&gt;&lt;\\\/code-sample&gt;\\n&lt;\\\/div&gt;\\n&lt;\\\/li&gt;\\n&lt;li&gt;\\n&lt;p&gt;When you receive the  &lt;a href=\\&quot;https:\\\/\\\/docs.adyen.com\\\/api-explorer\\\/terminal-api\\\/latest\\\/post\\\/cardacquisition#responses-200-Response\\&quot; class=\\&quot;codeLabel  external-link no-image\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot;&gt;CardAcquisitionResponse&lt;\\\/a&gt;, keep the &lt;code&gt;TimeStamp&lt;\\\/code&gt; and &lt;code&gt;TransactionID&lt;\\\/code&gt; from the &lt;code&gt;POIData.POITransactionID&lt;\\\/code&gt;. You need these details later in your payment request.&lt;br \\\/&gt;\\nNote that the &lt;code&gt;LoyaltyBrand&lt;\\\/code&gt; can be &lt;span translate=\\&quot;no\\&quot;&gt;&lt;strong&gt;estonian-id&lt;\\\/strong&gt;&lt;\\\/span&gt; or &lt;span translate=\\&quot;no\\&quot;&gt;&lt;strong&gt;estonian-id-cosmox&lt;\\\/strong&gt;&lt;\\\/span&gt;, depending on the card type.&lt;\\\/p&gt;\\n&lt;div data-component-wrapper=\\&quot;code-sample\\&quot;&gt;\\n&lt;code-sample :title=\\&quot;&#039;Card acquisition response&#039;\\&quot; :id=\\&quot;&#039;&#039;\\&quot; :code-data=&#039;[{\\&quot;language\\&quot;:\\&quot;json\\&quot;,\\&quot;tabTitle\\&quot;:\\&quot;\\&quot;,\\&quot;content\\&quot;:\\&quot;{\\\\n    \\\\\\&quot;SaleToPOIResponse\\\\\\&quot;: {\\\\n        \\\\\\&quot;CardAcquisitionResponse\\\\\\&quot;: {\\\\n             \\\\\\&quot;LoyaltyAccount\\\\\\&quot;: [\\\\n                {\\\\n                    \\\\\\&quot;LoyaltyAccountID\\\\\\&quot;: {\\\\n                           \\\\\\&quot;EntryMode\\\\\\&quot;: [\\\\n                              \\\\\\&quot;ICC\\\\\\&quot;\\\\n                           ],\\\\n                          \\\\\\&quot;IdentificationType\\\\\\&quot;: \\\\\\&quot;AccountNumber\\\\\\&quot;,\\\\n                          \\\\\\&quot;LoyaltyID\\\\\\&quot;: \\\\\\&quot;39509101410\\\\\\&quot;\\\\n                    },\\\\n                    \\\\\\&quot;LoyaltyBrand\\\\\\&quot;: \\\\\\&quot;estonian-id\\\\\\&quot; \\\\n                }\\\\n            ],\\\\n            \\\\\\&quot;POIData\\\\\\&quot;: {\\\\n                \\\\\\&quot;POITransactionID\\\\\\&quot;: {\\\\n                    \\\\\\&quot;TimeStamp\\\\\\&quot;: \\\\\\&quot;2020-01-17T14:14:48.000Z\\\\\\&quot;,\\\\n                    \\\\\\&quot;TransactionID\\\\\\&quot;: \\\\\\&quot;8ha5001579009268002\\\\\\&quot;\\\\n                },\\\\n                \\\\\\&quot;SaleData\\\\\\&quot;: {...}\\\\n            },\\\\n            \\\\\\&quot;PaymentInstrumentData\\\\\\&quot;: {\\\\n                \\\\\\&quot;CardData\\\\\\&quot;: {},\\\\n                \\\\\\&quot;PaymentInstrumentType\\\\\\&quot;: \\\\\\&quot;Card\\\\\\&quot;\\\\n            },\\\\n            \\\\\\&quot;Response\\\\\\&quot;: {\\\\n                \\\\\\&quot;Result\\\\\\&quot;: \\\\\\&quot;Success\\\\\\&quot;,\\\\n                \\\\\\&quot;AdditionalResponse\\\\\\&quot;: \\\\\\&quot;...SmartCardLoyalty.ExpiryDate=13%2003%202024&amp;amp;SmartCardLoyalty.FirstName=SVEN&amp;amp;SmartCardLoyalty.LastName=SHOPPER...\\\\\\&quot;\\\\n            }\\\\n        },\\\\n        \\\\\\&quot;MessageHeader\\\\\\&quot;: {...}\\\\n    }\\\\n}\\&quot;}]&#039; :enable-copy-link-to-code-block=\\&quot;true\\&quot; :code-sample-card-size=\\&quot;&#039;fullsize&#039;\\&quot;&gt;&lt;\\\/code-sample&gt;\\n&lt;\\\/div&gt;\\n&lt;\\\/li&gt;\\n&lt;li&gt;\\n&lt;p&gt;To verify whether you already know the shopper, check the &lt;code&gt;AdditionalResponse&lt;\\\/code&gt;. You may need to Base64-decode the string first.&lt;\\\/p&gt;\\n&lt;ul&gt;\\n&lt;li&gt;If the &lt;code&gt;AdditionalResponse&lt;\\\/code&gt; contains the &lt;code&gt;FirstName&lt;\\\/code&gt; and &lt;code&gt;LastName&lt;\\\/code&gt; of the shopper and the &lt;code&gt;ExpiryDate&lt;\\\/code&gt; of card, you already created a customer profile for the shopper. This means the shopper is known.&lt;\\\/li&gt;\\n&lt;\\\/ul&gt;\\n&lt;\\\/li&gt;\\n&lt;li&gt;\\n&lt;p&gt;Take the next step:&lt;\\\/p&gt;\\n&lt;ul&gt;\\n&lt;li&gt;If the shopper isn&#039;t known yet, &lt;a href=\\&quot;#create-shopper\\&quot;&gt;create a new customer profile and make a payment&lt;\\\/a&gt;.&lt;\\\/li&gt;\\n&lt;li&gt;If the shopper is already known, &lt;a href=\\&quot;#payment-for-recognized-shopper\\&quot;&gt;make a payment for a recognized shopper&lt;\\\/a&gt;.\\n&quot;,&quot;altTitle&quot;:null,&quot;oldTabId&quot;:&quot;estonian_id_card_check__1_2&quot;,&quot;relation&quot;:&quot;&quot;}]\"\n            :should-update-when-url-changes='false'>\n        <\/tabs>\n    <\/div>\n<\/div>\n<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<h3 id=\"create-shopper\">Create a new customer profile and make a payment<\/h3>\n<p>When the card acquisition response shows the shopper is not known yet, you continue with a payment request that:<\/p>\n<ul>\n<li>Refers to the card acquisition request.<\/li>\n<li>Creates shopper identifiers to save in your back-end system.<\/li>\n<\/ul>\n<ol>\n<li>\n<p>Collect details from the shopper as needed for your use case, and ask the shopper's consent to save those details.<br \/>\nYou can let your staff enter the information in your POS app, but you can also make input requests to let the shopper enter the information on the terminal. For example:<\/p>\n<ul>\n<li>Make a <a href=\"\/pt\/point-of-sale\/shopper-engagement\/shopper-input\/confirmation\">confirmation input request<\/a> or a <a href=\"\/pt\/point-of-sale\/shopper-engagement\/shopper-input\/signature\">signature input request<\/a> to ask the shopper's consent.<\/li>\n<li>Make <a href=\"\/pt\/point-of-sale\/shopper-engagement\/shopper-input\/text\">text input requests<\/a> to collect the shopper's name and email address, and a <a href=\"\/pt\/point-of-sale\/shopper-engagement\/shopper-input\/digit\">digit input request<\/a> to collect their phone number.<\/li>\n<li>Make a <a href=\"\/pt\/point-of-sale\/shopper-engagement\/display-data\/display-qr-code\">display request<\/a> with a QR code containing a URL to join your loyalty program or to download an app.<\/li>\n<\/ul>\n<\/li>\n<li>\n<p><a href=\"\/pt\/point-of-sale\/basic-tapi-integration\/make-a-payment\">Make a payment request<\/a> 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>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 referencing 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<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>SaleData.SaleToAcquirerData<\/code><\/td>\n<td style=\"text-align: center;\"><\/td>\n<td style=\"text-align: left;\">Data to create shopper identifiers. <p>See the <a href=\"#sale-to-acquirer-data\">instructions below<\/a>.<\/p><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>In <code>SaleData.SaleToAcquirerData<\/code> include:<br \/>\n<a id=\"sale-to-acquirer-data\"><\/a><\/p>\n<ul>\n<li><code>shopperReference<\/code>: Your unique reference for this shopper. Minimum length: three characters. Note that the value is case-sensitive. Do not include personally identifiable information (PII), such as name or email address.<\/li>\n<li><code>shopperEmail<\/code>: Optional. The shopper's email address, if you collected that in the first step.<\/li>\n<li><code>recurringProcessingModel<\/code>: <span translate=\"no\"><strong>CardOnFile<\/strong><\/span>. This triggers us to return the shopper reference and email in future card acquisition and payment responses.<\/li>\n<\/ul>\n<p>Pass the <code>SaleToAcquirerData<\/code> value in one of the following formats:<\/p>\n<ul>\n<li>Option 1: a JSON object converted to a Base64 encoded string. Refer to <a href=\"\/pt\/point-of-sale\/add-data#base64-json\">Add information to a payment<\/a>.<\/li>\n<li>Option 2: form-encoded key-value pairs (using <strong>&amp;<\/strong> as a separator). For example:<br \/>\n<code>shopperReference=12345&amp;shopperEmail=S.Hopper@example.com&amp;recurringProcessingModel=CardOnFile<\/code><\/li>\n<\/ul>\n<p>The format that you use here, will also be the format of the <code>AdditionalResponse<\/code> that you receive.<\/p>\n<div data-component-wrapper=\"code-sample\">\n<code-sample :title=\"''\" :id=\"'create-identifiers'\" :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\\\":\\\"01142\\\",\\n            \\\"POIID\\\":\\\"V400m-346403161\\\"\\n        },\\n        \\\"PaymentRequest\\\":{\\n            \\\"SaleData\\\":{\\n                \\\"SaleTransactionID\\\":{\\n                    \\\"TransactionID\\\":\\\"12420\\\",\\n                    \\\"TimeStamp\\\":\\\"2020-01-07T14:15:25.114Z\\\"\\n                },\\n                \\\"SaleToAcquirerData\\\":\\\"shopperEmail=S.Hopper@example.com&amp;shopperReference=YOUR_UNIQUE_SHOPPER_ID&amp;recurringProcessingModel=CardOnFile\\\",\\n                \\\"TokenRequestedType\\\":\\\"Customer\\\"\\n            },\\n            \\\"PaymentTransaction\\\":{\\n                \\\"AmountsReq\\\":{\\n                    \\\"Currency\\\":\\\"EUR\\\",\\n                    \\\"RequestedAmount\\\":24.98\\n                }\\n            },\\n            \\\"PaymentData\\\":{\\n                \\\"CardAcquisitionReference\\\":{\\n                    \\\"TimeStamp\\\": \\\"2020-01-17T14:14:48.000Z\\\",\\n                    \\\"TransactionID\\\": \\\"8ha5001579009268002\\\"\\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();\\nsaleData.setSaleToAcquirerData(\\\"shopperEmail=s.hopper@example.com&amp;shopperReference=YOUR_UNIQUE_SHOPPER_ID&amp;recurringProcessingModel=CardOnFile\\\");\\nsaleData.setTokenRequestedType( TokenRequestedType.CUSTOMER );\\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(24.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>When you receive the  <a href=\"https:\/\/docs.adyen.com\/api-explorer\/terminal-api\/latest\/post\/payment#responses-200\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">PaymentResponse<\/a>, keep the following identifiers from the <code>AdditionalResponse<\/code>. You may need to Base64-decode the string first.<\/p>\n<ul>\n<li><code>alias<\/code>: The card alias.<br \/>\nIf you specified a <code>TokenRequestedType<\/code> of <span translate=\"no\"><strong>Customer<\/strong><\/span> in the request, the card alias is also returned in <code>PaymentToken.TokenValue<\/code>.<\/li>\n<li><code>PaymentAccountReference<\/code>: A value that represents the shopper's payment account that their card and\/or NFC wallet is linked to. For NFC wallet transactions, a PAN is not available and thus there is no card alias.<\/li>\n<li><code>shopperReference<\/code>: Your unique reference for this shopper that you specified in the request.<\/li>\n<li><code>shopperEmail<\/code>: The shopper's email address that you specified in the request.<\/li>\n<\/ul>\n<div data-component-wrapper=\"code-sample\">\n<code-sample :title=\"'Response showing the shopperReference you created'\" :id=\"''\" :code-data='[{\"language\":\"json\",\"tabTitle\":\"\",\"content\":\"{\\n    \\\"SaleToPOIResponse\\\": {\\n        \\\"PaymentResponse\\\": {\\n            \\\"POIData\\\": {...},\\n            \\\"SaleData\\\": {...},\\n            \\\"PaymentReceipt\\\": [...],\\n            \\\"PaymentResult\\\": {\\n                ...\\n                \\\"PaymentInstrumentData\\\": {\\n                    \\\"CardData\\\": {\\n                        \\\"EntryMode\\\": [\\n                            \\\"Contactless\\\"\\n                        ],\\n                    \\\"PaymentToken\\\": {\\n                        \\\"TokenRequestedType\\\": \\\"Customer\\\",\\n                        \\\"TokenValue\\\": \\\"M469509594859802\\\"\\n                    },\\n                    \\\"PaymentBrand\\\": \\\"mc\\\",\\n                    \\\"MaskedPan\\\": \\\"541333 **** 9999\\\",\\n                    \\\"SensitiveCardData\\\": {\\n                        \\\"CardSeqNumb\\\": \\\"83\\\",\\n                        \\\"ExpiryDate\\\": \\\"0228\\\"\\n                    }\\n                },\\n                \\\"PaymentInstrumentType\\\": \\\"Card\\\"\\n            },\\n            \\\"AmountsResp\\\": {\\n                \\\"AuthorizedAmount\\\": 24.98,\\n                \\\"Currency\\\": \\\"EUR\\\"\\n            },\\n            \\\"Response\\\": {\\n                \\\"Result\\\": \\\"Success\\\",\\n                \\\"AdditionalResponse\\\": \\\"...&amp;alias=M469509594859802...&amp;shopperReference=YOUR_UNIQUE_SHOPPER_ID&amp;shopperEmail=S.Hopper%40gmail.com...\\\"\\n            }\\n        },\\n        \\\"MessageHeader\\\": {...}\\n    }\\n}\"}]' :enable-copy-link-to-code-block=\"true\" :code-sample-card-size=\"'fullsize'\"><\/code-sample>\n<\/div>\n<p>From now on the identifiers for this shopper are returned in card acquisition and payment responses.<\/p>\n<\/li>\n<li>\n<p>In your system, create a customer profile for the shopper and save the shopper identifiers that you received in the payment response.<\/p>\n<\/li>\n<li>\n<p>Also save the transaction data with the shopper's customer profile, to start building a transaction history.<\/p>\n<\/li>\n<\/ol>\n<h3 id=\"payment-for-recognized-shopper\">Make a payment for a recognized shopper<\/h3>\n<p>When the card acquisition response shows the shopper is known already, you follow up with a payment request that refers to the card acquisition.<\/p>\n<ol>\n<li>\n<p>Using the <code>shopperReference<\/code> or other identifiers you received in the card acquisition response, find the shopper in your system.<\/p>\n<\/li>\n<li>\n<p>Depending on your business logic, you may want to apply a discount or offer a gift. For example:<\/p>\n<ul>\n<li>Make a <a href=\"\/pt\/point-of-sale\/shopper-engagement\/shopper-input\/confirmation\">confirmation input request<\/a> to ask whether the shopper wants to redeem loyalty points.<\/li>\n<li>\n<p>Make a <a href=\"\/pt\/point-of-sale\/shopper-engagement\/display-data\/display-qr-code\">display request<\/a> with a QR code containing a link to a promotional offer.<\/p>\n<!-- list separator -->\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p>If necessary, update the final transaction amount. For example, if you applied a discount.<\/p>\n<\/li>\n<li>\n<p><a href=\"\/pt\/point-of-sale\/basic-tapi-integration\/make-a-payment\">Make a payment request<\/a> 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>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=\"\/pt\/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 containing data from 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<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<\/tbody>\n<\/table>\n<div data-component-wrapper=\"code-sample\">\n<code-sample :title=\"''\" :id=\"'shopper-recognized'\" :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\\\":\\\"01142\\\",\\n            \\\"POIID\\\":\\\"V400m-346403161\\\"\\n        },\\n        \\\"PaymentRequest\\\":{\\n            \\\"SaleData\\\":{\\n                \\\"SaleTransactionID\\\":{\\n                    \\\"TransactionID\\\":\\\"12420\\\",\\n                    \\\"TimeStamp\\\":\\\"2020-01-07T14:15:25.114Z\\\"\\n                },\\n                \\\"TokenRequestedType\\\":\\\"Customer\\\"\\n            },\\n            \\\"PaymentTransaction\\\":{\\n                \\\"AmountsReq\\\":{\\n                    \\\"Currency\\\":\\\"EUR\\\",\\n                    \\\"RequestedAmount\\\":24.98\\n                }\\n            },\\n            \\\"PaymentData\\\":{\\n                \\\"CardAcquisitionReference\\\":{\\n                    \\\"TimeStamp\\\": \\\"2020-01-17T14:14:48.000Z\\\",\\n                    \\\"TransactionID\\\": \\\"8ha5001579009268002\\\"\\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();\\nsaleData.setTokenRequestedType( TokenRequestedType.CUSTOMER );\\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(24.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>When you receive the  <a href=\"https:\/\/docs.adyen.com\/api-explorer\/terminal-api\/latest\/post\/payment#responses-200\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">PaymentResponse<\/a>, keep the following identifiers from the <code>AdditionalResponse<\/code>. You may need to Base64-decode the string first.<\/p>\n<ul>\n<li><code>alias<\/code>: The card alias.<br \/>\nIf you specified a <code>TokenRequestedType<\/code> of <span translate=\"no\"><strong>Customer<\/strong><\/span> in the request, the card alias is also returned in <code>PaymentToken.TokenValue<\/code>.<\/li>\n<li><code>PaymentAccountReference<\/code>: A value that represents the shopper's payment account that their card and\/or NFC wallet is linked to.<\/li>\n<li><code>shopperReference<\/code>: Your unique reference for this shopper, if you specified that when you <a href=\"#create-shopper\">created the customer profile<\/a>.<\/li>\n<li><code>shopperEmail<\/code>: The shopper's email address, if you specified that when you <a href=\"#create-shopper\">created the customer profile<\/a>.<\/li>\n<\/ul>\n<div data-component-wrapper=\"code-sample\">\n<code-sample :title=\"'Payment response for a recognized shopper'\" :id=\"''\" :code-data='[{\"language\":\"json\",\"tabTitle\":\"\",\"content\":\"{\\n    \\\"SaleToPOIResponse\\\": {\\n        \\\"PaymentResponse\\\": {\\n            \\\"POIData\\\": {...},\\n            \\\"PaymentReceipt\\\": [...],\\n            \\\"PaymentResult\\\": {\\n                ...,\\n                \\\"PaymentInstrumentData\\\": {\\n                    \\\"CardData\\\": {\\n                        ...,\\n                        \\\"PaymentToken\\\": {\\n                            \\\"TokenRequestedType\\\": \\\"Customer\\\",\\n                            \\\"TokenValue\\\": \\\"M469509594859802\\\"\\n                        },\\n                        \\\"PaymentBrand\\\": \\\"mc\\\",\\n                        \\\"MaskedPan\\\": \\\"541333 **** 9999\\\",\\n                        \\\"SensitiveCardData\\\": {\\n                            \\\"CardSeqNumb\\\": \\\"83\\\",\\n                            \\\"ExpiryDate\\\": \\\"0228\\\"\\n                        }\\n                    },\\n                    \\\"PaymentInstrumentType\\\": \\\"Card\\\"\\n                },\\n                \\\"AmountsResp\\\": {\\n                    \\\"AuthorizedAmount\\\": 24.98,\\n                    \\\"Currency\\\": \\\"EUR\\\"\\n                }\\n            },\\n            \\\"Response\\\": {\\n                \\\"Result\\\": \\\"Success\\\",\\n                \\\"AdditionalResponse\\\": \\\"...&amp;alias=M469509594859802...&amp;shopperReference=YOUR_UNIQUE_SHOPPER_ID&amp;shopperEmail=S.Hopper%40gmail.com...\\\"\\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>In your system, store the transaction data with the shopper's customer profile.<\/p>\n<\/li>\n<\/ol>\n<h2>Asynchronous flow<\/h2>\n<p>The asynchronous flow is a simpler implementation of shopper loyalty, where you rely on webhooks to make loyalty adjustments in your system after the payment. In this flow, you cannot apply discounts or other loyalty benefits on the spot before the payment.<\/p>\n<ol>\n<li>Make sure that you have set up receiving <a href=\"\/pt\/development-resources\/webhooks\">standard webhooks<\/a>.<\/li>\n<li>Create a customer profile for the shopper in your loyalty system.<\/li>\n<li>Make a payment.<\/li>\n<li>Wait for the AUTHORISATION webhook.<\/li>\n<li>Based on the identifiers in the AUTHORISATION webhook, update the shopper's customer profile in your loyalty system. For example, add loyalty points.<\/li>\n<li>Inform the shopper of the update in your loyalty system.<\/li>\n<\/ol>\n<p>For more information about this flow, see our <a href=\"\/pt\/unified-commerce\/loyalty-program\/payment-linked-loyalty\/?tab=asynchronous_2\">omnichannel documentation<\/a>.<\/p>\n<h2 id=\"see-also\">See also<\/h2>\n<div class=\"see-also-links output-inline\" id=\"see-also\">\n<ul><li><a href=\"\/point-of-sale\/loyalty\/wallet-passes\"\n                        target=\"_self\"\n                        >\n                    Loyalty with NFC wallet passes\n                <\/a><\/li><li><a href=\"\/point-of-sale\/card-acquisition\"\n                        target=\"_self\"\n                        >\n                    Card acquisition\n                <\/a><\/li><li><a href=\"\/point-of-sale\/add-data\"\n                        target=\"_self\"\n                        >\n                    Pass additional data\n                <\/a><\/li><li><a href=\"\/online-payments\/tokenization\"\n                        target=\"_self\"\n                        >\n                    Tokenization\n                <\/a><\/li><\/ul><\/div>\n","url":"https:\/\/docs.adyen.com\/pt\/point-of-sale\/loyalty\/payment-data","articleFields":{"description":"To personalize the shopping experience, recognize shoppers based on card data and other identifiers.","parameters":{"built_integration":"<a href=\"\/online-payments\/build-your-integration\/advanced-flow?platform=Web&integration=Components\">Built a Components integration<\/a>","logo_2":"![](\/reuse\/development-resources\/additional-info-resources\/dot-net-original.svg?resize=25)","example_2":"[.NET](https:\/\/github.com\/adyen-examples\/adyen-dotnet-online-payments\/tree\/main\/in-person-payments-loyalty-example)"},"page_id":"bc780754-b147-4e10-9a08-dd5da4ed470e","feedback_component":true,"filters_component":false,"decision_tree":"[]"},"algolia":{"url":"https:\/\/docs.adyen.com\/pt\/point-of-sale\/loyalty\/payment-data","title":"Card and shopper identifiers for loyalty use cases","content":"\n&nbsp;&nbsp;Postman collectionImplementation examples&nbsp;&nbsp;.NET\n\nYou can use the card alias to recognize the shopper's card. But for shopper loyalty use cases you can also go one step further and create your own identifiers to be returned in card acquisition and payment responses. That enables you to identify an individual instead of just their payment card, and make the shopping experience more personal.\nTo use this method, you need to create customer profiles in your back-end system.\nRequirements\nBefore you begin, take into account the following requirements and preparations.\n\n\n\nRequirement\nDescription\n\n\n\n\nIntegration type\nA Terminal API integration with payment terminals.\n\n\nSetup steps\nBefore you begin: Ask our Support Team to check that your account is correctly configured for your loyalty use case. Enable receiving identifiers in Terminal API responses\n\n\n\nIdentifiers to save\nTo be able to personalize the shopper experience, save the following identifiers in the shopper profiles that you create in your back-end system:\n\nCard alias (alias): A value that uniquely represents the shopper's card number (PAN), for example A37317672402294. With this, you can recognize the card that a shopper is using. You cannot use the card alias for making payments. You receive the card alias in the AdditionalResponse.\nShopper reference (shopperReference): Your reference to identify the shopper. You submit it with a payment, and receive it back in the AdditionalResponse for that payment and also in any later card acquisition and payment responses.\n\nTo get the shopper reference, you need to enable receiving this identifier.\n\nShopper email (shopperEmail): You collect the shopper's email address in some way, and submit it with a payment. You receive it back in the AdditionalResponse for that payment and also in any later card acquisition and payment responses.\n\nShopper consent and PIN entry\nTo save a shopper profile in your back-end system and to submit the shopper reference and email with your payment requests to our platform, you need to ask the shopper for their consent.\nWe can only return the shopper reference and email if your initial request also contains the recurringProcessingModel flag. This flag triggers the terminal to ask the shopper to authenticate by entering their PIN. Because there are still cards being used that do not have a PIN, our Support Team can disable asking for a PIN when the recurringProcessingModel flag is set. However, it goes against best practices to set this flag for every transaction.\nSynchronous flow\nThe synchronous flow allows you to actively engage the shopper on the spot. For example, if you recognize the shopper from a card acquisition, you can apply a discount or offer to redeem loyalty points before making the payment.\n\nMake a card acquisition request to check whether the shopper is recognized.\nIf the card acquisition response indicates the shopper is not known yet, create a new customer profile and make a payment. To ask the shopper's consent and gather the data for the customer profile, you can make input requests.\nIf the card acquisition response indicates the shopper is already known, optionally make input requests to communicate with the shopper, and then make a payment for a recognized shopper.\n\nCheck whether the shopper is recognized\nWhen the shopper makes a purchase, first check if you already know the shopper.\nIf you are in Estonia, choose the Estonian ID card check tab below to learn how to identify the shopper with their national ID card.\n\n\n    \n        \n        \n    \n\n\n\n\n\nCreate a new customer profile and make a payment\nWhen the card acquisition response shows the shopper is not known yet, you continue with a payment request that:\n\nRefers to the card acquisition request.\nCreates shopper identifiers to save in your back-end system.\n\n\n\nCollect details from the shopper as needed for your use case, and ask the shopper's consent to save those details.\nYou can let your staff enter the information in your POS app, but you can also make input requests to let the shopper enter the information on the terminal. For example:\n\nMake a confirmation input request or a signature input request to ask the shopper's consent.\nMake text input requests to collect the shopper's name and email address, and a digit input request to collect their phone number.\nMake a display request with a QR code containing a URL to join your loyalty program or to download an app.\n\n\n\nMake a payment request with:\n\n\n\nParameter\nRequired\nDescription\n\n\n\n\nPaymentData.CardAcquisitionReference\n\nAn object referencing 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\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\nSaleData.SaleToAcquirerData\n\nData to create shopper identifiers. See the instructions below.\n\n\n\nIn SaleData.SaleToAcquirerData include:\n\n\nshopperReference: Your unique reference for this shopper. Minimum length: three characters. Note that the value is case-sensitive. Do not include personally identifiable information (PII), such as name or email address.\nshopperEmail: Optional. The shopper's email address, if you collected that in the first step.\nrecurringProcessingModel: CardOnFile. This triggers us to return the shopper reference and email in future card acquisition and payment responses.\n\nPass the SaleToAcquirerData value in one of the following formats:\n\nOption 1: a JSON object converted to a Base64 encoded string. Refer to Add information to a payment.\nOption 2: form-encoded key-value pairs (using &amp; as a separator). For example:\nshopperReference=12345&amp;shopperEmail=S.Hopper@example.com&amp;recurringProcessingModel=CardOnFile\n\nThe format that you use here, will also be the format of the AdditionalResponse that you receive.\n\n\n\n\n\nWhen you receive the  PaymentResponse, keep the following identifiers from the AdditionalResponse. You may need to Base64-decode the string first.\n\nalias: The card alias.\nIf you specified a TokenRequestedType of Customer in the request, the card alias is also returned in PaymentToken.TokenValue.\nPaymentAccountReference: A value that represents the shopper's payment account that their card and\/or NFC wallet is linked to. For NFC wallet transactions, a PAN is not available and thus there is no card alias.\nshopperReference: Your unique reference for this shopper that you specified in the request.\nshopperEmail: The shopper's email address that you specified in the request.\n\n\n\n\nFrom now on the identifiers for this shopper are returned in card acquisition and payment responses.\n\n\nIn your system, create a customer profile for the shopper and save the shopper identifiers that you received in the payment response.\n\n\nAlso save the transaction data with the shopper's customer profile, to start building a transaction history.\n\n\nMake a payment for a recognized shopper\nWhen the card acquisition response shows the shopper is known already, you follow up with a payment request that refers to the card acquisition.\n\n\nUsing the shopperReference or other identifiers you received in the card acquisition response, find the shopper in your system.\n\n\nDepending on your business logic, you may want to apply a discount or offer a gift. For example:\n\nMake a confirmation input request to ask whether the shopper wants to redeem loyalty points.\n\nMake a display request with a QR code containing a link to a promotional offer.\n\n\n\n\n\nIf necessary, update the final transaction amount. For example, if you applied a discount.\n\n\nMake a payment request with:\n\n\n\nParameter\nRequired\nDescription\n\n\n\n\nPaymentTransaction.AmountsReq\n\nAn object with: Currency: The transaction currency.RequestedAmount: The final transaction amount.\n\n\nPaymentData.CardAcquisitionReference\n\nAn object containing data from 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\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\n\n\n\n\n\n\nWhen you receive the  PaymentResponse, keep the following identifiers from the AdditionalResponse. You may need to Base64-decode the string first.\n\nalias: The card alias.\nIf you specified a TokenRequestedType of Customer in the request, the card alias is also returned in PaymentToken.TokenValue.\nPaymentAccountReference: A value that represents the shopper's payment account that their card and\/or NFC wallet is linked to.\nshopperReference: Your unique reference for this shopper, if you specified that when you created the customer profile.\nshopperEmail: The shopper's email address, if you specified that when you created the customer profile.\n\n\n\n\n\n\nIn your system, store the transaction data with the shopper's customer profile.\n\n\nAsynchronous flow\nThe asynchronous flow is a simpler implementation of shopper loyalty, where you rely on webhooks to make loyalty adjustments in your system after the payment. In this flow, you cannot apply discounts or other loyalty benefits on the spot before the payment.\n\nMake sure that you have set up receiving standard webhooks.\nCreate a customer profile for the shopper in your loyalty system.\nMake a payment.\nWait for the AUTHORISATION webhook.\nBased on the identifiers in the AUTHORISATION webhook, update the shopper's customer profile in your loyalty system. For example, add loyalty points.\nInform the shopper of the update in your loyalty system.\n\nFor more information about this flow, see our omnichannel documentation.\nSee also\n\n\n                    Loyalty with NFC wallet passes\n                \n                    Card acquisition\n                \n                    Pass additional data\n                \n                    Tokenization\n                \n","type":"page","locale":"pt","boost":17,"hierarchy":{"lvl0":"Home","lvl1":"Terminais","lvl2":"Shopper loyalty","lvl3":"Card and shopper identifiers for loyalty use cases"},"hierarchy_url":{"lvl0":"https:\/\/docs.adyen.com\/pt","lvl1":"https:\/\/docs.adyen.com\/pt\/point-of-sale","lvl2":"https:\/\/docs.adyen.com\/pt\/point-of-sale\/loyalty","lvl3":"\/pt\/point-of-sale\/loyalty\/payment-data"},"levels":4,"category":"In-person payments","category_color":"green","tags":["shopper","identifiers","loyalty","cases"]},"articleFiles":{"card-acquisition-estonia.json":"<p alt=\"\">card-acquisition-estonia.json<\/p>","card-acquisition-response.json":"<p alt=\"\">card-acquisition-response.json<\/p>","card-acquisition.json":"<p alt=\"\">card-acquisition.json<\/p>","create-identifiers-response.json":"<p alt=\"\">create-identifiers-response.json<\/p>","create-identifiers.json":"<p alt=\"\">create-identifiers.json<\/p>","postman-logo-vertical-orange-2021.svg":"<img style=\"width: 25px;\" alt=\"\" src=\"https:\/\/docs.adyen.com\/user\/pages\/docs\/03.point-of-sale\/36.loyalty\/payment-data\/postman-logo-vertical-orange-2021.svg?decoding=auto&amp;fetchpriority=auto\" \/>","shopper-recognized-response.json":"<p alt=\"\">shopper-recognized-response.json<\/p>","shopper-recognized.json":"<p alt=\"\">shopper-recognized.json<\/p>"}}
