{"title":"Print data on the terminal","category":"default","creationDate":1672131300,"content":"<p>A print request allows you to initiate printing on the payment terminal from your POS app outside of a payment flow. You can print <a href=\"#print-text\">text<\/a>, <a href=\"#print-qr-code\">QR codes<\/a>, or <a href=\"#print-images\">images<\/a>.<\/p>\n<p>Here are some examples of how you can use print requests:<\/p>\n<ul>\n<li>In a <a href=\"\/point-of-sale\/pay-at-x\">Pay at Table flow<\/a>, print the bill on the terminal before sending a payment request. This lets the customers decide if they want to split the bill, and how they want to pay.<\/li>\n<li>Print entry tickets at a festival.<\/li>\n<li>In a quick-service restaurant, print a receipt that allows customers to pick up their order at the counter.<\/li>\n<li>Print a QR code with a URL to join your loyalty program or to download an app.<\/li>\n<\/ul>\n<p>If you want to combine text with a QR code, you need to make two consecutive print requests. There is no prompt to tear off the paper following a print request (like after printing a shopper receipt), so you are able to give the shopper a single slip of paper.<\/p>\n<h2>Requirements<\/h2>\n<p>Before you begin, take into account the following requirement.<\/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\/get-started\">Terminal API integration<\/a> with payment terminals.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><strong>Hardware<\/strong><\/td>\n<td style=\"text-align: left;\">Only works on payment terminals with a built-in printer, such as the V240m Plus (in Brazil), V400c Plus, V400m, S1F2, S1F2L, and S1F4Pro.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><strong>Limitations<\/strong><\/td>\n<td style=\"text-align: left;\">It is not possible to print barcode formats such as EAN-8, EAN-13, UPC-A, Code 25, Code 128 or PDF417.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h2 id=\"print-text\">Print text<\/h2>\n<p>To use the payment terminal to print text content:<\/p>\n<ul>\n<li>\n<p>Make a <a href=\"\/point-of-sale\/design-your-integration\/terminal-api\">Terminal API<\/a> print 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>Device<\/strong><\/span> and <code>MessageCategory<\/code> set to <span translate=\"no\"><strong>Print<\/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>Device<\/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>Print<\/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\/print#request-PrintOutput\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">PrintRequest.PrintOutput<\/a> object, including:<\/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>DocumentQualifier<\/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>Document<\/strong><\/span><\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>ResponseMode<\/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>PrintEnd<\/strong><\/span><\/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 more array items containing the text you want to print.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Each <code>OutputText<\/code> array item can have:<\/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>CharacterStyle<\/code><\/td>\n<td style=\"text-align: center;\"><\/td>\n<td style=\"text-align: left;\">Allowed values: <span translate=\"no\"><strong>Normal<\/strong><\/span>, <span translate=\"no\"><strong>Bold<\/strong><\/span>, <span translate=\"no\"><strong>Underline<\/strong><\/span>. If not specified, defaults to <span translate=\"no\"><strong>Normal<\/strong><\/span>.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>Alignment<\/code><\/td>\n<td style=\"text-align: center;\"><\/td>\n<td style=\"text-align: left;\">Allowed values: <span translate=\"no\"><strong>Left<\/strong><\/span>, <span translate=\"no\"><strong>Centred<\/strong><\/span>, <span translate=\"no\"><strong>Justified<\/strong><\/span>, <span translate=\"no\"><strong>Right<\/strong><\/span>. If not specified, defaults to <span translate=\"no\"><strong>Left<\/strong><\/span>.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>EndOfLineFlag<\/code><\/td>\n<td style=\"text-align: center;\"><\/td>\n<td style=\"text-align: left;\">If not specified, defaults to <span translate=\"no\"><strong>true<\/strong><\/span>. Use <span translate=\"no\"><strong>false<\/strong><\/span> if you want the next array item to continue on the same line.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>Text<\/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 text you want to print in this array element. For a blank line, specify an empty value.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/li>\n<\/ul>\n<p>Select the tabs below to see how you can use the parameters to print a receipt (with a header, line items, and a footer) or a document (with a title, headings, and paragraphs).<\/p>\n\n<div id=\"tab0kGQL\">\n    <div data-component-wrapper=\"tabs\">\n        <tabs\n                        :items=\"[{&quot;title&quot;:&quot;Receipt example&quot;,&quot;content&quot;:&quot;\\n&lt;pre&gt;&lt;code class=\\&quot;language-json\\&quot;&gt;{\\n  \\&quot;SaleToPOIRequest\\&quot;: {\\n    \\&quot;MessageHeader\\&quot;: {\\n      \\&quot;ProtocolVersion\\&quot;: \\&quot;3.0\\&quot;,\\n      \\&quot;MessageClass\\&quot;: \\&quot;Device\\&quot;,\\n      \\&quot;MessageCategory\\&quot;:\\&quot;Print\\&quot;,\\n      \\&quot;MessageType\\&quot;: \\&quot;Request\\&quot;,\\n      \\&quot;ServiceID\\&quot;: \\&quot;050824\\&quot;,\\n      \\&quot;SaleID\\&quot;: \\&quot;POSSystemID12345\\&quot;,\\n      \\&quot;POIID\\&quot;: \\&quot;V400m-346403161\\&quot;\\n    },\\n    \\&quot;PrintRequest\\&quot;: {\\n      \\&quot;PrintOutput\\&quot;: {\\n        \\&quot;DocumentQualifier\\&quot;: \\&quot;Document\\&quot;,\\n        \\&quot;ResponseMode\\&quot;: \\&quot;PrintEnd\\&quot;,\\n        \\&quot;OutputContent\\&quot;: {\\n          \\&quot;OutputFormat\\&quot;: \\&quot;Text\\&quot;,\\n          \\&quot;OutputText\\&quot;: [\\n            {\\n              \\&quot;CharacterStyle\\&quot;: \\&quot;Bold\\&quot;,\\n              \\&quot;Alignment\\&quot;: \\&quot;Centred\\&quot;,\\n              \\&quot;EndOfLineFlag\\&quot;: true,\\n              \\&quot;Text\\&quot;: \\&quot;THIS IS THE TITLE\\&quot;\\n            },\\n            {\\n              \\&quot;Alignment\\&quot;: \\&quot;Centred\\&quot;,\\n              \\&quot;EndOfLineFlag\\&quot;: true,\\n              \\&quot;Text\\&quot;: \\&quot;\\&quot;\\n            },\\n            {\\n              \\&quot;Alignment\\&quot;: \\&quot;Left\\&quot;,\\n              \\&quot;EndOfLineFlag\\&quot;: false,\\n              \\&quot;Text\\&quot;: \\&quot;This is key-1\\&quot;\\n            },\\n            {\\n              \\&quot;Alignment\\&quot;: \\&quot;Right\\&quot;,\\n              \\&quot;EndOfLineFlag\\&quot;: true,\\n              \\&quot;Text\\&quot;: \\&quot;value-1\\&quot;\\n            },\\n            {\\n              \\&quot;Alignment\\&quot;: \\&quot;Left\\&quot;,\\n              \\&quot;EndOfLineFlag\\&quot;: false,\\n              \\&quot;Text\\&quot;: \\&quot;This is key-2\\&quot;\\n            },\\n            {\\n              \\&quot;Alignment\\&quot;: \\&quot;Right\\&quot;,\\n              \\&quot;EndOfLineFlag\\&quot;: true,\\n              \\&quot;Text\\&quot;: \\&quot;value-2\\&quot;\\n            },\\n            {\\n              \\&quot;Alignment\\&quot;: \\&quot;Left\\&quot;,\\n              \\&quot;EndOfLineFlag\\&quot;: false,\\n              \\&quot;Text\\&quot;: \\&quot;This is key-3\\&quot;\\n            },\\n            {\\n              \\&quot;Alignment\\&quot;: \\&quot;Right\\&quot;,\\n              \\&quot;EndOfLineFlag\\&quot;: true,\\n              \\&quot;Text\\&quot;: \\&quot;value-3\\&quot;\\n            },\\n            {\\n              \\&quot;Alignment\\&quot;: \\&quot;Left\\&quot;,\\n              \\&quot;EndOfLineFlag\\&quot;: true,\\n              \\&quot;Text\\&quot;: \\&quot;Some explanation about the receipt (# %^&amp;amp; @\\\/: $ \\u00a3 EUR&amp;amp;nbsp;)\\&quot;\\n            },\\n            {\\n              \\&quot;Alignment\\&quot;: \\&quot;Centred\\&quot;,\\n              \\&quot;EndOfLineFlag\\&quot;: true,\\n              \\&quot;Text\\&quot;: \\&quot;\\&quot;\\n            },\\n            {\\n              \\&quot;CharacterStyle\\&quot;: \\&quot;Bold\\&quot;,\\n              \\&quot;Alignment\\&quot;: \\&quot;Centred\\&quot;,\\n              \\&quot;EndOfLineFlag\\&quot;: true,\\n              \\&quot;Text\\&quot;: \\&quot;This is the footer\\&quot;\\n            }\\n          ]\\n        }\\n      }\\n    }\\n  }\\n}&lt;\\\/code&gt;&lt;\\\/pre&gt;\\n&quot;,&quot;altTitle&quot;:null,&quot;oldTabId&quot;:1,&quot;relation&quot;:&quot;&quot;},{&quot;title&quot;:&quot;Document example&quot;,&quot;content&quot;:&quot;\\n&lt;pre&gt;&lt;code class=\\&quot;language-json\\&quot;&gt;{\\n  \\&quot;SaleToPOIRequest\\&quot;: {\\n    \\&quot;MessageHeader\\&quot;: {\\n      \\&quot;ProtocolVersion\\&quot;: \\&quot;3.0\\&quot;,\\n      \\&quot;MessageClass\\&quot;: \\&quot;Device\\&quot;,\\n      \\&quot;MessageCategory\\&quot;:\\&quot;Print\\&quot;,\\n      \\&quot;MessageType\\&quot;: \\&quot;Request\\&quot;,\\n      \\&quot;ServiceID\\&quot;: \\&quot;050823\\&quot;,\\n      \\&quot;SaleID\\&quot;: \\&quot;POSSystemID12345\\&quot;,\\n      \\&quot;POIID\\&quot;: \\&quot;V400m-346403161\\&quot;\\n    },\\n    \\&quot;PrintRequest\\&quot;: {\\n      \\&quot;PrintOutput\\&quot;: {\\n        \\&quot;DocumentQualifier\\&quot;: \\&quot;Document\\&quot;,\\n        \\&quot;ResponseMode\\&quot;: \\&quot;PrintEnd\\&quot;,\\n        \\&quot;OutputContent\\&quot;: {\\n          \\&quot;OutputFormat\\&quot;: \\&quot;Text\\&quot;,\\n          \\&quot;OutputText\\&quot;: [\\n            {\\n              \\&quot;CharacterStyle\\&quot;: \\&quot;Bold\\&quot;,\\n              \\&quot;Alignment\\&quot;: \\&quot;Centred\\&quot;,\\n              \\&quot;EndOfLineFlag\\&quot;: true,\\n              \\&quot;Text\\&quot;: \\&quot;THIS IS THE TITLE\\&quot;\\n            },\\n            {\\n              \\&quot;CharacterStyle\\&quot;: \\&quot;Normal\\&quot;,\\n              \\&quot;Alignment\\&quot;: \\&quot;Centred\\&quot;,\\n              \\&quot;EndOfLineFlag\\&quot;: true,\\n              \\&quot;Text\\&quot;: \\&quot;This is the subtitle\\&quot;\\n            },\\n            {\\n              \\&quot;Alignment\\&quot;: \\&quot;Centred\\&quot;,\\n              \\&quot;EndOfLineFlag\\&quot;: true,\\n              \\&quot;Text\\&quot;: \\&quot;\\&quot;\\n            },\\n            {\\n              \\&quot;CharacterStyle\\&quot;: \\&quot;Underline\\&quot;,\\n              \\&quot;Alignment\\&quot;: \\&quot;Left\\&quot;,\\n              \\&quot;EndOfLineFlag\\&quot;: true,\\n              \\&quot;Text\\&quot;: \\&quot;This is a heading\\&quot;\\n            },\\n            {\\n              \\&quot;Alignment\\&quot;: \\&quot;Left\\&quot;,\\n              \\&quot;EndOfLineFlag\\&quot;: true,\\n              \\&quot;Text\\&quot;: \\&quot;Normal left-aligned text belonging to the header above.\\&quot;\\n            },\\n            {\\n              \\&quot;CharacterStyle\\&quot;: \\&quot;Underline\\&quot;,\\n              \\&quot;Alignment\\&quot;: \\&quot;Left\\&quot;,\\n              \\&quot;EndOfLineFlag\\&quot;: true,\\n              \\&quot;Text\\&quot;: \\&quot;Another heading\\&quot;\\n            },\\n            {\\n              \\&quot;Alignment\\&quot;: \\&quot;Left\\&quot;,\\n              \\&quot;EndOfLineFlag\\&quot;: true,\\n              \\&quot;Text\\&quot;: \\&quot;Normal left-aligned text belonging to the header above.\\&quot;\\n            },\\n            {\\n              \\&quot;Alignment\\&quot;: \\&quot;Left\\&quot;,\\n              \\&quot;EndOfLineFlag\\&quot;: false,\\n              \\&quot;Text\\&quot;: \\&quot;This is the key\\&quot;\\n            },\\n            {\\n              \\&quot;Alignment\\&quot;: \\&quot;Right\\&quot;,\\n              \\&quot;EndOfLineFlag\\&quot;: true,\\n              \\&quot;Text\\&quot;: \\&quot;value\\&quot;\\n            },\\n            {\\n              \\&quot;Alignment\\&quot;: \\&quot;Left\\&quot;,\\n              \\&quot;EndOfLineFlag\\&quot;: false,\\n              \\&quot;Text\\&quot;: \\&quot;This is the key\\&quot;\\n            },\\n            {\\n              \\&quot;Alignment\\&quot;: \\&quot;Right\\&quot;,\\n              \\&quot;EndOfLineFlag\\&quot;: true,\\n              \\&quot;Text\\&quot;: \\&quot;value\\&quot;\\n            },\\n            {\\n              \\&quot;Alignment\\&quot;: \\&quot;Left\\&quot;,\\n              \\&quot;EndOfLineFlag\\&quot;: true,\\n              \\&quot;Text\\&quot;: \\&quot;\\&quot;\\n            },\\n            {\\n              \\&quot;Alignment\\&quot;: \\&quot;Justified\\&quot;,\\n              \\&quot;EndOfLineFlag\\&quot;: true,\\n              \\&quot;Text\\&quot;: \\&quot;Normal justified text flush with the left and right margins.\\&quot;\\n            },\\n            {\\n              \\&quot;Alignment\\&quot;: \\&quot;Left\\&quot;,\\n              \\&quot;EndOfLineFlag\\&quot;: true,\\n              \\&quot;Text\\&quot;: \\&quot;For comparison, here you have some normal left-aligned text.\\&quot;\\n            },\\n            {\\n              \\&quot;Alignment\\&quot;: \\&quot;Left\\&quot;,\\n              \\&quot;EndOfLineFlag\\&quot;: true,\\n              \\&quot;Text\\&quot;: \\&quot;\\&quot;\\n            },\\n            {\\n              \\&quot;CharacterStyle\\&quot;: \\&quot;Bold\\&quot;,\\n              \\&quot;Alignment\\&quot;: \\&quot;Left\\&quot;,\\n              \\&quot;EndOfLineFlag\\&quot;: true,\\n              \\&quot;Text\\&quot;: \\&quot;This is bold left-aligned text.\\&quot;\\n            },\\n            {\\n              \\&quot;Alignment\\&quot;: \\&quot;Centred\\&quot;,\\n              \\&quot;EndOfLineFlag\\&quot;: true,\\n              \\&quot;Text\\&quot;: \\&quot;\\&quot;\\n            },\\n            {\\n              \\&quot;CharacterStyle\\&quot;: \\&quot;Bold\\&quot;,\\n              \\&quot;Alignment\\&quot;: \\&quot;Centred\\&quot;,\\n              \\&quot;EndOfLineFlag\\&quot;: true,\\n              \\&quot;Text\\&quot;: \\&quot;This is the footer\\&quot;\\n            }\\n          ]\\n        }\\n      }\\n    }\\n  }\\n}&lt;\\\/code&gt;&lt;\\\/pre&gt;\\n&quot;,&quot;altTitle&quot;:null,&quot;oldTabId&quot;:1,&quot;relation&quot;:&quot;&quot;}]\"\n            :should-update-when-url-changes='false'>\n        <\/tabs>\n    <\/div>\n<\/div>\n\n<\/li>\n<\/ul>\n<ol>\n<li>\n<p>Check the  <a href=\"https:\/\/docs.adyen.com\/api-explorer\/terminal-api\/latest\/post\/print#responses-200\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">PrintResponse<\/a>. This should include:<\/p>\n<ul>\n<li><code>DocumentQualifier<\/code>: <span translate=\"no\"><strong>Document<\/strong><\/span><\/li>\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 printing text'\" :id=\"''\" :code-data='[{\"language\":\"json\",\"tabTitle\":\"\",\"content\":\"{\\n   \\\"SaleToPOIResponse\\\": {\\n      \\\"PrintResponse\\\": {\\n         \\\"DocumentQualifier\\\": \\\"Document\\\",\\n         \\\"Response\\\": {\\n            \\\"Result\\\": \\\"Success\\\"\\n         }\\n      },\\n      \\\"MessageHeader\\\": {\\n         \\\"MessageCategory\\\": \\\"Print\\\",\\n         \\\"MessageClass\\\": \\\"Device\\\",\\n         \\\"MessageType\\\": \\\"Response\\\",\\n         \\\"POIID\\\": \\\"V400m-346403161\\\",\\n         \\\"ProtocolVersion\\\": \\\"3.0\\\",\\n         \\\"SaleID\\\": \\\"POSSystemID12345\\\",\\n         \\\"ServiceID\\\": \\\"050823\\\"\\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=\"print-qr-code\">Print a QR code<\/h2>\n<p>To use the payment terminal to print a QR code that the shopper can scan with their mobile device:<\/p>\n<ol>\n<li>\n<p>If the QR code needs to contain more than just a URL, convert the content to a URL-encoded string. You'll need to specify the URL-encoded string in the print request.<\/p>\n<p>For example, if the QR code should have this content:<\/p>\n<pre><code class=\"language-bash\">Visit www.adyen.com\/pos-payments and:\n- Learn about the features we support\n- Choose from a range of terminals<\/code><\/pre>\n<p>The resulting URL-encoded string will look like this:<\/p>\n<pre><code class=\"language-bash\">Visit%20www.adyen.com%2Fpos-payments%20and%3A%0A-%20Learn%20about%20the%20features%20we%20support%0A-%20Choose%20from%20a%20range%20of%20terminals<\/code><\/pre>\n<p>If the QR code needs to contain only a URL, for example <code>https:\/\/www.adyen.com\/pos-payments<\/code>, there is no need to URL-encode that. You'll specify the URL in the print request as a plain text string.<\/p>\n<\/li>\n<li>\n<p>Make a <a href=\"\/point-of-sale\/design-your-integration\/terminal-api\">Terminal API<\/a> print 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>Device<\/strong><\/span> and <code>MessageCategory<\/code> set to <span translate=\"no\"><strong>Print<\/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>Device<\/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>Print<\/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\/print#request-PrintOutput\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">PrintRequest.PrintOutput<\/a> object, including:<\/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>DocumentQualifier<\/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>CustomerReceipt<\/strong><\/span><\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>ResponseMode<\/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>PrintEnd<\/strong><\/span><\/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>BarCode<\/strong><\/span><\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>OutputContent.OutputBarcode.BarcodeType<\/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>QRCode<\/strong><\/span><\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>OutputContent.OutputBarcode.BarcodeValue<\/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 content of the QR code: a URL specified as a plain text string or a URL encoded string.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/li>\n<\/ul>\n<div data-component-wrapper=\"code-sample\">\n<code-sample :title=\"''\" :id=\"'print-qr'\" :code-data='[{\"language\":\"json\",\"tabTitle\":\"JSON\",\"content\":\"{\\n    \\\"SaleToPOIRequest\\\": {\\n        \\\"MessageHeader\\\": {\\n            \\\"ProtocolVersion\\\": \\\"3.0\\\",\\n            \\\"MessageClass\\\": \\\"Device\\\",\\n            \\\"MessageCategory\\\": \\\"Print\\\",\\n            \\\"MessageType\\\": \\\"Request\\\",\\n            \\\"ServiceID\\\": \\\"050817\\\",\\n            \\\"SaleID\\\": \\\"POSSystemID12345\\\",\\n            \\\"POIID\\\": \\\"V400m-346403161\\\"\\n        },\\n        \\\"PrintRequest\\\": {\\n            \\\"PrintOutput\\\": {\\n                \\\"DocumentQualifier\\\": \\\"CustomerReceipt\\\",\\n                \\\"ResponseMode\\\": \\\"PrintEnd\\\",\\n                \\\"OutputContent\\\": {\\n                    \\\"OutputFormat\\\":\\\"BarCode\\\",\\n                    \\\"OutputBarcode\\\": {\\n                        \\\"BarcodeType\\\": \\\"QRCode\\\",\\n                        \\\"BarcodeValue\\\": \\\"https:\\\/\\\/www.adyen.com\\\/pos-payments\\\"\\n                    }\\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\\\";\\n\\nSaleToPOIRequest saleToPOIRequest = new SaleToPOIRequest();\\nPrintRequest printRequest = new PrintRequest();\\nPrintOutput printOutput = new PrintOutput();\\nprintOutput.setDocumentQualifier( DocumentQualifierType.CUSTOMERRRECEIPT );\\nprintOutput.setResponseMode( ResponseModeType.PRINTEND );\\nOutputContent outputContent = new OutputContent();\\noutputContent.setOutputFormat( OutputFormatType.BARCODE );\\nOutputBarcode outputBarcode = new OutputBarcode();\\noutputBarcode.setBarcodeType( BarcodeTypeType.QRCODE );\\noutputBarcode.setBarcodeValue( \\\"https:\\\/\\\/www.adyen.com\\\/pos-payments\\\" )\\noutputContent.setOutputBarcode(outputBarcode);\\nprintOutput.setOutputContent(outputContent);\\nprintRequest.setPrintOutput(printOutput);\\nsaleToPOIRequest.setPrintRequest(printRequest);\\n\\nMessageHeader messageHeader = new MessageHeader();\\nmessageHeader.setProtocolVersion(\\\"3.0\\\");\\nmessageHeader.setMessageClass( MessageClassType.DEVICE );\\nmessageHeader.setMessageCategory( MessageCategoryType.PRINT );\\nmessageHeader.setMessageType( MessageType.REQUEST );\\nmessageHeader.setServiceID(serviceID);\\nmessageHeader.setSaleID(saleID);\\nmessageHeader.setPOIID(POIID);\\nsaleToPOIRequest.setMessageHeader(messageHeader);\\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>Check the  <a href=\"https:\/\/docs.adyen.com\/api-explorer\/terminal-api\/latest\/post\/print#responses-200\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">PrintResponse<\/a>. This should include:<\/p>\n<ul>\n<li><code>DocumentQualifier<\/code>: <span translate=\"no\"><strong>CustomerReceipt<\/strong><\/span><\/li>\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 printing a QR code'\" :id=\"''\" :code-data='[{\"language\":\"json\",\"tabTitle\":\"\",\"content\":\"{\\n   \\\"SaleToPOIResponse\\\": {\\n      \\\"PrintResponse\\\": {\\n         \\\"DocumentQualifier\\\": \\\"CustomerReceipt\\\",\\n         \\\"Response\\\": {\\n            \\\"Result\\\": \\\"Success\\\"\\n         }\\n      },\\n      \\\"MessageHeader\\\": {\\n         \\\"MessageCategory\\\": \\\"Print\\\",\\n         \\\"MessageClass\\\": \\\"Device\\\",\\n         \\\"MessageType\\\": \\\"Response\\\",\\n         \\\"POIID\\\": \\\"V400m-34640316\\\",\\n         \\\"ProtocolVersion\\\": \\\"3.0\\\",\\n         \\\"SaleID\\\": \\\"POSSystemID12345\\\",\\n         \\\"ServiceID\\\": \\\"050817\\\"\\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=\"print-images\">Print an image<\/h2>\n<p>To use the payment terminal to print a PNG image:<\/p>\n<ol>\n<li>\n<p>Convert the PNG image to a Base64-encoded string.<\/p>\n<div class=\"notices green\">\n<p>The size limit of the image is 256000 bytes. Therefore, we recommend using <a href=\"https:\/\/en.wikipedia.org\/wiki\/List_of_monochrome_and_RGB_color_formats#Monochrome_palettes\" target=\"_blank\" rel=\"nofollow noopener noreferrer\" class=\"external-link no-image\">1-bit grayscale<\/a> images with a maximum width of 384 pixels.<\/p>\n<\/div>\n<\/li>\n<li>\n<p>In the XML code sample below, replace <code>&lt;IMAGE_DATA&gt;<\/code> with the Base64-encoded string.<\/p>\n<div data-component-wrapper=\"code-sample\">\n<code-sample :title=\"'XML code sample'\" :id=\"''\" :code-data='[{\"language\":\"xml\",\"tabTitle\":\"\",\"content\":\"&lt;?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?&gt;\\n&lt;img src=\\\"data:image\\\/png;base64, &lt;IMAGE_DATA&gt;\\\"\\\/&gt;\"}]' :enable-copy-link-to-code-block=\"true\" :code-sample-card-size=\"'fullsize'\"><\/code-sample>\n<\/div>\n<div class=\"notices yellow\">\n<p>You must include a space between <code>&lt;img src=\"data:image\/png;base64,<\/code> and the Base64-encoded <code>&lt;IMAGE_DATA&gt;<\/code>.<\/p>\n<\/div>\n<\/li>\n<li>\n<p>Convert the whole XML code sample, including the already Base64-encoded image, to a Base64-encoded string.<\/p>\n<\/li>\n<li>\n<p>Make a <a href=\"\/point-of-sale\/design-your-integration\/terminal-api\">Terminal API<\/a> print 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>Device<\/strong><\/span> and <code>MessageCategory<\/code> set to <span translate=\"no\"><strong>Print<\/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>Device<\/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>Print<\/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\/print#request-PrintOutput\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">PrintRequest.PrintOutput<\/a> object, including:<\/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>DocumentQualifier<\/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>Document<\/strong><\/span><\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>ResponseMode<\/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>PrintEnd<\/strong><\/span><\/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>XHTML<\/strong><\/span><\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>OutputContent.OutputXHTML<\/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 Base64-encoded XML code sample with the image data.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/li>\n<\/ul>\n<div data-component-wrapper=\"code-sample\">\n<code-sample :title=\"'Print request'\" :id=\"''\" :code-data='[{\"language\":\"json\",\"tabTitle\":\"\",\"content\":\"{\\n   \\\"SaleToPOIRequest\\\": {\\n      \\\"MessageHeader\\\": {\\n         \\\"ProtocolVersion\\\": \\\"3.0\\\",\\n         \\\"MessageClass\\\": \\\"Device\\\",\\n         \\\"MessageCategory\\\": \\\"Print\\\",\\n         \\\"MessageType\\\": \\\"Request\\\",\\n         \\\"ServiceID\\\": \\\"050831\\\",\\n         \\\"SaleID\\\": \\\"POSSystemID12345\\\",\\n         \\\"POIID\\\": \\\"V400m-34640316\\\"\\n      },\\n      \\\"PrintRequest\\\": {\\n         \\\"PrintOutput\\\": {\\n            \\\"DocumentQualifier\\\": \\\"Document\\\",\\n            \\\"ResponseMode\\\": \\\"PrintEnd\\\",\\n            \\\"OutputContent\\\": {\\n               \\\"OutputFormat\\\": \\\"XHTML\\\",\\n               \\\"OutputXHTML\\\": \\\"PD94bWwgdmVyc2...NUNZSUk9Ii8+\\\"\\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>Check the  <a href=\"https:\/\/docs.adyen.com\/api-explorer\/terminal-api\/latest\/post\/print#responses-200\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">PrintResponse<\/a>. This should include:<\/p>\n<ul>\n<li><code>DocumentQualifier<\/code>: <span translate=\"no\"><strong>Document<\/strong><\/span><\/li>\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 printing an image'\" :id=\"''\" :code-data='[{\"language\":\"json\",\"tabTitle\":\"\",\"content\":\"{\\n   \\\"SaleToPOIResponse\\\": {\\n      \\\"PrintResponse\\\":{\\n         \\\"DocumentQualifier\\\": \\\"Document\\\",\\n         \\\"Response\\\": {\\n            \\\"Result\\\": \\\"Success\\\"\\n         }\\n      },\\n      \\\"MessageHeader\\\": {\\n         \\\"MessageCategory\\\": \\\"Print\\\",\\n         \\\"MessageClass\\\": \\\"Device\\\",\\n         \\\"MessageType\\\": \\\"Response\\\",\\n         \\\"POIID\\\": \\\"V400m-34640316\\\",\\n         \\\"ProtocolVersion\\\": \\\"3.0\\\",\\n         \\\"SaleID\\\": \\\"POSSystemID12345\\\",\\n         \\\"ServiceID\\\": \\\"050831\\\"\\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>Handle print errors<\/h2>\n<p>If the print request fails because of a problem with the printer, you receive a <code>PrintResponse<\/code> containing the following:<\/p>\n<ul>\n<li><code>DocumentQualifier<\/code>: <span translate=\"no\"><strong>Document<\/strong><\/span> or <span translate=\"no\"><strong>CustomerReceipt<\/strong><\/span><\/li>\n<li><code>Response.Result<\/code>: <span translate=\"no\"><strong>Failure<\/strong><\/span><\/li>\n<li><code>ErrorCondition<\/code>: <span translate=\"no\"><strong>DeviceOut<\/strong><\/span><\/li>\n<li><code>AdditionalResponse<\/code>: A description of the problem, for example:\n<ul>\n<li>Printer is Temporary Out of Service: paper low.<\/li>\n<li>Printer is Temporary Out of Service: no more paper.<\/li>\n<li>Printer is Temporary Out of Service: paper jam.<\/li>\n<li>Printer is Permanently Out of Service: out of order.<\/li>\n<li>Printer is Permanently Out of Service: unknown.<\/li>\n<li>Printer is Permanently Out of Service: absent.<\/li>\n<li>The device has no printer.<\/li>\n<\/ul><\/li>\n<\/ul>\n<p>The next example shows the response when the terminal has run out of paper.<\/p>\n<div data-component-wrapper=\"code-sample\">\n    <code-sample :title=\"'Response for failed print request'\" :id=\"''\" :code-data='[{\"language\":\"json\",\"tabTitle\":\"\",\"content\":\"{\\n    \\\"SaleToPOIResponse\\\": {\\n        \\\"MessageHeader\\\": {\\n            \\\"MessageCategory\\\": \\\"Print\\\",\\n            \\\"MessageClass\\\": \\\"Device\\\",\\n            \\\"MessageType\\\": \\\"Response\\\",\\n            \\\"POIID\\\": \\\"V400m-347440332\\\",\\n            \\\"ProtocolVersion\\\": \\\"3.0\\\",\\n            \\\"SaleID\\\": \\\"POSSystemID12345\\\",\\n            \\\"ServiceID\\\": \\\"0508178\\\"\\n        },\\n        \\\"PrintResponse\\\": {\\n            \\\"DocumentQualifier\\\": \\\"CustomerReceipt\\\",\\n            \\\"Response\\\": {\\n                \\\"AdditionalResponse\\\": \\\"message=Printer%20is%20Temporary%20Out%20of%20Service%3a%20no%20more%20paper&amp;warnings=At%20SaleToPOIRequest.PrintRequest.PrintOutput.OutputContent.OutputBarcode%2c%20field%20%27BarcodeType%27%3a%20Unexpected\\\",\\n                \\\"ErrorCondition\\\": \\\"DeviceOut\\\",\\n                \\\"Result\\\": \\\"Failure\\\"\\n            }\\n        }\\n    }\\n}\"}]' :enable-copy-link-to-code-block=\"true\" :code-sample-card-size=\"'fullsize'\"><\/code-sample>\n<\/div>\n<h2>See also<\/h2>\n<div class=\"see-also-links output-inline\" id=\"see-also\">\n<ul><li><a href=\"\/point-of-sale\/shopper-engagement\/display-data\"\n                        target=\"_self\"\n                        >\n                    Display data on the terminal\n                <\/a><\/li><\/ul><\/div>\n","url":"https:\/\/docs.adyen.com\/point-of-sale\/shopper-engagement\/print-data","articleFields":{"description":"Print text, QR codes, or images on the payment terminal outside of the payment flow.","feedback_component":true,"last_edit_on":"12-12-2024 16:30","filters_component":false,"decision_tree":"[]","page_id":"db48362a-f521-4d51-abbe-45a4c0807c02"},"algolia":{"url":"https:\/\/docs.adyen.com\/point-of-sale\/shopper-engagement\/print-data","title":"Print data on the terminal","content":"A print request allows you to initiate printing on the payment terminal from your POS app outside of a payment flow. You can print text, QR codes, or images.\nHere are some examples of how you can use print requests:\n\nIn a Pay at Table flow, print the bill on the terminal before sending a payment request. This lets the customers decide if they want to split the bill, and how they want to pay.\nPrint entry tickets at a festival.\nIn a quick-service restaurant, print a receipt that allows customers to pick up their order at the counter.\nPrint a QR code with a URL to join your loyalty program or to download an app.\n\nIf you want to combine text with a QR code, you need to make two consecutive print requests. There is no prompt to tear off the paper following a print request (like after printing a shopper receipt), so you are able to give the shopper a single slip of paper.\nRequirements\nBefore you begin, take into account the following requirement.\n\n\n\nRequirement\nDescription\n\n\n\n\nIntegration type\nA Terminal API integration with payment terminals.\n\n\nHardware\nOnly works on payment terminals with a built-in printer, such as the V240m Plus (in Brazil), V400c Plus, V400m, S1F2, S1F2L, and S1F4Pro.\n\n\nLimitations\nIt is not possible to print barcode formats such as EAN-8, EAN-13, UPC-A, Code 25, Code 128 or PDF417.\n\n\n\nPrint text\nTo use the payment terminal to print text content:\n\n\nMake a Terminal API print request, specifying:\n\n\nThe standard \n  SaleToPOIRequest.MessageHeader\n object, with MessageClass set to Device and MessageCategory set to Print.\n\n\n\nParameter\nRequired\nDescription\n\n\n\n\nProtocolVersion\n\n3.0\n\n\nMessageClass\n\nDevice\n\n\nMessageCategory\n\nPrint\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  PrintRequest.PrintOutput object, including:\n\n\n\nParameter\nRequired\nDescription\n\n\n\n\nDocumentQualifier\n\nDocument\n\n\nResponseMode\n\nPrintEnd\n\n\nOutputContent.OutputFormat\n\nText\n\n\nOutputContent.OutputText\n\nAn array with one or more array items containing the text you want to print.\n\n\n\nEach OutputText array item can have:\n\n\n\nParameter\nRequired\nDescription\n\n\n\n\nCharacterStyle\n\nAllowed values: Normal, Bold, Underline. If not specified, defaults to Normal.\n\n\nAlignment\n\nAllowed values: Left, Centred, Justified, Right. If not specified, defaults to Left.\n\n\nEndOfLineFlag\n\nIf not specified, defaults to true. Use false if you want the next array item to continue on the same line.\n\n\nText\n\nThe text you want to print in this array element. For a blank line, specify an empty value.\n\n\n\n\n\nSelect the tabs below to see how you can use the parameters to print a receipt (with a header, line items, and a footer) or a document (with a title, headings, and paragraphs).\n\n\n    \n        \n        \n    \n\n\n\n\n\n\nCheck the  PrintResponse. This should include:\n\nDocumentQualifier: Document\nResponse.Result: Success\n\n\n\n\n\n\nPrint a QR code\nTo use the payment terminal to print a QR code that the shopper can scan with their mobile device:\n\n\nIf the QR code needs to contain more than just a URL, convert the content to a URL-encoded string. You'll need to specify the URL-encoded string in the print request.\nFor example, if the QR code should have this content:\nVisit www.adyen.com\/pos-payments and:\n- Learn about the features we support\n- Choose from a range of terminals\nThe resulting URL-encoded string will look like this:\nVisit%20www.adyen.com%2Fpos-payments%20and%3A%0A-%20Learn%20about%20the%20features%20we%20support%0A-%20Choose%20from%20a%20range%20of%20terminals\nIf the QR code needs to contain only a URL, for example https:\/\/www.adyen.com\/pos-payments, there is no need to URL-encode that. You'll specify the URL in the print request as a plain text string.\n\n\nMake a Terminal API print request, specifying:\n\n\nThe standard \n  SaleToPOIRequest.MessageHeader\n object, with MessageClass set to Device and MessageCategory set to Print.\n\n\n\nParameter\nRequired\nDescription\n\n\n\n\nProtocolVersion\n\n3.0\n\n\nMessageClass\n\nDevice\n\n\nMessageCategory\n\nPrint\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  PrintRequest.PrintOutput object, including:\n\n\n\nParameter\nRequired\nDescription\n\n\n\n\nDocumentQualifier\n\nCustomerReceipt\n\n\nResponseMode\n\nPrintEnd\n\n\nOutputContent.OutputFormat\n\nBarCode\n\n\nOutputContent.OutputBarcode.BarcodeType\n\nQRCode\n\n\nOutputContent.OutputBarcode.BarcodeValue\n\nThe content of the QR code: a URL specified as a plain text string or a URL encoded string.\n\n\n\n\n\n\n\n\n\n\nCheck the  PrintResponse. This should include:\n\nDocumentQualifier: CustomerReceipt\nResponse.Result: Success\n\n\n\n\n\n\nPrint an image\nTo use the payment terminal to print a PNG image:\n\n\nConvert the PNG image to a Base64-encoded string.\n\nThe size limit of the image is 256000 bytes. Therefore, we recommend using 1-bit grayscale images with a maximum width of 384 pixels.\n\n\n\nIn the XML code sample below, replace &lt;IMAGE_DATA&gt; with the Base64-encoded string.\n\n\n\n\nYou must include a space between &lt;img src=\"data:image\/png;base64, and the Base64-encoded &lt;IMAGE_DATA&gt;.\n\n\n\nConvert the whole XML code sample, including the already Base64-encoded image, to a Base64-encoded string.\n\n\nMake a Terminal API print request, specifying:\n\n\nThe standard \n  SaleToPOIRequest.MessageHeader\n object, with MessageClass set to Device and MessageCategory set to Print.\n\n\n\nParameter\nRequired\nDescription\n\n\n\n\nProtocolVersion\n\n3.0\n\n\nMessageClass\n\nDevice\n\n\nMessageCategory\n\nPrint\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  PrintRequest.PrintOutput object, including:\n\n\n\nParameter\nRequired\nDescription\n\n\n\n\nDocumentQualifier\n\nDocument\n\n\nResponseMode\n\nPrintEnd\n\n\nOutputContent.OutputFormat\n\nXHTML\n\n\nOutputContent.OutputXHTML\n\nThe Base64-encoded XML code sample with the image data.\n\n\n\n\n\n\n\n\n\n\nCheck the  PrintResponse. This should include:\n\nDocumentQualifier: Document\nResponse.Result: Success\n\n\n\n\n\n\nHandle print errors\nIf the print request fails because of a problem with the printer, you receive a PrintResponse containing the following:\n\nDocumentQualifier: Document or CustomerReceipt\nResponse.Result: Failure\nErrorCondition: DeviceOut\nAdditionalResponse: A description of the problem, for example:\n\nPrinter is Temporary Out of Service: paper low.\nPrinter is Temporary Out of Service: no more paper.\nPrinter is Temporary Out of Service: paper jam.\nPrinter is Permanently Out of Service: out of order.\nPrinter is Permanently Out of Service: unknown.\nPrinter is Permanently Out of Service: absent.\nThe device has no printer.\n\n\nThe next example shows the response when the terminal has run out of paper.\n\n    \n\nSee also\n\n\n                    Display data on the terminal\n                \n","type":"page","locale":"en","boost":17,"hierarchy":{"lvl0":"Home","lvl1":"In-person payments","lvl2":"Shopper engagement","lvl3":"Print data on the terminal"},"hierarchy_url":{"lvl0":"https:\/\/docs.adyen.com\/","lvl1":"https:\/\/docs.adyen.com\/point-of-sale","lvl2":"https:\/\/docs.adyen.com\/point-of-sale\/shopper-engagement","lvl3":"\/point-of-sale\/shopper-engagement\/print-data"},"levels":4,"category":"In-person payments","category_color":"green","tags":["Print","terminal"]},"articleFiles":{"print-qr.json":"<p alt=\"\">print-qr.json<\/p>"}}
