--- title: "Show a QR code on the terminal" description: "Let your shoppers scan a QR code from the display of the payment terminal." url: "https://docs.adyen.com/point-of-sale/shopper-engagement/display-data/display-qr-code" source_url: "https://docs.adyen.com/point-of-sale/shopper-engagement/display-data/display-qr-code.md" canonical: "https://docs.adyen.com/point-of-sale/shopper-engagement/display-data/display-qr-code" last_modified: "2026-05-26T13:48:54+02:00" language: "en" --- # Show a QR code on the terminal Let your shoppers scan a QR code from the display of the payment terminal. [View source](/point-of-sale/shopper-engagement/display-data/display-qr-code.md) You can use the display of your payment terminal to show a QR code which the shopper can scan with their mobile device. The QR code can contain anything you like. For example, a URL to join your loyalty program or to download an app, a message with a link to a promotional offer, or an invitation to visit your webshop. You can also add a header and footer to explain what the QR code is for. The terminal shows the QR code during the time you set in the request. If you do not set a time-out, the QR code continues to be shown until you send another request. For example, a payment request, or a request to [show the standby screen](/point-of-sale/shopper-engagement/display-data/idle-display). The following illustrations show a QR code with header and footer on a portrait, small portrait, and landscape display. ![](/images/7/f/9/f/d/7f9fd48850fc64d38503f605b9d17464aa0e3248-screen-enshowqrcodeportrait.png) ![](/images/d/4/f/2/9/d4f29c8d8f4d9084750b1a908fe6183477dadbc7-screen-enshowqrcodeportrait-small.png) ![](/images/2/0/4/b/c/204bcf7543df1a2ff3caa046f28c189c5968f8ca-screen-enshowqrcodelandscape.png) ## Make a display request for a QR code 1. 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 display request, in the `OutputContent.OutputBarcode.BarcodeValue`. For example, if the QR code should have this content: ```bash Visit www.adyen.com/pos-payments and: - Learn about the features we support - Choose from a range of terminals ``` The resulting URL-encoded string will look like this: ```bash Visit%20www.adyen.com%2Fpos-payments%20and%3A%0A-%20Learn%20about%20the%20features%20we%20support%0A-%20Choose%20from%20a%20range%20of%20terminals ``` If 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 display request as a plain text string. 2. Make a [Terminal API](/point-of-sale/design-your-integration/terminal-api) display request, specifying: * The standard [`SaleToPOIRequest.MessageHeader` ](/point-of-sale/design-your-integration/terminal-api#request-message-header)object, with `MessageClass` set to **Device** and `MessageCategory` set to **Display**. | Parameter | Required | Description | | ----------------- | ------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------- | | `ProtocolVersion` | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | **3.0** | | `MessageClass` | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | **Device** | | `MessageCategory` | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | **Display** | | `MessageType` | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | **Request** | | `ServiceID` | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | Your 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. | | `SaleID` | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | Your unique ID for the POS system component to send this request from. | | `POIID` | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | The unique ID of the terminal to send this request to. Format: *\[device model]-\[serial number]*. | - The [DisplayRequest.DisplayOutput](https://docs.adyen.com/api-explorer/terminal-api/latest/post/display#request-DisplayOutput) array, with items representing the elements to show on the terminal display. This includes the [QR code](#qr) and optionally a [header and/or footer](#header-footer). #### QR code: | Parameter | Description | | ------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `Device` | **CustomerDisplay** | | `InfoQualify` | **Display** | | `MinimumDisplayTime` | The number of seconds that the QR code screen is shown. If you omit this parameter, the terminal shows the QR code screen until you send another request, for example, a request to [show the standby screen](/point-of-sale/shopper-engagement/display-data/idle-display). | | `ResponseRequiredFlag` | If not specified, defaults to **true**. The response then informs you whether this element was successfully shown. | | `OutputContent.OutputFormat` | **BarCode** | | `OutputContent.OutputBarcode.BarcodeType` | **QRCode** | | `OutputContent.OutputBarcode.BarcodeValue` | The content of the QR code, specified either as a plain text string, or as a URL encoded string. (See step 1.) | #### Header and footer (optional): The header and footer are both text array items with the same structure. If you specify one text array item, that will be interpreted as the header. If you specify a second text array item, that will be interpreted as the footer. | Parameter | Description | | ---------------------------- | --------------------------------------------------------------------------------------------------------------------------------------- | | `Device` | **CustomerDisplay** | | `InfoQualify` | **Display** | | `ResponseRequiredFlag` | If not specified, defaults to **true**. The response then informs you whether this element was successfully shown. | | `OutputContent.OutputFormat` | **Text** | | `OutputContent.OutputText` | An array with a `Text` parameter containing your text to show above the QR code (header element) or below the QR code (footer element). | **QR code with header and footer** ```json { "SaleToPOIRequest":{ "MessageHeader":{ "ProtocolVersion":"3.0", "MessageClass":"Device", "MessageCategory":"Display", "MessageType":"Request", "ServiceID":"043001", "SaleID":"POSSystemID12345", "POIID":"V400m-346403161" }, "DisplayRequest":{ "DisplayOutput":[ { "Device":"CustomerDisplay", "InfoQualify":"Display", "MinimumDisplayTime":60, "OutputContent":{ "OutputFormat":"BarCode", "OutputBarcode":{ "BarcodeType":"QRCode", "BarcodeValue":"www.adyen.com/pos-payments" } } }, { "Device":"CustomerDisplay", "InfoQualify":"Display", "OutputContent":{ "OutputFormat":"Text", "OutputText":[ { "Text":"Join our loyalty program" } ] } }, { "Device":"CustomerDisplay", "InfoQualify":"Display", "OutputContent":{ "OutputFormat":"Text", "OutputText":[ { "Text":"Thank you!" } ] } } ] } } } ``` 3. In the display response, check the [OutputResult](https://docs.adyen.com/api-explorer/terminal-api/latest/post/display#responses-200-OutputResult). This array indicates whether the elements were successfully shown. The first item in the array refers to the first item in the `DisplayOutput` array , and so on. **Display response** ```json { "SaleToPOIResponse": { "DisplayResponse": { "OutputResult": [ { "Device": "CustomerDisplay", "InfoQualify": "Display", "Response": { "Result": "Success" } }, { "Device": "CustomerDisplay", "InfoQualify": "Display", "Response": { "Result": "Success" } }, { "Device": "CustomerDisplay", "InfoQualify": "Display", "Response": { "Result": "Success" } } ] }, "MessageHeader": {...} } } ``` ## See also * [Show a virtual receipt on the display](/point-of-sale/shopper-engagement/display-data/display-receipt) * [Show an image on the display](/point-of-sale/shopper-engagement/display-data/display-image) * [Set the display to standby](/point-of-sale/shopper-engagement/display-data/idle-display)