Terminal-2 icon

Promotional financing without Synchrony card

Offer shopper financing when Synchrony card is not present.

To initiate a payment with a promo financing offer, you need the shopper's Synchrony account details. Here we describe how to initiate the payment when the shopper does not have their Synchrony card on them. Instead, you need to ask for the shopper's tokenized Synchrony account number to start the promo financing flow.

Requirements

Before you begin, take into account the following requirements and preparations.

Requirement Description
Integration type Terminal API integration with Adyen-provided payment terminals.
Limitations The shopper needs to:
  • Provide identifiers, for example, their social security number and their zip code.
  • Accept the terms and conditions of the financing offer.
Setup steps Before you begin, determine together with Synchrony:
  • What financing code value to use in your requests.
  • Which identifiers they want you to collect if the shopper has no Synchrony card on them.

How it works

To perform an account lookup:

  1. You send a card acquisition request containing the shopper's identifiers.
  2. You receive a token in the card acquisition response.
  3. You cancel the card acquisition request.
  4. You send a second card acquisition request with a promo financing flag.
  5. We pass on your request to Synchrony.
  6. You receive a card acquisition response with the offer from Synchrony.
  7. You send a confirmation input request with the details of the offer so the shopper can accept or decline the offer on the terminal.
  8. If the shopper accepts the offer, you send a payment request with a promo financing confirm flag.
  9. We inform Synchrony that the offer has been accepted.
  10. You get paid in full within a few days.

1. Look up shopper Synchrony account

To look up the Synchrony account number of a shopper that has no Synchrony card on them, you need to obtain the shopper's social security number and the city code. You then send these identifiers in a card acquisition request in the SaleToAcquirerData from your POS app.

  1. Prepare the SaleToAcquirerData value either as a JSON object converted to a Base64-encoded string, or as a string of key-value pairs using ampersand (&) as a separator. For instructions, select the tabs.

  2. Make a card acquisition request specifying:

    • The standard SaleToPOIRequest.MessageHeader object, with MessageClass set to Service and MessageCategory set to CardAcquisition.

      Parameter Required Description
      ProtocolVersion -white_check_mark- 3.0
      MessageClass -white_check_mark- Service
      MessageCategory -white_check_mark- CardAcquisition
      MessageType -white_check_mark- Request
      ServiceID -white_check_mark- Your unique ID for this request, consisting of 1-10 alphanumeric characters. Must be unique within the last 48 hours for the terminal (POIID) being used.
      SaleID -white_check_mark- Your unique ID for the POS system component to send this request from.
      POIID -white_check_mark- The unique ID of the terminal to send this request to. Format: [device model]-[serial number].
    • The CardAcquisitionRequest object, including:

      Parameter Required Description
      SaleData.SaleTransactionID -white_check_mark- An object with:
      • TransactionID: your reference to identify a payment. We recommend using a unique value per payment.
      • TimeStamp: date and time of the request in UTC format.
      • PaymentType: either omit this parameter or specify Normal.
      SaleData.SaleToAcquirerData The value you prepared in the previous step, either the Base64-encoded string or the key-value pairs string.
      CardAcquisitionTransaction -white_check_mark- An object with
      • TotalAmount: the transaction amount, or a placeholder amount. You can update the amount later in the payment request.
      • PaymentType: either omit this parameter or specify Normal.
  3. In the CardAcquisitionResponse, you receive a token under CardData.PaymentToken.TokenValue or under recurring.recurringDetailReference in the additionalResponse. Save the token to request a promo financing offer request.

  4. Finish the card acquisition with a EnableServiceRequest containing the TransactionAction object set to AbortTransaction.

2. Get a Synchrony promo financing offer

