# Pass application information

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

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.

## Application information fields

Include the following:

• External platform: if you use a platform from a technology partner to initiate Adyen payment requests, these fields give us more information about it.

Field Description Example
applicationInfo.externalPlatform.name The company name of the platform you use. NewStore
applicationInfo.externalPlatform.integrator The name of the company that built the integration with the platform. NewStore
applicationInfo.externalPlatform.version The software version of the platform product or solution you use. 1.0
• Merchant application: the application built by Adyen or a technology partner that you use to connect to Adyen. For example, a plugin or POS system software. These fields aren't required if you develop your own integration to connect to Adyen.

Field Description Example
applicationInfo.merchantApplication.name The name of the application. NewStore Associate App
applicationInfo.merchantApplication.version The software version of the application. 1.23.0 (3)
• Merchant device: the operating system of the device (for example, a tablet) that runs the point-of-sale software that you use for sending requests to your payment terminals. These fields are only required for in-person payments.
Field Description Example
applicationInfo.merchantDevice.os The name of the operating system. iOS
applicationInfo.merchantDevice.osVersion The software version of the operating system. 15.5

### Field value requirements

The values you send in the application info fields can:

• be between up to 40 characters in length.
• contain letters, digits, dashes, underscores, and spaces.
The formatting of the values must be the same in every payment request.
For example, if the externalPlatform.name is NetSuite, you can't sometimes specify that value as Net Suite or NETSUITE . You have to choose one format and stick to it.

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).

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:

{
"applicationInfo": {
"externalPlatform": {
"name": "NewStore",
"integrator": "NewStore",
"version": "1.0"
},
"merchantApplication": {
"name": "NewStore Associate App",
"version": "1.23.0 (3)"
},
"merchantDevice": {
"os": "iOS",
"osVersion": "15.5"
}
}
}
2. Encode the JSON object to Base64.

ewogICAiYXBwbGljYXRpb25JbmZvIjp7CiAgICAgICJleHRlcm5hbFBsYXRmb3JtIjp7CiAgICAgICAgICJuYW1lIjoiTmV3U3RvcmUiLAogICAgICAgICAiaW50ZWdyYXRvciI6Ik5ld1N0b3JlIiwKICAgICAgICAgInZlcnNpb24iOiIxLjAiCiAgICAgIH0sCiAgICAgICJtZXJjaGFudEFwcGxpY2F0aW9uIjp7CiAgICAgICAgICJuYW1lIjoiTmV3U3RvcmUgQXNzb2NpYXRlIEFwcCIsCiAgICAgICAgICJ2ZXJzaW9uIjoiMS4yMy4wICgzKSIKICAgICAgfSwKICAgICAgIm1lcmNoYW50RGV2aWNlIjp7CiAgICAgICAgICJvcyI6ImlPUyIsCiAgICAgICAgICJvc1ZlcnNpb24iOiIxNS41IgogICAgICB9CiAgIH0KfQ==
3. Make a payment request with:

• SaleData.SaletoAcquirerData: The Base64-encoded JSON object.
{
"SaleToPOIRequest": {
"PaymentRequest":{
"SaleData":{
"SaleToAcquirerData": "ewogICAiYXBwbGljYXRpb25JbmZvIjp7CiAgICAgICJleHRlcm5hbFBsYXRmb3JtIjp7CiAgICAgICAgICJuYW1lIjoiTmV3U3RvcmUiLAogICAgICAgICAiaW50ZWdyYXRvciI6Ik5ld1N0b3JlIiwKICAgICAgICAgInZlcnNpb24iOiIxLjAiCiAgICAgIH0sCiAgICAgICJtZXJjaGFudEFwcGxpY2F0aW9uIjp7CiAgICAgICAgICJuYW1lIjoiTmV3U3RvcmUgQXNzb2NpYXRlIEFwcCIsCiAgICAgICAgICJ2ZXJzaW9uIjoiMS4yMy4wICgzKSIKICAgICAgfSwKICAgICAgIm1lcmNoYW50RGV2aWNlIjp7CiAgICAgICAgICJvcyI6ImlPUyIsCiAgICAgICAgICJvc1ZlcnNpb24iOiIxNS41IgogICAgICB9CiAgIH0KfQ==",
"SaleTransactionID": {
"TransactionID": "27909",
"TimeStamp": "2020-04-16T11:53:52+00:00"
}
},
"PaymentTransaction":{
"AmountsReq":{
"Currency":"EUR",
"RequestedAmount":10.99
}
}
},
"ProtocolVersion":"3.0",
"MessageClass":"Service",
"MessageCategory":"Payment",
"MessageType":"Request",
"ServiceID":"1113162454",
"SaleID":"POSSystemID12346",
"POIID":"V400m-346403161"
}
}
}
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();

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("ewogICAiYXBwbGljYXRpb25JbmZvIjp7CiAgICAgICJleHRlcm5hbFBsYXRmb3JtIjp7CiAgICAgICAgICJuYW1lIjoiTmV3U3RvcmUiLAogICAgICAgICAiaW50ZWdyYXRvciI6Ik5ld1N0b3JlIiwKICAgICAgICAgInZlcnNpb24iOiIxLjAiCiAgICAgIH0sCiAgICAgICJtZXJjaGFudEFwcGxpY2F0aW9uIjp7CiAgICAgICAgICJuYW1lIjoiTmV3U3RvcmUgQXNzb2NpYXRlIEFwcCIsCiAgICAgICAgICJ2ZXJzaW9uIjoiMS4yMy4wICgzKSIKICAgICAgfSwKICAgICAgIm1lcmNoYW50RGV2aWNlIjp7CiAgICAgICAgICJvcyI6ImlPUyIsCiAgICAgICAgICJvc1ZlcnNpb24iOiIxNS41IgogICAgICB9CiAgIH0KfQ==");
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.

{
"SaleToPOIResponse": {
"PaymentResponse": {
"POIData": {...},
"SaleData": {...},
"PaymentReceipt": [...],
"PaymentResult": {
"OnlineFlag": true,
"PaymentAcquirerData": {...},
"PaymentInstrumentData": {
"CardData": {...}
},
"PaymentInstrumentType": "Card"
},
"AmountsResp": {
"AuthorizedAmount": 10.99,
"Currency": "EUR"
},
"CustomerLanguage": "nl"
},
"Response": {
"Result": "Success",
}
},
}
4. Decode the Base64 string in the AdditionalResponse field of the payment response.
Apart from application info, you can also add other information in the SaleToAcquirerData field. For example, you can add tender options or metadata.