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.
- start with a number or letter.
- contain letters, digits, dashes, underscores, and spaces.
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.
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": "NewStore", "integrator": "NewStore", "version": "1.0" }, "merchantApplication": { "name": "NewStore Associate App", "version": "1.23.0 (3)" }, "merchantDevice": { "os": "iOS", "osVersion": "15.5" } } }
-
Encode the JSON object to Base64.
ewogICAiYXBwbGljYXRpb25JbmZvIjp7CiAgICAgICJleHRlcm5hbFBsYXRmb3JtIjp7CiAgICAgICAgICJuYW1lIjoiTmV3U3RvcmUiLAogICAgICAgICAiaW50ZWdyYXRvciI6Ik5ld1N0b3JlIiwKICAgICAgICAgInZlcnNpb24iOiIxLjAiCiAgICAgIH0sCiAgICAgICJtZXJjaGFudEFwcGxpY2F0aW9uIjp7CiAgICAgICAgICJuYW1lIjoiTmV3U3RvcmUgQXNzb2NpYXRlIEFwcCIsCiAgICAgICAgICJ2ZXJzaW9uIjoiMS4yMy4wICgzKSIKICAgICAgfSwKICAgICAgIm1lcmNoYW50RGV2aWNlIjp7CiAgICAgICAgICJvcyI6ImlPUyIsCiAgICAgICAgICJvc1ZlcnNpb24iOiIxNS41IgogICAgICB9CiAgIH0KfQ==
-
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 } } }, "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("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 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.