--- title: "Use tender options" description: "Use parameters to change how a transaction is processed." url: "https://docs.adyen.com/point-of-sale/add-data/tender-options" source_url: "https://docs.adyen.com/point-of-sale/add-data/tender-options.md" canonical: "https://docs.adyen.com/point-of-sale/add-data/tender-options" last_modified: "2020-04-17T11:21:00+02:00" language: "en" --- # Use tender options Use parameters to change how a transaction is processed. [View source](/point-of-sale/add-data/tender-options.md) ##### Using our Standalone solution? With our [standalone solution](/point-of-sale/standalone), Support can configure tender options and transaction conditions for your account. Tender options are parameters that change how the [tender](/get-started-with-adyen/adyen-glossary/#tender) is processed. For example, the tender option `AskGratuity` triggers the payment terminal to ask the shopper for a tip. Tender options are passed in the `SaleToAcquirerData` field of the Terminal API request. ## Requirements Before you begin, take into account the following requirements. | Requirement | Description | | -------------------- | -------------------------------------------------------------------------------------------- | | **Integration type** | A [Terminal API](/point-of-sale/basic-tapi-integration/) integration with payment terminals. | ## Tender options The following table shows the tender options you can pass in the `SaleData.SaleToAcquirerData` field. | Name | Description | | --------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `AllowPartialAuthorisation` | Flags that a partial approval is allowed and it is possible that the authorized amount is lower than the requested amount. | | `AskGiving` | Triggers [Adyen Giving](/point-of-sale/donate), where the terminal asks if the shopper wants to donate to charity. | | `AskGratuity` | Triggers [tipping from the terminal](/point-of-sale/tipping/tipping-from-terminal), where the terminal asks if the shopper wants to tip. | | `ForcedDecline` | Forces the transaction to be declined, for example, if fraud is suspected. | | `MOTO` | Triggers [Mail Order/Telephone Order transactions](/point-of-sale/mail-and-telephone-order-moto) on the payment terminal from the POS app. MOTO transactions are [card-not-present transactions](/get-started-with-adyen/adyen-glossary/#card-not-present-cnp), where the shopper provides the merchant with the payment details by means of mail (not email), fax, or telephone. | | `ReceiptHandler` | Specifies that the POS app handles printing the receipt (or emailing the receipt). When you omit this tender option, the payment terminal must print the receipt. But if the terminal doesn't have a built-in printer, the transaction will fail. | | `SkipAIDPriority` | Skip the application identifier (AID) priority that has been set in your Customer Area. This allows a shopper to select their preferred application (payment method). | ## Specify tender options To specify a tender option: * [Make a payment request](/point-of-sale/basic-tapi-integration/make-a-payment) with a `SaleData` object that contains a `SaleToAcquirerData` field with one or more comma-separated values (without spaces) specified in one of the following formats: * Option 1: a JSON object `{"tenderOption": "option"}` converted to a Base64 encoded string.\ For example, you encode `{"tenderOption": "AskGratuity,ReceiptHandler"}` to Base64, and pass the result:\ `"SaleToAcquirerData": "eyJ0ZW5kZXJPcHRpb24iOiAiQXNrR3JhdHVpdHksUmVjZWlwdEhhbmRsZXIifQ=="` * Option 2: a `tenderOption=` key/value pair.\ For example: `"SaleToAcquirerData": "tenderOption=AskGratuity,ReceiptHandler"` The format that you use here, will also be the format of the `AdditionalResponse` that you receive. The following example shows how to pass the `AskGratuity` and `ReceiptHandler` tender options to the terminal. #### JSON ```json { "SaleToPOIRequest":{ "PaymentRequest":{ "SaleData":{ "SaleTransactionID":{ "TransactionID":"733", "TimeStamp":"2022-03-16T07:51:15.685Z" }, "SaleToAcquirerData":"tenderOption=AskGratuity,ReceiptHandler" }, "PaymentTransaction":{ "AmountsReq":{ "Currency":"EUR", "RequestedAmount":155.75 } } }, "MessageHeader":{ "ProtocolVersion":"3.0", "MessageClass":"Service", "MessageCategory":"Payment", "MessageType":"Request", "ServiceID":"0110123015", "SaleID":"POSSystemID12345", "POIID":"M400-260193322" } } } ``` #### Java ```java String serviceID = "YOUR_UNIQUE_ATTEMPT_ID"; String saleID = "YOUR_CASH_REGISTER_ID"; String POIID = "YOUR_TERMINAL_ID"; String transactionID = "YOUR_UNIQUE_TRANSACTION_ID"; SaleToPOIRequest saleToPOIRequest = new SaleToPOIRequest(); MessageHeader messageHeader = new MessageHeader(); messageHeader.setProtocolVersion("3.0"); messageHeader.setMessageClass( MessageClassType.SERVICE ); messageHeader.setMessageCategory( MessageCategoryType.PAYMENT ); messageHeader.setMessageType( MessageType.REQUEST ); messageHeader.setServiceID(serviceID); messageHeader.setSaleID(saleID); messageHeader.setPOIID(POIID); saleToPOIRequest.setMessageHeader(messageHeader); PaymentRequest paymentRequest = new PaymentRequest(); SaleData saleData = new SaleData(); TransactionIdentification saleTransactionID = new TransactionIdentification(); saleTransactionID.setTransactionID(transactionID); saleTransactionID.setTimeStamp(DatatypeFactory.newInstance().newXMLGregorianCalendar(new GregorianCalendar())); saleData.setSaleTransactionID(saleTransactionID); saleData.setSaleToAcquirerData("tenderOption=AskGratuity,ReceiptHandler"); paymentRequest.setSaleData(saleData); PaymentTransaction paymentTransaction = new PaymentTransaction(); AmountsReq amountsReq = new AmountsReq(); amountsReq.setCurrency("EUR"); amountsReq.setRequestedAmount( BigDecimal.valueOf(155.75) ); paymentTransaction.setAmountsReq(amountsReq); paymentRequest.setPaymentTransaction(paymentTransaction); saleToPOIRequest.setPaymentRequest(paymentRequest); terminalAPIRequest.setSaleToPOIRequest(saleToPOIRequest); ``` The response shows the shopper added a tip. ```json { "SaleToPOIResponse": { "MessageHeader": {...}, "PaymentResponse": { "POIData": { "POIReconciliationID": "1000", "POITransactionID": { "TimeStamp": "2022-03-16T07:51:17.000Z", "TransactionID": "u6W7001525183770000.QFQTPCQ8HXSKGK82" } }, "PaymentReceipt": [...], "PaymentResult": { "AmountsResp": { "AuthorizedAmount": 163.53, "Currency": "EUR", "TipAmount": 7.78 }, "AuthenticationMethod": [ "OnlinePIN" ], "OnlineFlag": true, "PaymentAcquirerData": {...}, "PaymentInstrumentData": {...}, "PaymentInstrumentType": "Card" } }, "Response": { "AdditionalResponse": "...posadditionalamounts.originalAmountValue=15575...gratuityAmount=778&posAmountGratuityValue=778...&posOriginalAmountValue=15575...posAuthAmountValue=16353&posadditionalamounts.gratuityAmount=778", "Result": "Success" }, "SaleData": { "SaleTransactionID": { "TimeStamp": "2022-03-16T07:51:15.685Z", "TransactionID": "733" } } } } } ``` ## Combining tender options and other data elements When you pass tender options in the `SaleToAcquirerData` field, you can also add other information in that field. For example, you can add [application info](/point-of-sale/basic-tapi-integration/pass-application-information), or add data for [shopper recognition](/point-of-sale/shopper-recognition). To combine tender options and other data elements, see [Add information to a payment](/point-of-sale/add-data). ## Other ways to change transaction processing Apart from passing tender options, there are other ways to influence the transaction processing. You can: * Pass a transaction condition in your payment request. This forces the payment terminal to accept a specific card entry method or payment method for that payment. This is used for example with [Manual Keyed Entry (MKE) payments](/point-of-sale/enter-payment-manually) and [payments in Brazil](/point-of-sale/installments/brazil-installments). * Configure default tender options and transaction conditions. The terminal will then use these for every payment. Ask our [Support Team](https://ca-test.adyen.com/ca/ca/contactUs/support.shtml?form=other) for help. ## See also * [Manually entering payments (MKE)](/point-of-sale/enter-payment-manually) * [Add information to a payment](/point-of-sale/add-data) * [Handle responses](/point-of-sale/error-scenarios)