--- title: "Cancel collecting input" description: "Learn how to cancel an in-progress input request." url: "https://docs.adyen.com/point-of-sale/shopper-engagement/shopper-input/cancel-input" source_url: "https://docs.adyen.com/point-of-sale/shopper-engagement/shopper-input/cancel-input.md" canonical: "https://docs.adyen.com/point-of-sale/shopper-engagement/shopper-input/cancel-input" last_modified: "2026-05-26T13:48:54+02:00" language: "en" --- # Cancel collecting input Learn how to cancel an in-progress input request. [View source](/point-of-sale/shopper-engagement/shopper-input/cancel-input.md) While an input request is in progress, you can cancel it in the same way that you can cancel an in-progress payment. Here we describe how you can cancel an input request from: * [Your POS app](#cancel-from-cash-register) by sending a Terminal API abort request. * [The terminal](#cancel-from-terminal). ## 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. | ## Cancel from POS app To cancel an [`InputRequest` ](/point-of-sale/shopper-engagement/shopper-input)from your POS app: 1. Make a [Terminal API](/point-of-sale/design-your-integration/terminal-api) abort request, specifying: * The standard [`SaleToPOIRequest.MessageHeader` ](/point-of-sale/design-your-integration/terminal-api#request-message-header)object, with `MessageClass` set to **Service** and `MessageCategory` set to **Abort**. | 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-") | **Service** | | `MessageCategory` | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | **Abort** | | `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 [AbortRequest](https://docs.adyen.com/api-explorer/terminal-api/latest/post/abort) object with: | Parameter | Description | | ------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `AbortReason` | **MerchantAbort** | | `MessageReference` | An object with:- `MessageCategory`: **Input** - `SaleID`: your unique ID of the POS app component that sent the input request. - `ServiceID`: the `ServiceID` of the input request being cancelled. | The example shows how to cancel an in-progress input request with a `ServiceID` of **21796**. **Abort an in-progress input request** ```json { "SaleToPOIRequest":{ "MessageHeader":{ "ProtocolVersion":"3.0", "MessageClass":"Service", "MessageCategory":"Abort", "MessageType":"Request", "SaleID":"POSSystemID12345", "ServiceID":"29239", "POIID":"V400m-324688179" }, "AbortRequest":{ "AbortReason":"MerchantAbort", "MessageReference":{ "MessageCategory":"Input", "SaleID":"POSSystemID12345", "ServiceID":"21796" } } } } ``` A successful `AbortRequest` returns a response with a `200 OK` HTTP status code and no body. 2. Check whether the cancellation was successful: * The screen generated by your `InputRequest` disappears from the terminal display. * The `InputRequest` returns a response containing: * `Result`: **Failure** * `ErrorCondition`: **Aborted** The following example shows the response for a confirmation input request that was cancelled. **InputResponse after canceling the InputRequest** ```json { "SaleToPOIResponse": { "InputResponse": { "InputResult": { "Device": "CustomerInput", "InfoQualify": "Input", "Response": { "Result": "Failure", "ErrorCondition": "Aborted" }, "Input": { "InputCommand": "GetConfirmation" } }, "OutputResult": { "Device": "CustomerDisplay", "InfoQualify": "Display", "Response": { "Result": "Success" } } }, "MessageHeader": { "ProtocolVersion": "3.0", "SaleID": "POSSystemID12345", "MessageClass": "Device", "MessageCategory": "Input", "ServiceID": "010", "POIID": "V400m-324688179", "MessageType": "Response" } } } ``` ## Cancel from terminal To cancel an in-progress input request from a terminal: * Press the **Cancel** key **![](/images/e/b/5/8/6/eb5864c171bd3eac47d4a415a1f7e5dc0b075c28-cancel2x.png)** on the terminal keypad.\ In case of a terminal without a keypad, on the display select the *Cancel* icon ![](/user/pages/reuse/image-library/buttons/cancel-icon/nav-cancel.svg?decoding=auto\&fetchpriority=auto) If this is successful: * The screen generated by your `InputRequest` disappears from the terminal display. * The `InputRequest` returns a response. Depending on the type of input, this `InputResponse` contains: | **Type of input** | `Result` | `ConfirmedFlag` | | ---------------------------------------------------------------------------- | -------- | --------------- | | [Confirmation](/point-of-sale/shopper-engagement/shopper-input/confirmation) | Success | false | | [Signature](/point-of-sale/shopper-engagement/shopper-input/signature) | Success | false | | **Type of input** | `Result` | `ErrorCondition` | | -------------------------------------------------------------- | -------- | ---------------- | | [Menu](/point-of-sale/shopper-engagement/shopper-input/menu) | Failure | Cancel | | [Digit](/point-of-sale/shopper-engagement/shopper-input/digit) | Failure | Cancel | | [Text](/point-of-sale/shopper-engagement/shopper-input/text) | Failure | Cancel | ## See also * [Make an input request](/point-of-sale/shopper-engagement/shopper-input/select-input-request) * [Create a session](/point-of-sale/shopper-engagement/create-session) * [Cancel an in-progress transaction](/point-of-sale/basic-tapi-integration/cancel-a-transaction)