{"title":"Show an image on the terminal","category":"default","creationDate":1741965480,"content":"<p>You can show an image on the display of the payment terminal, for example an advertisement, or a special offer that is generated by your POS app. By showing an image, you can use your terminal to increase shopper loyalty, or for marketing purposes.<\/p>\n<p>The image can be a PNG, JPEG, GIF, or BMP file that you convert to Base64.<\/p>\n<div class=\"notices blue\">\n<p>The terminal shows the image during the time you set in the request. If you do not set a time-out, the image continues to be shown until you send another request. For example, a payment request, a request for a different image, or a request to <a href=\"\/point-of-sale\/shopper-engagement\/display-data\/idle-display\">show the standby screen<\/a>.<\/p>\n<\/div>\n<p>The following illustrations show an image on a portrait, small portrait, and landscape display.<\/p>\n<div class=\"sc-columns\" style=\"columns:2 auto;-moz-columns:2 auto;column-gap:normal;-moz-column-gap:normal;\">\n<div style=\"text-align: center;\">\n<p><img alt=\"\" src=\"\/images\/f\/b\/8\/d\/4\/fb8d4fedf6daf1771fae70d948a547ad2296d79a-screen-enshowimageportrait.png\" \/><\/p>\n<\/div>\n<div style=\"text-align: center;\">\n<p><img alt=\"\" src=\"\/images\/a\/c\/e\/4\/a\/ace4a26351a350733a3e0a8afaeaa02afd0bf22d-screen-enshowimageportrait-small.png\" \/><\/p>\n<\/div>\n<\/div>\n<p><br><\/p>\n<div style=\"text-align: center;\">\n<p><img alt=\"\" src=\"\/images\/1\/d\/d\/5\/8\/1dd5882c7d271a5108a5c49a7ca1a4de4db938ff-screen-enshowimagelandscape.png\" \/><\/p>\n<\/div>\n<h3>Security<\/h3>\n<p>The terminal never runs or stores an image that it receives. The terminal only decodes the image, to be able to show it on the display.<\/p>\n<h2 id=\"display-image\">Make a display request for an image<\/h2>\n<ol>\n<li>\n<p>Convert a PNG, JPEG, GIF, or BMP image file to Base64.<\/p>\n<\/li>\n<li>\n<p>Make a <a href=\"\/point-of-sale\/design-your-integration\/terminal-api\">Terminal API<\/a> display 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>Display<\/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>Display<\/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\/display#request-DisplayOutput\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">DisplayRequest.DisplayOutput<\/a> array with one item containing:<\/p>\n<table>\n<thead>\n<tr>\n<th style=\"text-align: left;\">Parameter<\/th>\n<th style=\"text-align: left;\">Description<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"text-align: left;\"><code>Device<\/code><\/td>\n<td style=\"text-align: left;\"><span translate=\"no\"><strong>CustomerDisplay<\/strong><\/span><\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>InfoQualify<\/code><\/td>\n<td style=\"text-align: left;\"><span translate=\"no\"><strong>Display<\/strong><\/span><\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>MinimumDisplayTime<\/code><\/td>\n<td style=\"text-align: left;\">The number of seconds that the image is shown. <br> If you omit this parameter, the terminal shows the image until you send another request, for example, a request to <a href=\"\/point-of-sale\/shopper-engagement\/display-data\/idle-display\">show the standby screen<\/a>.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>OutputContent.OutputFormat<\/code><\/td>\n<td style=\"text-align: left;\"><span translate=\"no\"><strong>MessageRef<\/strong><\/span><\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>OutputContent.PredefinedContent.ReferenceID<\/code><\/td>\n<td style=\"text-align: left;\"><span translate=\"no\"><strong>Image<\/strong><\/span><\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>OutputContent.OutputText<\/code><\/td>\n<td style=\"text-align: left;\">An array with a <code>Text<\/code> parameter containing the image as a Base64-encoded string.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/li>\n<\/ul>\n<div data-component-wrapper=\"code-sample\">\n<code-sample :title=\"'Display request for an image'\" :id=\"''\" :code-data='[{\"language\":\"json\",\"tabTitle\":\"\",\"content\":\"{\\n   \\\"SaleToPOIRequest\\\":{\\n      \\\"MessageHeader\\\":{\\n         \\\"ProtocolVersion\\\":\\\"3.0\\\",\\n         \\\"MessageClass\\\":\\\"Device\\\",\\n         \\\"MessageCategory\\\":\\\"Display\\\",\\n         \\\"MessageType\\\":\\\"Request\\\",\\n         \\\"ServiceID\\\":\\\"043001\\\",\\n         \\\"SaleID\\\":\\\"POSSystemID12345\\\",\\n         \\\"POIID\\\":\\\"V400m-346403161\\\"\\n      },\\n      \\\"DisplayRequest\\\":{\\n         \\\"DisplayOutput\\\":[\\n            {\\n               \\\"Device\\\":\\\"CustomerDisplay\\\",\\n               \\\"InfoQualify\\\":\\\"Display\\\",\\n               \\\"MinimumDisplayTime\\\":60,\\n               \\\"OutputContent\\\":{\\n                  \\\"OutputFormat\\\":\\\"MessageRef\\\",\\n                  \\\"PredefinedContent\\\":{\\n                     \\\"ReferenceID\\\":\\\"Image\\\"\\n                  },\\n                  \\\"OutputText\\\":[\\n                     {\\n                        \\\"Text\\\":\\\"iVBORw0KGgoAAAAN...AAASUVORK5CYII=\\\"\\n                     }\\n                  ]\\n               }\\n            }\\n         ]\\n      }\\n   }\\n}\"}]' :enable-copy-link-to-code-block=\"true\" :code-sample-card-size=\"'fullsize'\"><\/code-sample>\n<\/div>\n<\/li>\n<li>\n<p>Check the result.<\/p>\n<ul>\n<li>If an error occurs while decoding the image, the image will not be shown.<\/li>\n<li>If the request is successful, the  <a href=\"https:\/\/docs.adyen.com\/api-explorer\/terminal-api\/latest\/post\/display#responses-200-OutputResult\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">OutputResult<\/a> includes <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=\"'Display response'\" :id=\"''\" :code-data='[{\"language\":\"json\",\"tabTitle\":\"\",\"content\":\"{\\n    \\\"SaleToPOIResponse\\\": {\\n        \\\"DisplayResponse\\\": {\\n            \\\"OutputResult\\\": [\\n                {\\n                    \\\"Device\\\": \\\"CustomerDisplay\\\",\\n                    \\\"InfoQualify\\\": \\\"Display\\\",\\n                    \\\"Response\\\": {\\n                        \\\"Result\\\": \\\"Success\\\"\\n                    }\\n                }\\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<\/ol>\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\/display-receipt\"\n                        target=\"_self\"\n                        >\n                    Show a virtual receipt on the display\n                <\/a><\/li><li><a href=\"\/point-of-sale\/shopper-engagement\/display-data\/idle-display\"\n                        target=\"_self\"\n                        >\n                    Set the display to standby\n                <\/a><\/li><li><a href=\"\/point-of-sale\/shopper-engagement\/display-data\/display-qr-code\"\n                        target=\"_self\"\n                        >\n                    Let your shopper scan a QR code on the terminal display.\n                <\/a><\/li><\/ul><\/div>\n","url":"https:\/\/docs.adyen.com\/point-of-sale\/shopper-engagement\/display-data\/display-image","articleFields":{"description":"Engage your shoppers by showing an ad or other image on the display of the payment terminal.","feedback_component":true,"filters_component":false,"decision_tree":"[]","page_id":"b388a46a-4beb-4dd4-9f9b-01f3a4aff99d","last_edit_on":"14-03-2025 16:18"},"algolia":{"url":"https:\/\/docs.adyen.com\/point-of-sale\/shopper-engagement\/display-data\/display-image","title":"Show an image on the terminal","content":"You can show an image on the display of the payment terminal, for example an advertisement, or a special offer that is generated by your POS app. By showing an image, you can use your terminal to increase shopper loyalty, or for marketing purposes.\nThe image can be a PNG, JPEG, GIF, or BMP file that you convert to Base64.\n\nThe terminal shows the image during the time you set in the request. If you do not set a time-out, the image continues to be shown until you send another request. For example, a payment request, a request for a different image, or a request to show the standby screen.\n\nThe following illustrations show an image on a portrait, small portrait, and landscape display.\n\n\n\n\n\n\n\n\n\n\n\n\nSecurity\nThe terminal never runs or stores an image that it receives. The terminal only decodes the image, to be able to show it on the display.\nMake a display request for an image\n\n\nConvert a PNG, JPEG, GIF, or BMP image file to Base64.\n\n\nMake a Terminal API display request, specifying:\n\n\nThe standard \n  SaleToPOIRequest.MessageHeader\n object, with MessageClass set to Device and MessageCategory set to Display.\n\n\n\nParameter\nRequired\nDescription\n\n\n\n\nProtocolVersion\n\n3.0\n\n\nMessageClass\n\nDevice\n\n\nMessageCategory\n\nDisplay\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  DisplayRequest.DisplayOutput array with one item containing:\n\n\n\nParameter\nDescription\n\n\n\n\nDevice\nCustomerDisplay\n\n\nInfoQualify\nDisplay\n\n\nMinimumDisplayTime\nThe number of seconds that the image is shown.  If you omit this parameter, the terminal shows the image until you send another request, for example, a request to show the standby screen.\n\n\nOutputContent.OutputFormat\nMessageRef\n\n\nOutputContent.PredefinedContent.ReferenceID\nImage\n\n\nOutputContent.OutputText\nAn array with a Text parameter containing the image as a Base64-encoded string.\n\n\n\n\n\n\n\n\n\n\nCheck the result.\n\nIf an error occurs while decoding the image, the image will not be shown.\nIf the request is successful, the  OutputResult includes Response.Result: Success.\n\n\n\n\n\n\nSee also\n\n\n                    Show a virtual receipt on the display\n                \n                    Set the display to standby\n                \n                    Let your shopper scan a QR code on the terminal display.\n                \n","type":"page","locale":"en","boost":16,"hierarchy":{"lvl0":"Home","lvl1":"In-person payments","lvl2":"Shopper engagement","lvl3":"Display data on the terminal","lvl4":"Show an image 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":"https:\/\/docs.adyen.com\/point-of-sale\/shopper-engagement\/display-data","lvl4":"\/point-of-sale\/shopper-engagement\/display-data\/display-image"},"levels":5,"category":"In-person payments","category_color":"green","tags":["image","terminal"]},"articleFiles":{"screen-EN_ShowImage_landscape.png":"<img alt=\"\" src=\"https:\/\/docs.adyen.com\/images\/5\/6\/9\/7\/4\/569743c16c8d0b125b116337b04322df9be0a49d-screen-enshowimagelandscape.png\" \/>","screen-EN_ShowImage_portrait-small.png":"<img alt=\"\" src=\"https:\/\/docs.adyen.com\/images\/8\/6\/0\/0\/1\/86001096906c34efc93d58ff5d37b844aeacd4f9-screen-enshowimageportrait-small.png\" \/>","screen-EN_ShowImage_portrait.png":"<img alt=\"\" src=\"https:\/\/docs.adyen.com\/images\/3\/4\/4\/c\/2\/344c202410ebcdb8a6801f48420ed86e4683a1ec-screen-enshowimageportrait.png\" \/>"}}