To check with Synchrony if they can offer your shopper promo financing, you need to send a card acquisition request. You need to include the token your received in the card acquisition response in the previous step in SaleToAcquirerData.

  1. Prepare the SaleToAcquirerData value either as a JSON object converted to a Base64-encoded string, or as a string of key-value pairs using ampersand (&) as a separator. For instructions, select the tabs.

 

  1. Make a card acquisition request specifying:

    • The standard SaleToPOIRequest.MessageHeader object, with MessageClass set to Service and MessageCategory set to CardAcquisition.

      Parameter Required Description
      ProtocolVersion -white_check_mark- 3.0
      MessageClass -white_check_mark- Service
      MessageCategory -white_check_mark- CardAcquisition
      MessageType -white_check_mark- Request
      ServiceID -white_check_mark- Your unique ID for this request, consisting of 1-10 alphanumeric characters. Must be unique within the last 48 hours for the terminal (POIID) being used.
      SaleID -white_check_mark- Your unique ID for the POS system component to send this request from.
      POIID -white_check_mark- The unique ID of the terminal to send this request to. Format: [device model]-[serial number].
    • The CardAcquisitionRequest object, including:

      Parameter Required Description
      SaleData.SaleTransactionID -white_check_mark- An object with:
      • TransactionID: your reference to identify a payment. We recommend using a unique value per payment.
      • TimeStamp: date and time of the request in UTC format.
      • PaymentType: either omit this parameter or specify Normal.
      SaleData.SaleToAcquirerData The value you prepared in the previous step, either the Base64-encoded string or the key-value pairs string.
      CardAcquisitionTransaction -white_check_mark- An object with
      • TotalAmount: the transaction amount, or a placeholder amount. You can update the amount later in the payment request.
      • PaymentType: either omit this parameter or specify Normal.
  2. In the CardAcquisitionResponse, check the following fields.

    Parameter Description
    POIData.POITransactionID Keep the TimeStamp and TransactionID, because you need these card acquisition details in your payment request.
    PaymentInstrumentData The PaymentBrand indicates if the shopper used a Synchrony card, by showing a value like synchrony_cbcc or **synchrony_plcc.
    Response.AdditionalResponse If synchrony.promo.apr and synchrony.promo.aprType are included, this means Synchrony decided to offer promo financing. The value of synchrony.promo.apr, for example 30.74, indicates the APR after the promo period ends. The value of synchrony.promo.aprType can be 00 if the APR is a fixed rate or 01 if the APR is a variable rate.

    Note that you receive either a Base64 string that you need to decode to get a JSON object, or a string of form-encoded key-value pairs.

    If synchrony.promo.apr is included in the AdditionalResponse of the card acquisition response, make sure to save the TimeStamp and TransactionID. You need these card acquisition details in your payment request.

Skip this step if the card acquisition response shows it is not possible to offer promo financing.

After receiving a financing offer with an synchrony.promo.apr and synchrony.promo.aprType in the card acquisition response, you must enable the shopper to review the offer and indicate if they accept it. The text shown to the shopper must include the APR and the duration of the promotional period. The duration is related to the transaction amount and agreed on beforehand between you and Synchrony.

For example:

Your purchase qualifies for the following promotion:
No interest if paid in full within X months.
If the Promotional Balance is not paid in full within X months, interest will be imposed from the transaction date at an APR of XX.XX%.
Minimum monthly payments are required.

Or if the APR is variable, the text should mention that and include what the variable rate is based on.

