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 these fields in the applicationInfo
object:
Field | Description | Required | Example |
---|---|---|---|
externalPlatform.name |
Your company name or the name of your platform. | ![]() |
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. | ![]() |
AAA Systems |
merchantApplication.name |
The name of the POS application or product being used. | ![]() |
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. | ![]() |
iOS |
merchantDevice.osVersion |
The software version of the operating system. | ![]() |
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
is Best Store Commerce, you can't sometimes specify that value as BestStoreCommerce or BESTSTORECOMMERCE. You must choose one format and stick to it.
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).
This example shows how to add application info to your payment request as a JSON object converted to a Base64-encoded string:
-
Create a JSON object with the data elements you want to pass. For example:
{ "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" } } }
-
Encode the JSON object to Base64.
ewogICAgImFwcGxpY2F0aW9uSW5mbyI6ewogICAgICAgICJleHRlcm5hbFBsYXRmb3JtIjp7CiAgICAgICAgICAgICJuYW1lIjoiQmVzdCBTdG9yZSBDb21tZXJjZSIsCiAgICAgICAgICAgICJ2ZXJzaW9uIjoiMS4zIiwKICAgICAgICAgICAgImludGVncmF0b3IiOiJBQUEgU3lzdGVtcyIKICAgICAgICB9LAogICAgICAgICJtZXJjaGFudEFwcGxpY2F0aW9uIjp7CiAgICAgICAgICAgICJuYW1lIjoiQmVzdCBJbnN0b3JlIiwKICAgICAgICAgICAgInZlcnNpb24iOiIyLjEzLjA1IgogICAgICAgIH0sCiAgICAgICAgIm1lcmNoYW50RGV2aWNlIjp7CiAgICAgICAgICAgICJvcyI6ImlPUyIsCiAgICAgICAgICAgICJvc1ZlcnNpb24iOiIxNi4zIgogICAgICAgIH0KICAgIH0KfQ==
-
Make a payment request with:
SaleData.SaletoAcquirerData
: The Base64-encoded JSON object.
{ "SaleToPOIRequest": { "PaymentRequest":{ "SaleData":{ "SaleToAcquirerData": "ewogICAgImFwcGxpY2F0aW9uSW5mbyI6ewogICAgICAgICJleHRlcm5hbFBsYXRmb3JtIjp7CiAgICAgICAgICAgICJuYW1lIjoiQmVzdCBTdG9yZSBDb21tZXJjZSIsCiAgICAgICAgICAgICJ2ZXJzaW9uIjoiMS4zIiwKICAgICAgICAgICAgImludGVncmF0b3IiOiJBQUEgU3lzdGVtcyIKICAgICAgICB9LAogICAgICAgICJtZXJjaGFudEFwcGxpY2F0aW9uIjp7CiAgICAgICAgICAgICJuYW1lIjoiQmVzdCBJbnN0b3JlIiwKICAgICAgICAgICAgInZlcnNpb24iOiIyLjEzLjA1IgogICAgICAgIH0sCiAgICAgICAgIm1lcmNoYW50RGV2aWNlIjp7CiAgICAgICAgICAgICJvcyI6ImlPUyIsCiAgICAgICAgICAgICJvc1ZlcnNpb24iOiIxNi4zIgogICAgICAgIH0KICAgIH0KfQ==", "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" } } }
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("ewogICAgImFwcGxpY2F0aW9uSW5mbyI6ewogICAgICAgICJleHRlcm5hbFBsYXRmb3JtIjp7CiAgICAgICAgICAgICJuYW1lIjoiQmVzdCBTdG9yZSBDb21tZXJjZSIsCiAgICAgICAgICAgICJ2ZXJzaW9uIjoiMS4zIiwKICAgICAgICAgICAgImludGVncmF0b3IiOiJBQUEgU3lzdGVtcyIKICAgICAgICB9LAogICAgICAgICJtZXJjaGFudEFwcGxpY2F0aW9uIjp7CiAgICAgICAgICAgICJuYW1lIjoiQmVzdCBJbnN0b3JlIiwKICAgICAgICAgICAgInZlcnNpb24iOiIyLjEzLjA1IgogICAgICAgIH0sCiAgICAgICAgIm1lcmNoYW50RGV2aWNlIjp7CiAgICAgICAgICAgICJvcyI6ImlPUyIsCiAgICAgICAgICAgICJvc1ZlcnNpb24iOiIxNi4zIgogICAgICAgIH0KICAgIH0KfQ=="); 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 theSaleToAcquirerData
, 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", "AdditionalResponse": "eyAidGlkIjogIjQ2NDAzMTYxIiwgIkFJRCI6ICJBMDAwMDAwMDA0MTAxMDAxIiwgInRyYW5zYWN0aW9uVHlwZSI6ICJHT09EU19TRVJWSUNFUyIsICJ0cmFuc2FjdGlvbkxhbmd1YWdlIjogIm5sIiwgImJhY2tlbmRHaWZ0Y2FyZEluZGljYXRvciI6ICJmYWxzZSIsICJwb3NhZGRpdGlvbmFsYW1vdW50cy5vcmlnaW5hbEFtb3VudFZhbHVlIjogIjEwOTkiLCAiZXhwaXJ5WWVhciI6ICIyMDI4IiwgImFjcXVpcmVyQWNjb3VudENvZGUiOiAiVGVzdFBtbUFjcXVpcmVyQWNjb3VudCIsICJhbGlhcyI6ICJNNDY5NTA5NTk0ODU5ODAyIiwgInBvc0Ftb3VudEdyYXR1aXR5VmFsdWUiOiAiMCIsICJnaWZ0Y2FyZEluZGljYXRvciI6ICJmYWxzZSIsICJhdXRob3Jpc2VkQW1vdW50VmFsdWUiOiAiMTA5OSIsICJwc3BSZWZlcmVuY2UiOiAiODUzNTg3MDMwODM0OTE3OCIsICJwYXltZW50TWV0aG9kVmFyaWFudCI6ICJtYyIsICJyZWZ1c2FsUmVhc29uUmF3IjogIkFQUFJPVkVEIiwgImF1dGhvcmlzYXRpb25NaWQiOiAiMTAwMCIsICJhcHBsaWNhdGlvblByZWZlcnJlZE5hbWUiOiAibWMgbmwiLCAiYWNxdWlyZXJDb2RlIjogIlRlc3RQbW1BY3F1aXJlciIsICJzdG9yZSI6ICJTdG9yZU9uZSIsICJ0eHRpbWUiOiAiMTE6NTM6NDkiLCAiaXNvODYwMVR4RGF0ZSI6ICIyMDIwLTA0LTE2VDA5OjUzOjQ5LjAwMDAwMDArMDAwMCIsICJjYXJkVHlwZSI6ICJtYyIsICJwb3NPcmlnaW5hbEFtb3VudFZhbHVlIjogIjEwOTkiLCAib2ZmbGluZSI6ICJmYWxzZSIsICJhbGlhc1R5cGUiOiAiRGVmYXVsdCIsICJ0eGRhdGUiOiAiMTYtMDQtMjAyMCIsICJwYXltZW50TWV0aG9kIjogIm1jIiwgImN2Y1Jlc3VsdCI6ICIwIFVua25vd24iLCAiYXV0aG9yaXNlZEFtb3VudEN1cnJlbmN5IjogIkVVUiIsICJzdGFydFllYXIiOiAiMjAxNyIsICJ0YyI6ICJFNEM3RUFEREFDMzgzNEVEIiwgImF2c1Jlc3VsdCI6ICIwIFVua25vd24iLCAiY2FyZElzc3VlTnVtYmVyIjogIjgzIiwgIm1pZCI6ICIxMDAwIiwgIm1lcmNoYW50UmVmZXJlbmNlIjogIjI3OTA5IiwgInRyYW5zYWN0aW9uUmVmZXJlbmNlTnVtYmVyIjogIjg1MzU4NzAzMDgzNDkxNzgiLCAiZXhwaXJ5TW9udGgiOiAiMDIiLCAiY2FyZFN1bW1hcnkiOiAiOTk5OSIsICJwb3NhZGRpdGlvbmFsYW1vdW50cy5vcmlnaW5hbEFtb3VudEN1cnJlbmN5IjogIkVVUiIsICJwb3NBdXRoQW1vdW50Q3VycmVuY3kiOiAiRVVSIiwgImNhcmRIb2xkZXJWZXJpZmljYXRpb25NZXRob2RSZXN1bHRzIjogIjFGMDMwMiIsICJhdXRoQ29kZSI6ICIxMjM0NTYiLCAiY2FyZElzc3VlckNvdW50cnlJZCI6ICIwNTYiLCAiYWRqdXN0QXV0aG9yaXNhdGlvbkRhdGEiOiAiQlFBQkFRQVdjckx0ZE1qSFRDam1WVzQzY3dWQitOSWN2dU54aGpKTSt1NlA3YXZiUm1ITzY4cnVzZER3eGFYRnhjMzBsQ1YwRnBlcGhlK0VSV3o3NUx1YWJaRVBXYTduYkNqVDNSS2VJTDYxa0VOb1B0VkdRUGtmSlhKOHpNTUZCWEw2cmNzNlFybU5uTjdcL2JXa3NrT0NBNUpTRFBQZ1NocVhIWHhPQ1wvWFJNRGNxNUZtUVFNNUtkZlpiOXVFMXdJOWJ4RHdWQTgxVmcrRm82Z3dKdnMwRUoxK3BzN0FTOHV5eTNpenFUY3E1aFJ5c1pyaEwydVRZNk9udlduMDNKYWdhaTB3Q2hFRmpDamF1cFBBbitPU3hGV1JxbTErQVRCc3hBd2M0Z29ISFRYaFwvYUk3XC9hbVJuMUlLdDlFaUN0bG1LRVRHYkREUXFUZG5ZclBiejdROGsrUGtkMUVPN09tRTdEQ1Y1MjN4TFVKbUs5TnpvQUFGam1yeFhrRkxnajl5V3NsZlVWOXZ3QnlHb2I1UWtHN0JWVGg1U25ONDBpWHUwN2NsRjc5MnR6MXRWMVhIM2szblgxSVkxOVMwMnJTdnlOTDhOblBCUUx2Uk9rMmc0NVFVSHhCQU0rUWxJSVJwN0VYOWhhY0ZrR3RRSnQzaXpuXC9rczB5V3F2VXA0VVcxY2twK1p5RTZoXC9pRmFSOHlMaUVobDNZU1NMNXlHSmpEOE9RMGpLN0ZWbUFcL003emx0Y3lwOFFTQmd4Y2NTUUNRY2FGNDJhZHo4bjU2OVkzdE50NXBYRVFHU1gzWUZXWFUzSE1EOVFXXC9GeFUrYmltaVFjZXZ5WklmY1JNMHNhMU5DTDJ6TyszcEQxcndXQTVCUXMwcTdzTEkxZytNQ3ZvWFRnZ2J4Vyt3T2x4VFlSVFYwSHkyc3hwQ213VDlcL000SGladHRJZndLRmZjS2xIemFpeHdiSmJcL0NVeWhsdHk0QUNINW5PK0xZNFlZVTJJTktwRTBkeGhtU1hVeGpKcUNLUGhKTU0rT0JkXC95ZUdYVEQwTUd6bUlaeURrN1J4QXlwSjlsYktQbTdKY2dPNzZJS0NUQkswcWZEd0dKdz09IiwgInBvc0Ftb3VudENhc2hiYWNrVmFsdWUiOiAiMCIsICJwb3NFbnRyeU1vZGUiOiAiQ0xFU1NfQ0hJUCIsICJzdGFydE1vbnRoIjogIjAxIiwgImZ1bmRpbmdTb3VyY2UiOiAiQ1JFRElUIiwgImlzc3VlckNvdW50cnkiOiAiQkUiLCAiY2FyZFNjaGVtZSI6ICJtYyIsICJjYXJkQmluIjogIjU0MTMzMyIsICJwb3NBdXRoQW1vdW50VmFsdWUiOiAiMTA5OSIgfQ==" } }, "MessageHeader": {...} } }
-
Decode the Base64 string in the
AdditionalResponse
field of the payment response.
This contains data resulting from the processing of the payment.
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 POS Support Team.
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 or metadata.
To combine application info and other data elements, see Add information to a payment.