--- title: "Accessibility mode from the POS app" description: "Learn how to make the terminal read out instructions to make accessible payments for visually impaired shoppers from your POS app." url: "https://docs.adyen.com/point-of-sale/android-terminals/accessibility-mode/accessibility-from-pos" source_url: "https://docs.adyen.com/point-of-sale/android-terminals/accessibility-mode/accessibility-from-pos.md" canonical: "https://docs.adyen.com/point-of-sale/android-terminals/accessibility-mode/accessibility-from-pos" last_modified: "2025-05-27T17:16:00+02:00" language: "en" --- # Accessibility mode from the POS app Learn how to make the terminal read out instructions to make accessible payments for visually impaired shoppers from your POS app. [View source](/point-of-sale/android-terminals/accessibility-mode/accessibility-from-pos.md) You can enable accessible mode by making a payment request from your POS app. The payment terminal will then provide the shopper with audio instructions during the payment. The request needs to include the accessibility mode operation details. ## Requirements Before you begin, take into account the following requirements, limitations, and preparations. | Requirement | Description | | -------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | **Integration type** | A [Terminal API integration](/point-of-sale/design-your-integration/terminal-api) with payment terminals. | | **Hardware** | Android payment terminals. Accessibility mode is supported on the following models:- On software version 1.117 or later: AMS1, S1F2, S1F2L, S1E2L, S1U2. - On software version 1.124 or later: P630, M450, SFO1.Optional harware:- A pair of headphones that can be used with a 3.5mm audio jack (S1F2, S1F2L, S1E2L) or a USB-C jack (AMS1 and S1U2). | | **Limitations** | Accessibility mode does not support:- Tipping - Giving - Signature as a cardholder verification method - The following languages: Estonian, Latvian, Icelandic, and Lithuanian. | | **Setup steps** | Contact our [Support Team](https://ca-test.adyen.com/ca/ca/contactUs/support.shtml?form=other):- Ask them to configure the accessibility mode. - Tell them if you want to extend the default timeout for the payment screens (2 minutes) and the PIN entry screen (5 minutes). | ## How it works 1. Make a payment request with a Base64-encoded `Operation` object to enable the accessibility mode. When the terminal is in accessibility mode, the timeout period is extended to give the shopper time to listen to the audio instructions. 2. The terminal reads out the text shown on the terminal screen, and instructs the shopper on how to present their payment card. 3. The shopper presents their card to complete the payment. ## Make an accessible payment from the POS app After accessibility mode is configured, you are ready to make a payment request with a Base64-encoded `Operation` object to enable the accessibility mode. 1. Create an `Operation` JSON object with the `Operation.Type`: **Payment** and `Operation.Variant`: **EnableAccessibilityMode**: **Operation JSON object** ```json { "Operation":[ { "Type":"Payment", "Variant":"EnableAccessibilityMode" } ] } ``` 2. Encode the `Operation` JSON object to Base64. You will pass the resulting string in `SaleData.SaleToPOIData`. **Converted to a Base64-encoded string** ```raw eyJPcGVyYXRpb24iOiBbeyJUeXBlIjogIlBheW1lbnQiLCAiVmFyaWFudCI6ICJFbmFibGVBY2Nlc3NpYmlsaXR5TW9kZSJ9XX0= ``` 3. [Make a payment request](/point-of-sale/basic-tapi-integration/make-a-payment#make-a-payment), 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 **Payment**. | 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-") | **Payment** | | `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 [PaymentRequest](https://docs.adyen.com/api-explorer/terminal-api/latest/post/payment) object with: | Parameter | Description | | ------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `SaleData.SaleTransactionID` | An object with:- `TransactionID`: your reference to identify a payment. We recommend using a unique value per payment. In your Customer Area and Adyen reports, this will show as the **merchant reference** for the transaction. - `TimeStamp`: date and time of the request in [UTC format](https://en.wikipedia.org/wiki/ISO_8601#Coordinated_Universal_Time_\(UTC\)). | | `SaleData.SaleToPOIData` | The Base64-encoded `Operation` object. | | `PaymentTransaction.AmountsReq` | An object with:- `Currency`: the transaction [currency](/development-resources/currency-codes). - `RequestedAmount`: the purchase amount, with decimals. | **Payment request with accessibility mode enabled** ```json { "SaleToPOIRequest":{ "MessageHeader":{ "ProtocolVersion":"3.0", "MessageClass":"Service", "MessageCategory":"Payment", "MessageType":"Request", "SaleID":"POSSystemID12345", "ServiceID":"0207111104", "POIID":"S1E2L-324688179" }, "PaymentRequest":{ "SaleData":{ "SaleTransactionID":{ "TransactionID":"27908", "TimeStamp":"2025-05-14T10:11:03.000Z" }, "SaleToPOIData": "eyJPcGVyYXRpb24iOiBbeyJUeXBlIjogIlBheW1lbnQiLCAiVmFyaWFudCI6ICJFbmFibGVBY2Nlc3NpYmlsaXR5TW9kZSJ9XX0=" }, "PaymentTransaction":{ "AmountsReq":{ "Currency":"EUR", "RequestedAmount":10.00 } } } } } ``` The [payment response](/point-of-sale/basic-tapi-integration/make-a-payment/#payment-response) is the same as with a regular payment. The terminal exits the accessibility mode after a successful or canceled payment. ## See also * [Accessibility mode from the terminal](/point-of-sale/android-terminals/accessibility-mode/accessibility-from-terminal) * [Make a payment](/point-of-sale/basic-tapi-integration/make-a-payment)