To let the shopper review and accept the offer on the payment terminal:

  1. Make a Confirmation input request specifying:

    • The standard SaleToPOIRequest.MessageHeader object, with MessageClass set to Device and MessageCategory set to Input.

      Parameter Required Description
      ProtocolVersion -white_check_mark- 3.0
      MessageClass -white_check_mark- Device
      MessageCategory -white_check_mark- Input
      MessageType -white_check_mark- Request
      ServiceID -white_check_mark- Your unique ID for this request, consisting of 1-10 alphanumeric characters. Must be unique within the last 48 hours for the terminal (POIID) being used.
      SaleID -white_check_mark- Your unique ID for the system where you send this request from.
      POIID -white_check_mark- The unique ID of the terminal to send this request to. Format: [device model]-[serial number].
    • The InputRequest.DisplayOutput object to define what is shown on the terminal:

      Parameter Description
      Device CustomerDisplay
      InfoQualify Display
      OutputContent.OutputFormat Text
      OutputContent.PredefinedContent.ReferenceID GetConfirmation
      OutputContent.OutputText An array of four Text fields containing your own text to show on the terminal:
      1. The title. On a portrait display, this is limited to about 20 characters.
      2. Additional text which can be long. Use \n to add a line break.
      3. The label for the "Decline" button on the left.
      4. The label for the "Accept" button on the right.
    • The InputRequest.InputData object to handle the user input:

      Parameter Description
      Device CustomerInput
      InfoQualify Input
      InputCommand GetConfirmation
      MaxInputTime (Integer) Time-out in seconds. This is the time that the user gets to finish their input.

      The following example asks the shopper to accept or decline a finance offer.

  2. Wait for the shopper to read the text and provide their answer.

  3. When you receive the InputResponse, check if the shopper accepted or declined the offer:

    • Input.ConfirmedFlag: true indicates the shopper accepted the offer by selecting the right button on the display ("Accept") or the Confirm key on the keypad.
    • Input.ConfirmedFlag: false indicates the shopper declined the offer by selecting the left button on the display ("Decline") or the Cancel key on the keypad.
    • If the input request times out, the InputResult.Response has AdditionalResponse: message=Screen%20timeout, Result: Failure, and ErrorCondition: Cancel.

    • If you make a payment request while the input request is waiting for input on the terminal, the payment request overrides the input request. The InputResult.Response has AdditionalResponse: message=A%20higher%20priority%20request%20has%20been%20received, Result: Failure, and ErrorCondition: Busy.

4. Make a payment

The final step is to make a payment request with a reference to the card acquisition. If the shopper accepted the promo financing offer, the request must include promo financing confirmation data in SaleToAcquirerData. If the shopper didn't accept or if the purchase didn't qualify for promo financing, you omit this data.

Proceed as follows:

  1. If the shopper accepted the financing offer, prepare the SaleToAcquirerData value either as a JSON object converted to a Base64-encoded string, or as a string of key-value pairs using ampersand (&) as a separator. For instructions, select the tabs.

    1. Make a payment request specifying:

      • The standard SaleToPOIRequest.MessageHeader object, with MessageClass set to Service and MessageCategory set to Payment.

        Parameter Required Description
        ProtocolVersion -white_check_mark- 3.0
        MessageClass -white_check_mark- Service
        MessageCategory -white_check_mark- Payment
        MessageType -white_check_mark- Request
        ServiceID -white_check_mark- Your unique ID for this request, consisting of 1-10 alphanumeric characters. Must be unique within the last 48 hours for the terminal (POIID) being used.
        SaleID -white_check_mark- Your unique ID for the POS system component to send this request from.
        POIID -white_check_mark- The unique ID of the terminal to send this request to. Format: [device model]-[serial number].
      • The PaymentRequest object with:

        Parameter Required Description
        SaleData.SaleTransactionID -white_check_mark- An object with:
        • TransactionID: your reference to identify a payment. We recommend using a unique value per payment.
        • TimeStamp: date and time of the request in UTC format.
        SaleData.SaleToAcquirerData

        For a payment with financing, provide the value you prepared in the previous step, either the Base64-encoded string or the key-value pairs string.

        For a payment without financing, omit the promo financing confirmation data.

        PaymentTransaction.AmountsReq -white_check_mark- An object with:
        • Currency: the transaction currency.
        • RequestedAmount: the final transaction amount.
        PaymentData.CardAcquisitionReference -white_check_mark- An object referring to the card acquisition:
        • TimeStamp: The time stamp returned in the POIData.POITransactionID of the card acquisition response that contained the promo financing offer.
        • TransactionID: the transaction ID returned in the POIData.POITransactionID of the card acquisition response that contained the promo financing offer.
    2. In the PaymentResponse, check the Response.AdditionalResponse to see if promo financing was offered:

      • If synchrony.promo.apr is included, this means Synchrony decided to accept the promo financing request. The value of this field, for example 30.74, indicates the APR after the promo period ends.

      Note that you receive the AdditionalResponse either as a Base64 string that you need to decode to get a JSON object, or as a string of form-encoded key-value pairs.

    We inform Synchrony that their financing offer was accepted.

    See also