--- title: "Ask for amount input" description: "Use an input request to ask a shopper to enter an amount." url: "https://docs.adyen.com/point-of-sale/shopper-engagement/shopper-input/amount" source_url: "https://docs.adyen.com/point-of-sale/shopper-engagement/shopper-input/amount.md" canonical: "https://docs.adyen.com/point-of-sale/shopper-engagement/shopper-input/amount" last_modified: "2026-05-08T17:09:17+02:00" language: "en" --- # Ask for amount input Use an input request to ask a shopper to enter an amount. Here we describe how you can use an input request to ask the customer to enter an amount. For example, the amount they want to pay when splitting the bill. The terminal shows the currency and a placeholder amount with two decimals. ## Requirements Before you begin, take into account the following requirement. | Requirement | Description | | -------------------- | -------------------------------------------------------------------------------- | | **Integration type** | A [Terminal API integration](/point-of-sale/get-started) with payment terminals. | ## How it works When you use a **GetAmount** `InputRequest`, the terminal prompts the shopper or your staff to enter an amount. 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 next illustration shows the amount input screen on a landscape display. ![](/images/9/4/2/f/3/942f37136def6abaab3b2a911dca94d84a606e6f-screen-engetamountlandscape.png) The following illustrations show the amount input screen on a small portrait display and a portrait display without a keypad. ![](/images/f/c/0/0/4/fc004ff4fc5c2c72de919a0762231bf10639ea80-screen-ene285amount.png) ![](/images/5/7/d/9/3/57d93b9ccc6f8cc807bf7ed5e462236b733879aa-screen-engetamountportrait280.png) ## Entering an amount As the customer enters their input, the amount is populated from right to left. For example, when the customer selects **3**, **6**, **5**, and **9** to enter an amount of **EUR 36.59**, the screen changes from a placeholder amount of EUR 0.00 to *EUR 0.03*, to *EUR 0.36* and so on. ## Currency By default, the currency is set to the first one specified for your store in the [Customer Area](https://ca-test.adyen.com/). To check this: your settings in your Customer Area: 1. In your [Customer Area](https://ca-test.adyen.com/), go to **In-person payments** > **Stores**. 2. Select your store, and go to **Payment features**. If you use a merchant account to represent a physical store, it is the first currency defined for the merchant account. To check this: 1. In your [Customer Area](https://ca-test.adyen.com/), select your merchant account. 2. Go to **In-person payments** > **Terminal settings** > **Payment features**. ## Make an Amount input request To use the payment terminal to ask for an amount input: 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` | **GetAmount** | | `OutputContent.OutputText` | An array of one `Text` field containing your own text to show on the terminal. On a portrait display, limited to about 20 characters. Apart from the text you specify, the terminal will show the currency and 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` | **DecimalString** | | `MaxInputTime` | (Integer) Time-out in seconds. This is the time that the user gets to finish their input. | | `DefaultInputString` | Placeholder text for the input box, to let the user know what input format you are expecting. For example: **0.00** | The following example asks the shopper to enter the amount they want to pay. #### JSON ```json { "SaleToPOIRequest":{ "MessageHeader":{ "ProtocolVersion":"3.0", "MessageClass":"Device", "MessageCategory":"Input", "MessageType":"Request", "SaleID":"POSSystemID12345", "ServiceID":"185341262", "POIID":"V400m-346937816" }, "InputRequest":{ "DisplayOutput":{ "Device":"CustomerDisplay", "InfoQualify":"Display", "OutputContent":{ "OutputFormat":"Text", "PredefinedContent":{ "ReferenceID":"GetAmount" }, "OutputText":[ { "Text":"Enter Amount:" } ] } }, "InputData":{ "Device":"CustomerInput", "InfoQualify":"Input", "InputCommand":"DecimalString", "MaxInputTime": 30, "DefaultInputString":"0.00" } } } } ``` #### 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("GetAmount"); outputContent.setPredefinedContent(predefinedContent); OutputText outputText = new OutputText(); outputText.setText("Enter Amount:"); outputContent.getOutputText().add(outputText); displayOutput.setOutputContent(outputContent); inputRequest.setDisplayOutput(displayOutput); InputData inputData = new InputData(); inputData.setDevice( DeviceType.CUSTOMER_INPUT ); inputData.setInfoQualify( InfoQualifyType.INPUT ); inputData.setInputCommand( InputCommandType.DIGIT_DECIMAL ); inputData.setMaxInputTime( BigInteger.valueOf(30) ); inputData.setDefaultInputString("0.00"); inputRequest.setInputData(inputData); saleToPOIRequest.setInputRequest(inputRequest); terminalAPIRequest.setSaleToPOIRequest(saleToPOIRequest); ``` 2. Wait for the user to supply the requested input. 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 amount that the user entered. **Example response when the shopper entered an amount** ```json { "SaleToPOIResponse": { "InputResponse": { "InputResult": { "Device": "CustomerInput", "InfoQualify": "Input", "Input": { "InputCommand": "DecimalString", "DigitInput": "36.59" }, "Response": { "Result": "Success", "AdditionalResponse": "responseData=%7b%20%20%7d", } }, "OutputResult": { "Device": "CustomerDisplay", "InfoQualify": "Display", "Response": { "Result": "Success" } } }, "MessageHeader": { "ProtocolVersion": "3.0", "MessageClass": "Device", "MessageCategory": "Input", "MessageType": "Response", "SaleID": "POSSystemID12345", "ServiceID": "185341262", "POIID": "V400m-346937816" } } ``` * 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)**), 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 * [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)