---
title: "Ask for a rating&mdash;single key press"
description: "Use an input request with minimal user interaction to gather ratings."
url: "https://docs.adyen.com/point-of-sale/shopper-engagement/shopper-input/rating/rating-single-press"
source_url: "https://docs.adyen.com/point-of-sale/shopper-engagement/shopper-input/rating/rating-single-press.md"
canonical: "https://docs.adyen.com/point-of-sale/shopper-engagement/shopper-input/rating/rating-single-press"
last_modified: "2026-06-01T15:33:14+02:00"
language: "en"
---

# Ask for a rating—single key press

Use an input request with minimal user interaction to gather ratings.

[View source](/point-of-sale/shopper-engagement/shopper-input/rating/rating-single-press.md)

As an alternative to the default [GetRating](/point-of-sale/shopper-engagement/shopper-input/rating) input request, you can use the **GetOneKeyRating** input request to gather ratings from your customers.

The main difference is that with **GetOneKeyRating**, a single key press answers the question and sends the response when the shopper presses a key.

## Requirements

Before you begin, take into account the following requirements and limitations.

| Requirement          | Description                                                                                                                                                                           |
| -------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Integration type** | A [Terminal API integration](/point-of-sale/get-started) with payment terminals.                                                                                                      |
| **Hardware**         | This feature is available on the following [terminals](/point-of-sale/what-we-support/select-your-terminals): M400, P400 Plus, V400m, M450, P630, AMS1, S1F2, S1F2L, S1E2L, and SFO1. |

## How it works

When you send a **GetOneKeyRating** request, the terminal prompts the shopper for a rating. The terminal continues to show your input request until one of these events occurs:

* The user has provided input.
* The maximum input time expires. You can set this time in the request.
* On the terminal, **Cancel** **![](/images/5/8/8/4/9/58849deb729ef765fb92c34a2b367b9ae58a5598-cancel2x.png)** is selected.
* The terminal receives a [request to cancel collecting input](/point-of-sale/shopper-engagement/shopper-input/cancel-input) or any other request from the POS app.

### Examples

The following illustrations show the single key press rating screen on a portrait and landscape display.

![](/images/2/1/e/3/9/21e39b8af6644fdbb98a1abe991d4ae71e1b9b14-screen-engetnpsportraitsingle.png)

![](/images/b/6/1/7/4/b61743752470b923369b9d9da4ce1cb7dc1ed747-screen-engetnpslandscapesingle.png)

## Make a Rating input request

To use the payment terminal to ask for a rating:

