Promotional financing enables customers to pay by taking out a loan that offers deferred interest or 0% interest during a promotional period. This makes it easier for customers to make big purchases.
The customer makes monthly payments to the financing company as with a regular loan, but without paying interest. The minimum required monthly payment may not be enough to pay off the loan when the promotional period ends. If there is an unpaid balance by the end of the promotional period, the customer needs to make further monthly payments and start paying interest. The Annual Percentage Rate (APR) in that case differs per customer and can be calculated from the start of the promotional period (deferred interest) or from the end of the promotional period.
Requirements
When using Adyen payment terminals, you can offer your customers promotional financing through Synchrony.
You need to:
- Have a Terminal API integration.
- Determine together with Synchrony what promo type and financing code values to use in your requests.
- The promo type represents the APR for when the promo period ends and there is a balance left on the loan.
- The financing code represents the duration of the promo period, which is related to the transaction amount.
- Inform the customer of the terms and conditions of the financing offer.
The customer needs to:
- Have a Synchrony card.
- Accept the terms and conditions of the financing offer.
How it works
- You send a card acquisition request with a promo financing flag.
- We pass on your request to Synchrony.
- You receive a card acquisition response with the offer from Synchrony.
- You send a confirmation input request with the details of the offer so the customer can accept or decline the offer on the terminal.
- If the customer accepts the offer, you send a payment request with a promo financing confirm flag.
- We inform Synchrony that the offer has been accepted.
- You get paid in full within a few days.
Step 1: Get a promo financing offer
To check with Synchrony if they can offer your customer promo financing, you need to send a card acquisition request with promo financing data in SaleToAcquirerData
.
-
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.-
Create a JSON object with the following parameters:
synchrony.promo.financing
: set to truesynchrony.promo.type
: set to a value agreed upon between you and Synchrony, representing the APR. For example 0201.
-
Convert the JSON object to Base64.
-
-
Make a card acquisition request specifying:
MessageHeader
: the standardSaleToPOIRequest.MessageHeader
object. This includes:
Parameter Required Description ProtocolVersion
3.0 MessageClass
Service MessageCategory
CardAcquisition MessageType
Request ServiceID
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
Your unique ID for the POS system component to send this request from. POIID
The unique ID of the terminal to send this request to. Format: [device model]-[serial number]. -
CardAcquisitionRequest
: the request body. Specify:Parameter Required Description SaleData.SaleTransactionID
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
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.
If the customer presented a Synchrony card, we send the promo financing request to Synchrony.
-
In the
CardAcquisitionResponse
, check the following fields.Parameter Description POIData.POITransactionID
Keep the TimeStamp
andTransactionID
, because you need these card acquisition details in your payment request.PaymentInstrumentData
The PaymentBrand
indicates if the customer used a Synchrony card, by showing a value like synchrony_cbcc.Response.AdditionalResponse
If synchrony.promo.apr
is included, this means Synchrony decided to offer promo financing. The value of this field, for example 30.74, indicates the APR after the promo period ends.
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. -
Decide on the next step:
- If the card type is not eligible for promo financing by Synchrony (because it is not a Synchrony card), go to Step 3 to make the payment.
- If the the card is eligible but Synchrony didn't offer financing, go to Step 3 to make the payment.
- If Synchrony offered financing, go to Step 2 to ask the customer for their consent.
Step 2: Ask the customer's consent
Skip this step if the card acquisition response shows it is not possible to offer promo financing.
After receiving a financing offer with an APR in the card acquisition response, you must enable the customer to review the offer and indicate if they accept it. The text shown to the customer 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 customer review and accept the offer on the payment terminal:
-
Make a Confirmation input request specifying:
MessageHeader
: the standardSaleToPOIRequest.MessageHeader
object. This includes:
Parameter Required Description MessageClass
Device MessageCategory
Input ServiceID
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
Your unique ID for the POS system component to send this request from. POIID
The unique ID of the terminal to send this request to. Format: [device model]-[serial number]. -
InputRequest.DisplayOutput
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:- The title. On a portrait display, this is limited to about 20 characters.
- Additional text which can be long. Use
\n
to add a line break. - The label for the "Decline" button on the left.
- The label for the "Accept" button on the right.
-
InputRequest.InputData
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.
-
Wait for the customer to read the text and provide their answer.
-
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 keyon the keypad.
Input.ConfirmedFlag
: false indicates the shopper declined the offer by selecting the left button on the display ("Decline") or the Cancel keyon the keypad.
-
If the input request times out, the
InputResult.Response
hasAdditionalResponse
: message=Screen%20timeout,Result
: Failure, andErrorCondition
: 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
hasAdditionalResponse
: message=A%20higher%20priority%20request%20has%20been%20received,Result
: Failure, andErrorCondition
: Busy.
Step 3: Make a payment
The final step is to make a payment request with a reference to the card acquisition. If the customer accepted the promo financing offer, the request must include promo financing confirmation data in SaleToAcquirerData
. If the customer didn't accept or if the purchase didn't qualify for promo financing, you omit this data.
Proceed as follows:
-
If the customer 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.-
Create a JSON object with the following parameters:
synchrony.promo.financingConfirm
: set to truesynchrony.promo.financingCode
: set to a value determined between you and Synchrony. This value represents the duration of the promo period and is based on the transaction amount. For example, you and Synchrony agreed that if the amount is less than 100 USD, the promo period is 6 months and the financing code is 1.
-
Convert the JSON object to Base64.
-
-
Make a payment request specifying:
MessageHeader
: the standardSaleToPOIRequest.MessageHeader
object. This includes:
Parameter Required Description ProtocolVersion
3.0 MessageClass
Service MessageCategory
Payment MessageType
Request ServiceID
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
Your unique ID for the POS system component to send this request from. POIID
The unique ID of the terminal to send this request to. Format: [device model]-[serial number]. -
PaymentRequest
: the request body. Specify:Parameter Required Description SaleData.SaleTransactionID
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
An object with: Currency
: the transaction currency.RequestedAmount
: the final transaction amount.
PaymentData.CardAcquisitionReference
An object referring to the card acquisition: TimeStamp
: The time stamp returned in thePOIData.POITransactionID
of the card acquisition response.TransactionID
: the transaction ID returned in thePOIData.POITransactionID
of the card acquisition response.
-
In the
PaymentResponse
, check theResponse.AdditionalResponse
to see if promo financing was offered:- If
synchrony.promo.apr
is included, this means Synchrony decided to offer promo financing. 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. - If
We inform Synchrony that their financing offer was accepted.