{"title":"One-time numeric code payments","category":"default","creationDate":1761556860,"content":"<p>Shoppers in Poland can make secure payments with a one-time numeric code generated from their BLIK banking app. A BLIK payment can be initiated by your store staff from the POS app or by the shopper on the terminal.<\/p>\n<h2>Requirements<\/h2>\n<p>Before you begin, take into account the following requirements, limitations, and preparations.<\/p>\n<table>\n<thead>\n<tr>\n<th style=\"text-align: left;\">Requirement<\/th>\n<th style=\"text-align: left;\">Description<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"text-align: left;\"><strong>Integration type<\/strong><\/td>\n<td style=\"text-align: left;\">A <a href=\"\/pt\/point-of-sale\/basic-tapi-integration\/\">Terminal API<\/a> integration with payment terminals or a <a href=\"\/pt\/point-of-sale\/standalone\">standalone solution<\/a>. Standalone terminals only support the <a href=\"#shopper-initiated-flow\">shopper-initiated flow<\/a>.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><strong>Limitations<\/strong><\/td>\n<td style=\"text-align: left;\">BLIK one-time numeric code payments are only supported in Poland.<\/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, <a href=\"\/pt\/point-of-sale\/what-we-support\/payment-methods#add-payment-methods-to-your-account\">add the BLIK payment method to your Adyen account<\/a>.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h2>One-time numeric code payment flows<\/h2>\n<p>With a <a href=\"\/pt\/point-of-sale\/design-your-integration\/choose-your-architecture\">Terminal API integration<\/a>, there are several flows you can use for a BLIK one-time numeric code payment.<\/p>\n<ul>\n<li>\n<p><strong><a href=\"#merchant-initiated-flow\">Merchant-initiated<\/a><\/strong> flow: The shopper informs the store staff that they want to make a BLIK payment. From the POS app, the store staff initiates a payment. The payment request must specify the <span translate=\"no\"><strong>blik_pos<\/strong><\/span> payment brand. The shopper then enters their 6-digit BLIK code on the terminal. This flow requires an update to your integration, but it is faster and easier for the shopper.<\/p>\n<\/li>\n<li>\n<p><strong><a href=\"#shopper-initiated-flow\">Shopper-initiated<\/a><\/strong> flow: You send a payment request to the terminal. On the terminal, the shopper selects the <strong>Scan<\/strong> button (<strong>Inne<\/strong> in Polish) and then <strong>BLIK<\/strong>, and enters a 6-digit BLIK code. This flow requires no changes to the integration. You just need to add the BLIK payment method in your Customer Area. This flow, however, is less convenient for the shopper compared to the merchant-initiated flow.<\/p>\n<\/li>\n<\/ul>\n<h2>Merchant-initiated flow<\/h2>\n<p>To initiate a BLIK payment from the POS app:<\/p>\n<ol>\n<li>\n<p><a href=\"\/pt\/point-of-sale\/basic-tapi-integration\/make-a-payment\">Make a payment request<\/a>, specifying:<\/p>\n<ul>\n<li>\n<p>The standard <a href=\"\/pt\/point-of-sale\/design-your-integration\/terminal-api#request-message-header\">\n  <code>SaleToPOIRequest.MessageHeader<\/code>\n<\/a> object, with <code>MessageClass<\/code> set to <span translate=\"no\"><strong>Service<\/strong><\/span> and <code>MessageCategory<\/code> set to <span translate=\"no\"><strong>Payment<\/strong><\/span>.<\/p>\n<table>\n<thead>\n<tr>\n<th style=\"text-align: left;\">Parameter<\/th>\n<th style=\"text-align: center;\">Required<\/th>\n<th style=\"text-align: left;\">Description<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"text-align: left;\"><code>ProtocolVersion<\/code><\/td>\n<td style=\"text-align: center;\"><img title=\"-white_check_mark-\" alt=\"-white_check_mark-\" class=\"smileys\" src=\"\/user\/data\/smileys\/emoji\/white_check_mark.png\" \/><\/td>\n<td style=\"text-align: left;\"><strong>3.0<\/strong><\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>MessageClass<\/code><\/td>\n<td style=\"text-align: center;\"><img title=\"-white_check_mark-\" alt=\"-white_check_mark-\" class=\"smileys\" src=\"\/user\/data\/smileys\/emoji\/white_check_mark.png\" \/><\/td>\n<td style=\"text-align: left;\"><span translate=\"no\"><strong>Service<\/strong><\/span><\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>MessageCategory<\/code><\/td>\n<td style=\"text-align: center;\"><img title=\"-white_check_mark-\" alt=\"-white_check_mark-\" class=\"smileys\" src=\"\/user\/data\/smileys\/emoji\/white_check_mark.png\" \/><\/td>\n<td style=\"text-align: left;\"><span translate=\"no\"><strong>Payment<\/strong><\/span><\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>MessageType<\/code><\/td>\n<td style=\"text-align: center;\"><img title=\"-white_check_mark-\" alt=\"-white_check_mark-\" class=\"smileys\" src=\"\/user\/data\/smileys\/emoji\/white_check_mark.png\" \/><\/td>\n<td style=\"text-align: left;\"><span translate=\"no\"><strong>Request<\/strong><\/span><\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>ServiceID<\/code><\/td>\n<td style=\"text-align: center;\"><img title=\"-white_check_mark-\" alt=\"-white_check_mark-\" class=\"smileys\" src=\"\/user\/data\/smileys\/emoji\/white_check_mark.png\" \/><\/td>\n<td style=\"text-align: left;\">Your unique ID for this request, consisting of 1-10 alphanumeric characters. Must be unique within the last 48 hours for the terminal (<code>POIID<\/code>) being used.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>SaleID<\/code><\/td>\n<td style=\"text-align: center;\"><img title=\"-white_check_mark-\" alt=\"-white_check_mark-\" class=\"smileys\" src=\"\/user\/data\/smileys\/emoji\/white_check_mark.png\" \/><\/td>\n<td style=\"text-align: left;\">Your unique ID for the POS system component to send this request from.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>POIID<\/code><\/td>\n<td style=\"text-align: center;\"><img title=\"-white_check_mark-\" alt=\"-white_check_mark-\" class=\"smileys\" src=\"\/user\/data\/smileys\/emoji\/white_check_mark.png\" \/><\/td>\n<td style=\"text-align: left;\">The unique ID of the terminal to send this request to. Format: <em>[device model]-[serial number]<\/em>.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/li>\n<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. In your Customer Area and Adyen reports, this will show as the <strong>merchant reference<\/strong> for the transaction.<\/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>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<\/tbody>\n<\/table>\n<\/li>\n<li>\n<p>The  <a href=\"https:\/\/docs.adyen.com\/api-explorer\/terminal-api\/latest\/post\/payment#request-PaymentTransaction-TransactionConditions\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">TransactionConditions<\/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>paymentBrand<\/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>AllowedPaymentBrand<\/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 payment brands accepted for this transaction: <span translate=\"no\"><strong>blik_pos<\/strong><\/span><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<div data-component-wrapper=\"code-sample\">\n<code-sample :title=\"'Payment request with the BLIK payment brand specified'\" :id=\"''\" :code-data='[{\"language\":\"json\",\"tabTitle\":\"\",\"content\":\"{\\n   \\\"SaleToPOIRequest\\\":{\\n      \\\"MessageHeader\\\":{\\n        \\\"ProtocolVersion\\\":\\\"3.0\\\",\\n        \\\"MessageClass\\\":\\\"Service\\\",\\n        \\\"MessageCategory\\\":\\\"Payment\\\",\\n        \\\"MessageType\\\":\\\"Request\\\",\\n        \\\"ServiceID\\\":\\\"0918171608\\\",\\n        \\\"SaleID\\\":\\\"POSSystemID12345\\\",\\n        \\\"POIID\\\":\\\"V400m-324688179\\\"\\n      },\\n      \\\"PaymentRequest\\\":{\\n         \\\"SaleData\\\":{\\n            \\\"SaleTransactionID\\\":{\\n               \\\"TransactionID\\\":\\\"8954\\\",\\n               \\\"TimeStamp\\\":\\\"2025-09-18T15:16:08+00:00\\\"\\n            }\\n         },\\n         \\\"PaymentTransaction\\\":{\\n            \\\"AmountsReq\\\":{\\n               \\\"Currency\\\":\\\"PLN\\\",\\n               \\\"RequestedAmount\\\":10.99\\n            },\\n            \\\"TransactionConditions\\\":{\\n               \\\"AllowedPaymentBrand\\\":[\\n                  \\\"blik_pos\\\"\\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<\/ul>\n<p>This shows an entry field for the BLIK code on the terminal screen.<\/p>\n<\/li>\n<li>\n<p>The shopper gets a 6-digit BLIK code from their BLIK banking app and enters the code on the terminal.<br \/>\nThe payment is sent to the Adyen payments platform for processing.<\/p>\n<\/li>\n<li>\n<p>The shopper receives a request in their BLIK banking app to confirm the payment.<\/p>\n<\/li>\n<li>\n<p>You receive the result of the payment, as you would <a href=\"\/pt\/point-of-sale\/basic-tapi-integration\/make-a-payment#payment-response\">receive the result of a card payment<\/a>. Note that on the shopper receipt, BLIK's reference for the payment is included in the <code>Transaction ref<\/code> field.<\/p>\n<\/li>\n<\/ol>\n<p>You can view the details of a payment in your <a href=\"https:\/\/ca-test.adyen.com\/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\" class=\"external-link no-image\">Customer Area<\/a>, under <strong>Transactions<\/strong> &gt; <strong>Payments<\/strong>.<\/p>\n<h2>Shopper-initiated flow<\/h2>\n<ol>\n<li>\n<p>In the shopper-initiated flow, you <a href=\"\/pt\/point-of-sale\/basic-tapi-integration\/make-a-payment#make-a-payment\">make a payment request as you<\/a> would for a card payment:<\/p>\n<div data-component-wrapper=\"code-sample\">\n<code-sample :title=\"'Payment request'\" :id=\"''\" :code-data='[{\"language\":\"json\",\"tabTitle\":\"\",\"content\":\"{\\n   \\\"SaleToPOIRequest\\\":{\\n      \\\"MessageHeader\\\":{\\n        \\\"ProtocolVersion\\\":\\\"3.0\\\",\\n        \\\"MessageClass\\\":\\\"Service\\\",\\n        \\\"MessageCategory\\\":\\\"Payment\\\",\\n        \\\"MessageType\\\":\\\"Request\\\",\\n        \\\"ServiceID\\\":\\\"0918171608\\\",\\n        \\\"SaleID\\\":\\\"POSSystemID12345\\\",\\n        \\\"POIID\\\":\\\"V400m-324688179\\\"\\n      },\\n      \\\"PaymentRequest\\\":{\\n         \\\"SaleData\\\":{\\n            \\\"SaleTransactionID\\\":{\\n               \\\"TransactionID\\\":\\\"8954\\\",\\n               \\\"TimeStamp\\\":\\\"2025-09-18T15:16:08+00:00\\\"\\n            }\\n         },\\n         \\\"PaymentTransaction\\\":{\\n            \\\"AmountsReq\\\":{\\n               \\\"Currency\\\":\\\"PLN\\\",\\n               \\\"RequestedAmount\\\":10.99\\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>On the terminal, the shopper selects the <strong>Scan<\/strong> button and then <strong>BLIK Code<\/strong> from the card options. This shows an entry field for the BLIK code on the terminal screen.<\/p>\n<\/li>\n<li>\n<p>The shopper gets a 6-digit BLIK code from their BLIK banking app and enters the code on the terminal<\/p>\n<\/li>\n<li>\n<p>The shopper receives a request in their BLIK banking app to confirm the payment.<\/p>\n<\/li>\n<li>\n<p>You receive the result of the payment, as you would <a href=\"\/pt\/point-of-sale\/basic-tapi-integration\/make-a-payment#payment-response\">receive the result of a card payment<\/a>. Note that on the shopper receipt, BLIK's reference for the payment is included in the <code>Transaction ref<\/code> field.<\/p>\n<\/li>\n<\/ol>\n<h2>Refunds<\/h2>\n<p>Payments with a one-time numeric code support <a href=\"\/pt\/point-of-sale\/basic-tapi-integration\/refund-payment\/referenced\">referenced refunds<\/a>, so you have to make a <code>ReversalRequest<\/code> to refund this type of payment.<\/p>\n<p>Both full and partial referenced refunds are allowed.<\/p>\n<h2>Test<\/h2>\n<p>To test a BLIK payment:<\/p>\n<ul>\n<li>Use BLIK code 777213.<\/li>\n<\/ul>\n<h2>See also<\/h2>\n<div class=\"see-also-links output-inline\" id=\"see-also\">\n<ul><li><a href=\"\/point-of-sale\/basic-tapi-integration\/make-a-payment\"\n                        target=\"_self\"\n                        >\n                     Make a payment\n                <\/a><\/li><li><a href=\"\/point-of-sale\/what-we-support\/payment-methods\"\n                        target=\"_self\"\n                        >\n                    Supported Payment methods\n                <\/a><\/li><\/ul><\/div>\n","url":"https:\/\/docs.adyen.com\/pt\/point-of-sale\/alternative-payment-methods\/otc-digit-based-payments","articleFields":{"description":"Accept one-time numeric code payments with BLIK.","feedback_component":true,"filters_component":false,"decision_tree":"[]","page_id":"1c20b73d-2c37-40b3-b068-891f544d2d6a","last_edit_on":"02-12-2025 17:35"},"algolia":{"url":"https:\/\/docs.adyen.com\/pt\/point-of-sale\/alternative-payment-methods\/otc-digit-based-payments","title":"One-time numeric code payments","content":"Shoppers in Poland can make secure payments with a one-time numeric code generated from their BLIK banking app. A BLIK payment can be initiated by your store staff from the POS app or by the shopper on the terminal.\nRequirements\nBefore you begin, take into account the following requirements, limitations, and preparations.\n\n\n\nRequirement\nDescription\n\n\n\n\nIntegration type\nA Terminal API integration with payment terminals or a standalone solution. Standalone terminals only support the shopper-initiated flow.\n\n\nLimitations\nBLIK one-time numeric code payments are only supported in Poland.\n\n\nSetup steps\nBefore you begin, add the BLIK payment method to your Adyen account.\n\n\n\nOne-time numeric code payment flows\nWith a Terminal API integration, there are several flows you can use for a BLIK one-time numeric code payment.\n\n\nMerchant-initiated flow: The shopper informs the store staff that they want to make a BLIK payment. From the POS app, the store staff initiates a payment. The payment request must specify the blik_pos payment brand. The shopper then enters their 6-digit BLIK code on the terminal. This flow requires an update to your integration, but it is faster and easier for the shopper.\n\n\nShopper-initiated flow: You send a payment request to the terminal. On the terminal, the shopper selects the Scan button (Inne in Polish) and then BLIK, and enters a 6-digit BLIK code. This flow requires no changes to the integration. You just need to add the BLIK payment method in your Customer Area. This flow, however, is less convenient for the shopper compared to the merchant-initiated flow.\n\n\nMerchant-initiated flow\nTo initiate a BLIK payment from the POS app:\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\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. In your Customer Area and Adyen reports, this will show as the merchant reference for the transaction. TimeStamp: date and time of the request in UTC format.\n\n\nPaymentTransaction.AmountsReq\n\nAn object with: Currency: the transaction currency.RequestedAmount: The final transaction amount.\n\n\n\n\n\nThe  TransactionConditions object with:\n\n\n\nParameter\nRequired\nDescription\n\n\n\n\npaymentBrand\n\nAn object with: Currency: the transaction currency.RequestedAmount: The final transaction amount.\n\n\nAllowedPaymentBrand\n\nThe payment brands accepted for this transaction: blik_pos\n\n\n\n\n\n\n\n\nThis shows an entry field for the BLIK code on the terminal screen.\n\n\nThe shopper gets a 6-digit BLIK code from their BLIK banking app and enters the code on the terminal.\nThe payment is sent to the Adyen payments platform for processing.\n\n\nThe shopper receives a request in their BLIK banking app to confirm the payment.\n\n\nYou receive the result of the payment, as you would receive the result of a card payment. Note that on the shopper receipt, BLIK's reference for the payment is included in the Transaction ref field.\n\n\nYou can view the details of a payment in your Customer Area, under Transactions &gt; Payments.\nShopper-initiated flow\n\n\nIn the shopper-initiated flow, you make a payment request as you would for a card payment:\n\n\n\n\n\nOn the terminal, the shopper selects the Scan button and then BLIK Code from the card options. This shows an entry field for the BLIK code on the terminal screen.\n\n\nThe shopper gets a 6-digit BLIK code from their BLIK banking app and enters the code on the terminal\n\n\nThe shopper receives a request in their BLIK banking app to confirm the payment.\n\n\nYou receive the result of the payment, as you would receive the result of a card payment. Note that on the shopper receipt, BLIK's reference for the payment is included in the Transaction ref field.\n\n\nRefunds\nPayments with a one-time numeric code support referenced refunds, so you have to make a ReversalRequest to refund this type of payment.\nBoth full and partial referenced refunds are allowed.\nTest\nTo test a BLIK payment:\n\nUse BLIK code 777213.\n\nSee also\n\n\n                     Make a payment\n                \n                    Supported Payment methods\n                \n","type":"page","locale":"pt","boost":17,"hierarchy":{"lvl0":"Home","lvl1":"Terminais","lvl2":"Alternative payment methods","lvl3":"One-time numeric code payments"},"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\/alternative-payment-methods","lvl3":"\/pt\/point-of-sale\/alternative-payment-methods\/otc-digit-based-payments"},"levels":4,"category":"In-person payments","category_color":"green","tags":["One-time","numeric","payments"]}}
