---
title: "Pass application information"
description: "Provide platform, merchant application, and merchant device details to the Adyen Payments Platform."
url: "https://docs.adyen.com/point-of-sale/basic-tapi-integration/pass-application-information"
source_url: "https://docs.adyen.com/point-of-sale/basic-tapi-integration/pass-application-information.md"
canonical: "https://docs.adyen.com/point-of-sale/basic-tapi-integration/pass-application-information"
last_modified: "2021-08-04T11:53:00+02:00"
language: "en"
---

# Pass application information

Provide platform, merchant application, and merchant device details to the Adyen Payments Platform.

[View source](/point-of-sale/basic-tapi-integration/pass-application-information.md)

Application information identifies the software that you use for making payment requests to the Adyen payments platform. Add application info to your payment requests so that we can analyze and troubleshoot payments more efficiently and provide better support.

## Requirements

If you have built a [Terminal API integration](/point-of-sale/get-started), there are no additional requirements, limitations, or preparations.

## Application information fields

Include these fields in the `applicationInfo` object:

| Field                         | Description                                                                                                         | Required                                                                                    | Example                 |
| ----------------------------- | ------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------- | ----------------------- |
| `externalPlatform.name`       | Your company name or the name of your platform.                                                                     | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | **Best Store Commerce** |
| `externalPlatform.version`    | The software version of the platform.                                                                               | If your platform has versions.                                                              | **1.3**                 |
| `externalPlatform.integrator` | Your company name if you built the POS application, or the name of the service partner that built your integration. | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | **AAA Systems**         |
| `merchantApplication.name`    | The name of the POS application or product being used.                                                              | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | **Best Instore**        |
| `merchantApplication.version` | The software version of the application.                                                                            | If your application has versions.                                                           | **2.13.05**             |
| `merchantDevice.os`           | The operating system of the device that runs the POS application.                                                   | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | **iOS**                 |
| `merchantDevice.osVersion`    | The software version of the operating system.                                                                       | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | **16.3**                |

### Field value requirements

The values you send in the application info fields can:

* Be between up to 40 characters in length.
* Start with a number or letter.
* Contain letters, digits, dashes, underscores, and spaces.

The formatting of the values must be the same in every request.\
For example, if the `externalPlatform.name` value is **adVantage\_Commerce\_Suite**, you cannot sometimes use a different value like **adVantage\_CommerceSuite** or **ADVANTAGECOMMERCESUITE**. You must choose one format and use it for every request.

## Add application info to your request

To add application info to your payment request, you pass data elements in the `SaleToAcquirerData` field. There are two ways to do that:

* **Option 1**: as a JSON object converted to a Base64-encoded string.
* **Option 2**: as form-encoded key-value pairs (using **&** as a separator).

### Tab: Option 1: Base64-encoded JSON

This example shows how to add application info to your payment request as a JSON object converted to a Base64-encoded string:

1. Create a JSON object with the data elements you want to pass. For example:

   **JSON object**

   ```json
   {
       "applicationInfo": {
           "externalPlatform": {
               "name": "Best Store Commerce",
               "version": "1.3",
               "integrator": "AAA Systems"
           },
           "merchantApplication": {
               "name": "Best Instore",
               "version": "2.13.05"
           },
           "merchantDevice": {
               "os": "iOS",
               "osVersion": "16.3"
           }
       }
   }
   ```

2. Encode the JSON object to Base64.

   ```raw
    
   ```

