---
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-06-01T15:33:14+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/3/b/9/5/8/3b958f1a059f6546d390e703f3c575771865c3a8-screen-enshowqrcodeportrait.png)

![](/images/0/a/0/9/a/0a09a7065deef2b197f2db05518f4554717f1958-screen-enshowqrcodeportrait-small.png)

![](/images/3/c/c/9/3/3cc93e589974c6849c0028564dd92e3b081383ec-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)
