---
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-06-01T15:33:14+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/5/8/8/4/9/58849deb729ef765fb92c34a2b367b9ae58a5598-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)