3. Make a Terminal API [payment request](/point-of-sale/basic-tapi-integration/make-a-payment) with:

   * [SaleToAcquirerData](https://docs.adyen.com/api-explorer/terminal-api/latest/post/payment#request-SaleData-SaleToAcquirerData): The Base64-encoded JSON object.

   #### JSON

   ```json
   {
       "SaleToPOIRequest": {
           "PaymentRequest":{
               "SaleData":{
                   "SaleToAcquirerData": " ",
                   "SaleTransactionID": {
                       "TransactionID": "27909",
                       "TimeStamp": "2020-04-16T11:53:52+00:00"
                   }
               },
               "PaymentTransaction":{
                   "AmountsReq":{
                       "Currency":"EUR",
                       "RequestedAmount":10.99
                   }
               }
           },
           "MessageHeader":{
               "ProtocolVersion":"3.0",
               "MessageClass":"Service",
               "MessageCategory":"Payment",
               "MessageType":"Request",
               "ServiceID":"1113162454",
               "SaleID":"POSSystemID12346",
               "POIID":"V400m-346403161"
           }
       }
   }
   ```

   #### Java

   ```java
   String POIID = "YOUR_TERMINAL_ID";
   String serviceID = "YOUR_UNIQUE_ATTEMPT_ID";
   String saleID = "YOUR_CASH_REGISTER_ID";
   String transactionID = "YOUR_UNIQUE_TRANSACTION_ID";

   SaleToPOIRequest saleToPOIRequest = new SaleToPOIRequest();
   MessageHeader messageHeader = new MessageHeader();
   messageHeader.setPOIID(POIID);
   messageHeader.setMessageClass( MessageClassType.SERVICE );
   messageHeader.setMessageType( MessageType.REQUEST );
   messageHeader.setProtocolVersion("3.0");
   messageHeader.setServiceID(serviceID);
   messageHeader.setSaleID(saleID);
   messageHeader.setMessageCategory( MessageCategoryType.PAYMENT );
   saleToPOIRequest.setMessageHeader(messageHeader);

   PaymentRequest paymentRequest = new PaymentRequest();
   PaymentTransaction paymentTransaction = new PaymentTransaction();
   AmountsReq amountsReq = new AmountsReq();
   amountsReq.setRequestedAmount( BigDecimal.valueOf(10.99) );
   amountsReq.setCurrency("EUR");
   paymentTransaction.setAmountsReq(amountsReq);

   TransactionConditions transactionConditions = new TransactionConditions();
   paymentTransaction.setTransactionConditions(transactionConditions);
   paymentRequest.setPaymentTransaction(paymentTransaction);

   SaleData saleData = new SaleData();
   saleData.setSaleToAcquirerData(" ");
   saleData.setTokenRequestedType( TokenRequestedType.CUSTOMER );
   TransactionIdentification saleTransactionID = new TransactionIdentification();
   saleTransactionID.setTransactionID(transactionID);
   saleTransactionID.setTimeStamp(DatatypeFactory.newInstance().newXMLGregorianCalendar(new GregorianCalendar()));
   saleData.setSaleTransactionID(saleTransactionID);
   paymentRequest.setSaleData(saleData);
   saleToPOIRequest.setPaymentRequest(paymentRequest);
   terminalAPIRequest.setSaleToPOIRequest(saleToPOIRequest);
   ```

   Note that the payment response has the `AdditionalResponse` in the same format as the `SaleToAcquirerData`, a Base64-encoded JSON object.

   **Response with Base64-encoded AdditionalResponse**

   ```json
   {
       "SaleToPOIResponse": {
           "PaymentResponse": {
               "POIData": {...},
               "SaleData": {...},
               "PaymentReceipt": [...],
               "PaymentResult": {
                   "OnlineFlag": true,
                   "PaymentAcquirerData": {...},
                   "PaymentInstrumentData": {
                       "CardData": {...}
                       },
                       "PaymentInstrumentType": "Card"
                   },
                   "AmountsResp": {
                       "AuthorizedAmount": 10.99,
                       "Currency": "EUR"
                   },
                   "CustomerLanguage": "nl"
               },
               "Response": {
                   "Result": "Success",
                   "AdditionalResponse": " "
               }
           },
           "MessageHeader": {...}
       }
   }
   ```

4. Decode the Base64 string in the `AdditionalResponse` field of the payment response.\
   This contains data resulting from the processing of the payment.

### Tab: Option 2: Key-value pairs

This example shows how to add application info to your payment request as form-encoded key-value pairs.

1. Create a string with the data elements you want to pass in key-value pairs, using **&** as a separator between the pairs.

   In this example, we use these data elements:

   `applicationInfo.externalPlatform.name=Best Store Commerce`\
   `applicationInfo.externalPlatform.version=1.3`\
   `applicationInfo.externalPlatform.integrator=AAA Systems`\
   `applicationInfo.merchantApplication.name=Best Instore`\
   `applicationInfo.merchantApplication.version=2.13.05`\
   `applicationInfo.merchantDevice.os=iOS`\
   `applicationInfo.merchantDevice.osVersion=16.3`

   So the string looks like this:

   ```raw
   applicationInfo.externalPlatform.name=Best Store Commerce&applicationInfo.externalPlatform.version=1.3&applicationInfo.externalPlatform.integrator=AAA Systems&applicationInfo.merchantApplication.name=Best Instore&applicationInfo.merchantApplication.version=2.13.05&applicationInfo.merchantDevice.os=iOS&applicationInfo.merchantDevice.osVersion=16.3
   ```

2. Make a Terminal API [payment request](/point-of-sale/basic-tapi-integration/make-a-payment) with:

   * [SaleToAcquirerData](https://docs.adyen.com/api-explorer/terminal-api/latest/post/payment#request-SaleData-SaleToAcquirerData): Your string of form-encoded key-value pairs.

   #### JSON

   ```json
   {
       "SaleToPOIRequest": {
           "PaymentRequest":{
               "SaleData":{
                   "SaleToAcquirerData": "applicationInfo.externalPlatform.name=Best Store Commerce&applicationInfo.externalPlatform.version=1.3&applicationInfo.externalPlatform.integrator=AAA Systems&applicationInfo.merchantApplication.name=Best Instore&applicationInfo.merchantApplication.version=2.13.05&applicationInfo.merchantDevice.os=iOS&applicationInfo.merchantDevice.osVersion=16.3",
                   "SaleTransactionID": {
                       "TransactionID": "27908",
                       "TimeStamp": "2020-04-08T12:08:52+00:00"
                   }
               },
               "PaymentTransaction":{
                   "AmountsReq":{
                       "Currency":"EUR",
                       "RequestedAmount":10.99
                   }
               }
           },
           "MessageHeader":{
               "ProtocolVersion":"3.0",
               "MessageClass":"Service",
               "MessageCategory":"Payment",
               "MessageType":"Request",
               "ServiceID":"1113162454",
               "SaleID":"POSSystemID12346",
               "POIID":"V400m-346403161"
           }
       }
   }
   ```

   #### Java

   ```java
   String POIID = "YOUR_TERMINAL_ID";
   String serviceID = "YOUR_UNIQUE_ATTEMPT_ID";
   String saleID = "YOUR_CASH_REGISTER_ID";
   String transactionID = "YOUR_UNIQUE_TRANSACTION_ID";

   SaleToPOIRequest saleToPOIRequest = new SaleToPOIRequest();
   MessageHeader messageHeader = new MessageHeader();
   messageHeader.setPOIID(POIID);
   messageHeader.setMessageClass( MessageClassType.SERVICE );
   messageHeader.setMessageType( MessageType.REQUEST );
   messageHeader.setProtocolVersion("3.0");
   messageHeader.setServiceID(serviceID);
   messageHeader.setSaleID(saleID);
   messageHeader.setMessageCategory( MessageCategoryType.PAYMENT );
   saleToPOIRequest.setMessageHeader(messageHeader);

   PaymentRequest paymentRequest = new PaymentRequest();
   PaymentTransaction paymentTransaction = new PaymentTransaction();
   AmountsReq amountsReq = new AmountsReq();
   amountsReq.setRequestedAmount( BigDecimal.valueOf(10.99) );
   amountsReq.setCurrency("EUR");
   paymentTransaction.setAmountsReq(amountsReq);

   TransactionConditions transactionConditions = new TransactionConditions();
   paymentTransaction.setTransactionConditions(transactionConditions);
   paymentRequest.setPaymentTransaction(paymentTransaction);

   SaleData saleData = new SaleData();
   saleData.setSaleToAcquirerData("applicationInfo.externalPlatform.name=Best Store Commerce&applicationInfo.externalPlatform.version=1.3&applicationInfo.externalPlatform.integrator=AAA Systems&applicationInfo.merchantApplication.name=Best Instore&applicationInfo.merchantApplication.version=2.13.05&applicationInfo.merchantDevice.os=iOS&applicationInfo.merchantDevice.osVersion=16.3");
   saleData.setTokenRequestedType( TokenRequestedType.CUSTOMER );
   TransactionIdentification saleTransactionID = new TransactionIdentification();
   saleTransactionID.setTransactionID(transactionID);
   saleTransactionID.setTimeStamp(DatatypeFactory.newInstance().newXMLGregorianCalendar(new GregorianCalendar()));
   saleData.setSaleTransactionID(saleTransactionID);
   paymentRequest.setSaleData(saleData);
   saleToPOIRequest.setPaymentRequest(paymentRequest);
   terminalAPIRequest.setSaleToPOIRequest(saleToPOIRequest);
   ```

   Note that the payment response has the `AdditionalResponse` in the same format as the `SaleToAcquirerData`, form-encoded key-value pairs.

   **Response with form-encoded AdditionalResponse**

   ```json
   {
       "SaleToPOIResponse": {
           "PaymentResponse": {
               "POIData": {...},
               "SaleData": {...},
               "PaymentReceipt": [...],
               "PaymentResult": {
                   "OnlineFlag": true,
                   "PaymentAcquirerData": {...},
                   "PaymentInstrumentData": {
                       "CardData": {...},
                       "PaymentInstrumentType": "Card"
                   },
                   "AmountsResp": {
                       "AuthorizedAmount": 10.99,
                       "Currency": "EUR"
                   },
                   "CustomerLanguage": "nl"
               },
               "Response": {
                   "Result": "Success",
                   "AdditionalResponse": "tid=46403161&AID=A000000004101001&transactionType=GOODS_SERVICES&transactionLanguage=nl&backendGiftcardIndicator=false&posadditionalamounts.originalAmountValue=1099&expiryYear=2028&acquirerAccountCode=TestPmmAcquirerAccount&alias=M469509594859802&posAmountGratuityValue=0&giftcardIndicator=false&authorisedAmountValue=1099&pspReference=NC6HT9CRT65ZGN82&paymentMethodVariant=mc&refusalReasonRaw=APPROVED&authorisationMid=1000&applicationPreferredName=mc%20nl&acquirerCode=TestPmmAcquirer&store=StoreOne&txtime=12%3a01%3a38&iso8601TxDate=2020-04-16T10%3a01%3a38.0000000%2b0000&cardType=mc&posOriginalAmountValue=1099&offline=false&aliasType=Default&txdate=16-04-2020&paymentMethod=mc&cvcResult=0%20Unknown&authorisedAmountCurrency=EUR&startYear=2017&tc=937814089A435053&avsResult=0%20Unknown&cardIssueNumber=83&mid=1000&merchantReference=27910&transactionReferenceNumber=8815658961765250&expiryMonth=02&cardSummary=9999&posadditionalamounts.originalAmountCurrency=EUR&posAuthAmountCurrency=EUR&cardHolderVerificationMethodResults=1F0302&authCode=123456&cardIssuerCountryId=056&adjustAuthorisationData=BQABAQAxwj0UoZiGf8xhiQCIjFMiDxFxy6AYz6Rt%2bdEArIE2u%2fb6vdNfXkbmz3VzJ3Fx8QMF4P0fKuqcn5JUq6AHuMks7irgRyOOHMWxwixtds94L7Rzrg4gJyiGp22QA7U8aBDQOKQi1kloMBeJXuyuIgNGoCflQISnEfXMsofFOKCTXFpZ4CB5J0CvA69kGxDbcLbkJgFpXOImOV5iJ6aIfU%2boCTA3NdWbMdN2yx8BfqetsSncosykRNBBFmgs3O5OSl22I17r0o2JanwEyGpCOozo6Sr3aHPjQGnyAOwKikAvk64rrJrUQCSLT%2fHTp9QHqF5DK111k5uKhX3KdqZCE70UELh%2fYVKOpbw5fq0txwAVrSYAAHWk9o00GZbE9T%2fRK3Mz3R8xkcLCz2MjG867dnfF1K0yNIc5F1q%2fvhZ8Rt60sDEE61eTUENAZ2rU31tTrWb0cd3sREnBF%2beuDL6yEN5NyuIWkGBTT4bjg7E5OkkuTTw%2bKU5MCSxOjBC8XiMuh7NTMQ8qfZtw%2fCVneovIDtUKKJTsex9dq4OD1EQAwhjYAwKD6GlV9ir05HSrZh2Pv7Cf2Ygxz5rwHr0cKnBJ6HNR5L89zKMtOT4KHNWQrvdvWDXvzbStPjnQs5pM1U28CP0vfIZBErjz21vsRAKYuQIf3lxSKrIDo92wdCNh0Y%2fJccX4BQe7XYrOWgyRM7AM9PQ24UU0id5SHY0PNuU3g1tCXxX%2fA7igYFHveu0Gdz6aMjjIjzvVU74abtEHq%2b0ZTf%2bFR14%2bFABiwoDvTWrWAhI9ZF5kikAZCNzGWHRA1kezO0vQ8d55B4OEvw%3d%3d&posAmountCashbackValue=0&posEntryMode=CLESS_CHIP&startMonth=01&fundingSource=CREDIT&issuerCountry=BE&cardScheme=mc&cardBin=541333&posAuthAmountValue=1099"
               }
           },
           "MessageHeader": {...}
       }
   }
   ```

The format of the `SaleToAcquirerData`, Base64-encoded or key-value pairs, determines the format of the `AdditionalResponse` that you receive. To always receive the `AdditionalResponse` in one of those formats, contact our [Support Team](https://ca-test.adyen.com/ca/ca/contactUs/support.shtml?form=other).

## Combining application info and other data elements

Apart from application info, you can also add other information in the `SaleToAcquirerData` field. For example, you can add [tender options](/point-of-sale/add-data/tender-options) or [metadata](/point-of-sale/add-data).

To combine application info and other data elements, see [Add information to a payment](/point-of-sale/add-data).

## See also

* [Add information to a payment](/point-of-sale/add-data)
* [Pass tender options](/point-of-sale/add-data/tender-options)
