--- title: "Ask for a rating—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-05-08T17:09:17+02:00" language: "en" --- # Ask for a rating—single key press Use an input request with minimal user interaction to gather ratings. 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 requires a physical keypad and is currently available on the following [terminals](/point-of-sale/what-we-support/select-your-terminals): M400, P400 Plus, V400m, M450, and P630. | ## 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/4/9/3/9/d/4939d94adbc3ebc98222ede1bcbb0ef0328893e2-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/9/a/7/1/29a710209f48366e389636f74b214224f754a54d-screen-engetnpsportraitsingle.png) ![](/images/0/e/3/6/d/0e36dc6ba45f7ae3c8f9c68738b6e959e40476a2-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 one or two `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. | - 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" } ] } }, "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"); outputContent.getOutputText().add(questionLine1); outputContent.getOutputText().add(questionLine2); 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/4/9/3/9/d/4939d94adbc3ebc98222ede1bcbb0ef0328893e2-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)