1. Make a [Terminal API](/point-of-sale/design-your-integration/terminal-api) input 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 **Input**.

     | 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-") | **Input**                                                                                                                                                   |
     | `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 system where you 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 [InputRequest.DisplayOutput](https://docs.adyen.com/api-explorer/terminal-api/latest/post/input#request-DisplayOutput) object to define what is shown on the terminal:

     | Parameter                                     | Description                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
     | --------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
     | `Device`                                      | **CustomerDisplay**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
     | `InfoQualify`                                 | **Display**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
     | `OutputContent.OutputFormat`                  | **Text**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
     | `OutputContent.PredefinedContent.ReferenceID` | **GetOneKeyRating**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
     | `OutputContent.OutputText`                    | An array of up to four `Text` fields containing your own text to show on the terminal. The first text is shown in bold. Use `\n` for a new line. Apart from the text you specify, the terminal will show an instruction for how to confirm the input.- **Text 1**: The question (shown in bold).
     - **Text 2**: The scale label, for example "0 = Poor, 9 = Great".
     - **Text 3**: The skip label, for example "Skip".
     - **Text 4** (optional): The footer text, for example "Thank you for your feedback". |

   - The [InputRequest.InputData](https://docs.adyen.com/api-explorer/terminal-api/latest/post/input#request-InputData) object to handle the user input:

     | Parameter      | Description                                                                               |
     | -------------- | ----------------------------------------------------------------------------------------- |
     | `Device`       | **CustomerInput**                                                                         |
     | `InfoQualify`  | **Input**                                                                                 |
     | `InputCommand` | **DigitString**                                                                           |
     | `MaxInputTime` | (Integer) Time-out in seconds. This is the time that the user gets to finish their input. |

   The following example asks the shopper for a rating using the first `Text` field for the core question and the second `Text` field to explain the scoring.

   #### JSON

   ```json
   {
       "SaleToPOIRequest":{
           "MessageHeader":{
               "ProtocolVersion":"3.0",
               "MessageClass":"Device",
               "MessageCategory":"Input",
               "MessageType":"Request",
               "ServiceID":"040",
               "SaleID":"POSSystemID12345",
               "POIID":"V400m-324688179"
           },
           "InputRequest":{
               "DisplayOutput":{
                   "Device":"CustomerDisplay",
                   "InfoQualify":"Display",
                   "OutputContent":{
                       "OutputFormat":"Text",
                       "PredefinedContent":{
                           "ReferenceID":"GetOneKeyRating"
                       },
                       "OutputText":[
                           {
                               "Text":"From 0 to 9 how was your experience with us?"
                           },
                           {
                               "Text": "Poor: 0-3 \n OK: 4-6 \n Great: 7-9"
                           },
                           {
                               "Text": "Skip"
                           },
                           {
                               "Text": "Thank you for your feedback"
                           }
                       ]
                   }
               },
               "InputData":{
                   "Device":"CustomerInput",
                   "InfoQualify":"Input",
                   "InputCommand":"DigitString",
                   "MaxInputTime":30
               }
           }
       }
   }
   ```

   #### Java

   ```java
   SaleToPOIRequest saleToPOIRequest = new SaleToPOIRequest();
   MessageHeader messageHeader = new MessageHeader();
   saleToPOIRequest.setMessageHeader(messageHeader);

   InputRequest inputRequest = new InputRequest();
   DisplayOutput displayOutput = new DisplayOutput();
   displayOutput.setDevice( DeviceType.CUSTOMER_DISPLAY );
   displayOutput.setInfoQualify( InfoQualifyType.DISPLAY );
   OutputContent outputContent = new OutputContent();
   outputContent.setOutputFormat( OutputFormatType.TEXT );
   PredefinedContent predefinedContent = new PredefinedContent();
   predefinedContent.setReferenceID("GetOneKeyRating");
   outputContent.setPredefinedContent(predefinedContent);

   OutputText questionLine1 = new OutputText();
   questionLine1.setText("From 0 to 9 how was your experience with us?");
   OutputText questionLine2 = new OutputText();
   questionLine2.setText("Poor: 0-3 \n OK: 4-6 \n Great: 7-9");
   OutputText questionLine3 = new OutputText();
   questionLine3.setText("Skip");
   OutputText questionLine4 = new OutputText();
   questionLine4.setText("Thank you for your feedback");
   outputContent.getOutputText().add(questionLine1);
   outputContent.getOutputText().add(questionLine2);
   outputContent.getOutputText().add(questionLine3);
   outputContent.getOutputText().add(questionLine4);
   displayOutput.setOutputContent(outputContent);
   inputRequest.setDisplayOutput(displayOutput);

   InputData inputData = new InputData();
   inputData.setDevice( DeviceType.CUSTOMER_INPUT );
   inputData.setInfoQualify( InfoQualifyType.INPUT );
   inputData.setInputCommand( InputCommandType.DIGIT_STRING );
   inputData.setMaxInputTime( BigInteger.valueOf(30) );
   inputRequest.setInputData(inputData);
   saleToPOIRequest.setInputRequest(inputRequest);
   terminalAPIRequest.setSaleToPOIRequest(saleToPOIRequest);
   ```

2. Wait for the user to supply the requested input.

   The input is not validated against a format.

   If input is received from the terminal, the input response includes an [InputResult](https://docs.adyen.com/api-explorer/terminal-api/latest/post/input#responses-200-InputResult) object with:

   * `Input.DigitInput`: the numeral that the user entered.

   **Example response when the shopper entered a rating of 9**

   ```json
   {
       "SaleToPOIResponse": {
           "InputResponse": {
               "InputResult": {
                   "Device": "CustomerInput",
                   "InfoQualify": "Input",
                   "Input": {
                       "DigitInput": "9",
                       "InputCommand": "DigitString"
                   },
                   "Response": {
                       "AdditionalResponse": "responseData=%7b%20%20%7d",
                       "Result": "Success",
                   }
               },
               "OutputResult": {
                   "Device": "CustomerDisplay",
                   "InfoQualify": "Display",
                   "Response": {
                       "Result": "Success"
                   }
               }
           },
           "MessageHeader": {...}
       }
   }
   ```

   * If the input request times out, the `InputResult.Response` has `AdditionalResponse`: **message=Screen%20timeout**, `Result`: **Failure**, and `ErrorCondition`: **Cancel**,

   * If you make a payment request while the input request is waiting for input on the terminal, the payment request overrides the input request. The `InputResult.Response` has `AdditionalResponse`: **message=A%20higher%20priority%20request%20has%20been%20received**, `Result`: **Failure**, and `ErrorCondition`: **Busy**.

   * If the user declined to respond (selected the **Cancel** key **![](/images/5/8/8/4/9/58849deb729ef765fb92c34a2b367b9ae58a5598-cancel2x.png)** or **Skip** on the screen), the `InputResult.Input.DigitInput` field is empty. The `InputResult.Response` has `Result`: **Failure** and `ErrorCondition`: **Cancel**.

3. Pass the `DigitInput` value to your system for validation and further use.

## See also

* [Ask for a rating](/point-of-sale/shopper-engagement/shopper-input/rating)
* [Cancel an input request](/point-of-sale/shopper-engagement/shopper-input/cancel-input)
* [Ask for another type of input](/point-of-sale/shopper-engagement/shopper-input/select-input-request)
* [Create a session](/point-of-sale/shopper-engagement/create-session)
