Search

Are you looking for test card numbers?

Would you like to contact support?

Point-of-sale icon

Pass application information

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

Application information identifies the software that you use for making payment requests to the Adyen payments platform. When you add application info to your Terminal API payment requests, this allows us to analyze and troubleshoot payments more efficiently, and provide a better support experience.

Application infor includes:

  • Merchant application: Software that you developed for interacting with Adyen.
  • External platform: Third-party developed platform (if any) that you use for initiating payment requests.
  • Merchant device: The operating system of your cash register.

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:

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

    {
        "applicationInfo": {
            "merchantApplication": {
                "name": "ADYEN_APPLICATION_NAME",
                "version": "2.0.1"
            },
            "externalPlatform": {
                "integrator": "INTEGRATOR_COMPANY_NAME",
                "name": "PLATFORM_NAME",
                "version": "2.0"
            },
            "merchantDevice": {
                "os": "CASH_REGISTER_OPERATING_SYSTEM",
                "osVersion": "10.12.6",
                "reference": "CASH_REGISTER_CONFIGURED_NAME"
            }
        }
    }
  2. Encode the JSON object to Base64.

    ewogICAgICAgICJhcHBsaWNhdGlvbkluZm8iOiB7CiAgICAgICAgICAgICJtZXJjaGFudEFwcGxpY
    2F0aW9uIjogewogICAgICAgICAgICAgICAgIm5hbWUiOiAiQURZRU5fQVBQTElDQVRJT05fTkFNRS
    IsCiAgICAgICAgICAgICAgICAidmVyc2lvbiI6ICIyLjAuMSIKICAgICAgICAgICAgfSwKICAgICA
    gICAgICAgImV4dGVybmFsUGxhdGZvcm0iOiB7CiAgICAgICAgICAgICAgICAiaW50ZWdyYXRvciI6
    ICJJTlRFR1JBVE9SX0NPTVBBTllfTkFNRSIsCiAgICAgICAgICAgICAgICAibmFtZSI6ICJQTEFUR
    k9STV9OQU1FIiwKICAgICAgICAgICAgICAgICJ2ZXJzaW9uIjogIjIuMCIKICAgICAgICAgICAgfS
    wKICAgICAgICAgICAgIm1lcmNoYW50RGV2aWNlIjogewogICAgICAgICAgICAgICAgIm9zIjogIkN
    BU0hfUkVHSVNURVJfT1BFUkFUSU5HX1NZU1RFTSIsCiAgICAgICAgICAgICAgICAib3NWZXJzaW9u
    IjogIjEwLjEyLjYiLAogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICJDQVNIX1JFR0lTVEVSX
    0NPTkZJR1VSRURfTkFNRSIKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0=
  3. Make a payment request with:

    • SaleData.SaletoAcquirerData: The Base64-encoded JSON object.
    {
        "SaleToPOIRequest": {
            "PaymentRequest":{
                "SaleData":{
                    "SaleToAcquirerData":"ewogICAgICAgICJhcHBsaWNhdGlvbkluZm8iOiB7CiAgICAgICAgICAgICJtZXJjaGFudEFwcGxpY2F0aW9uIjogewogICAgICAgICAgICAgICAgIm5hbWUiOiAiQURZRU5fQVBQTElDQVRJT05fTkFNRSIsCiAgICAgICAgICAgICAgICAidmVyc2lvbiI6ICIyLjAuMSIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgImV4dGVybmFsUGxhdGZvcm0iOiB7CiAgICAgICAgICAgICAgICAiaW50ZWdyYXRvciI6ICJJTlRFR1JBVE9SX0NPTVBBTllfTkFNRSIsCiAgICAgICAgICAgICAgICAibmFtZSI6ICJQTEFURk9STV9OQU1FIiwKICAgICAgICAgICAgICAgICJ2ZXJzaW9uIjogIjIuMCIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm1lcmNoYW50RGV2aWNlIjogewogICAgICAgICAgICAgICAgIm9zIjogIkNBU0hfUkVHSVNURVJfT1BFUkFUSU5HX1NZU1RFTSIsCiAgICAgICAgICAgICAgICAib3NWZXJzaW9uIjogIjEwLjEyLjYiLAogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICJDQVNIX1JFR0lTVEVSX0NPTkZJR1VSRURfTkFNRSIKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0=",
                    "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"
            }
        }
    }
    {
        "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": {...}
        }
    }
    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("ewogICAgICAgICJhcHBsaWNhdGlvbkluZm8iOiB7CiAgICAgICAgICAgICJtZXJjaGFudEFwcGxpY2F0aW9uIjogewogICAgICAgICAgICAgICAgIm5hbWUiOiAiQURZRU5fQVBQTElDQVRJT05fTkFNRSIsCiAgICAgICAgICAgICAgICAidmVyc2lvbiI6ICIyLjAuMSIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgImV4dGVybmFsUGxhdGZvcm0iOiB7CiAgICAgICAgICAgICAgICAiaW50ZWdyYXRvciI6ICJJTlRFR1JBVE9SX0NPTVBBTllfTkFNRSIsCiAgICAgICAgICAgICAgICAibmFtZSI6ICJQTEFURk9STV9OQU1FIiwKICAgICAgICAgICAgICAgICJ2ZXJzaW9uIjogIjIuMCIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm1lcmNoYW50RGV2aWNlIjogewogICAgICAgICAgICAgICAgIm9zIjogIkNBU0hfUkVHSVNURVJfT1BFUkFUSU5HX1NZU1RFTSIsCiAgICAgICAgICAgICAgICAib3NWZXJzaW9uIjogIjEwLjEyLjYiLAogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICJDQVNIX1JFR0lTVEVSX0NPTkZJR1VSRURfTkFNRSIKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0=");
    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 an AdditionalResponse in the same format as the SaleToAcquirerData field: A Base64-encoded string.

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

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.merchantApplication.name=ADYEN_APPLICATION_NAME
    applicationInfo.merchantApplication.version=2.0.1
    applicationInfo.externalPlatform.integrator=INTEGRATOR_COMPANY_NAME
    applicationInfo.externalPlatform.name=PLATFORM_NAME
    applicationInfo.externalPlatform.version=2.0
    applicationInfo.merchantDevice.os=CASH_REGISTER_OPERATING_SYSTEM
    applicationInfo.merchantDevice.osVersion=10.12.6
    applicationInfo.merchantDevice.reference=CASH_REGISTER_CONFIGURED_NAME

    So the string looks like this:

    applicationInfo.merchantApplication.name=ADYEN_APPLICATION_NAME&applicationIn
    fo.merchantApplication.version=2.0.1&applicationInfo.externalPlatform.integra
    tor=INTEGRATOR_COMPANY_NAME&applicationInfo.externalPlatform.name=PLATFORM_NA
    ME&applicationInfo.externalPlatform.version=2.0&applicationInfo.merchantDevic
    e.os=CASH_REGISTER_OPERATING_SYSTEM&applicationInfo.merchantDevice.osVersion=
    10.12.6&applicationInfo.merchantDevice.reference=CASH_REGISTER_CONFIGURED_NAME
  2. Make a payment request with:

    • SaleData.SaletoAcquirerData: Your string of form-encoded key-value pairs.
    {
        "SaleToPOIRequest": {
            "PaymentRequest":{
                "SaleData":{
                    "SaleToAcquirerData":"applicationInfo.merchantApplication.name=ADYEN_APPLICATION_NAME&applicationInfo.merchantApplication.version=2.0.1&applicationInfo.externalPlatform.integrator=INTEGRATOR_COMPANY_NAME&applicationInfo.externalPlatform.name=PLATFORM_NAME&applicationInfo.externalPlatform.version=2.0&applicationInfo.merchantDevice.os=CASH_REGISTER_OPERATING_SYSTEM&applicationInfo.merchantDevice.osVersion=10.12.6&applicationInfo.merchantDevice.reference=CASH_REGISTER_CONFIGURED_NAME",
                    "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"
            }
        }
    }
    {
        "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=8535870313004891&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=8535870313004891&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": {...}
        }
    }
    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.merchantApplication.name=ADYEN_APPLICATION_NAME&applicationInfo.merchantApplication.version=2.0.1&applicationInfo.externalPlatform.integrator=INTEGRATOR_COMPANY_NAME&applicationInfo.externalPlatform.name=PLATFORM_NAME&applicationInfo.externalPlatform.version=2.0&applicationInfo.merchantDevice.os=CASH_REGISTER_OPERATING_SYSTEM&applicationInfo.merchantDevice.osVersion=10.12.6&applicationInfo.merchantDevice.reference=CASH_REGISTER_CONFIGURED_NAME");
    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 an AdditionalResponse in the same format as the SaleToAcquirerData: Form-encoded key-value pairs.
    This contains data resulting from the processing of the payment.

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, refer to Add information to a payment.

See also