Purpose
ACH (Automated Clearing House) is a U.S. based financial network used for electronic payments and money transfers. ACH payments, also known as “direct payments”, are a way to transfer money from one bank account to another without using paper checks, credit card networks, wire transfers, or cash.
Nuvei supports a growing number of ACH APM (Alternative Payment Method) integrations, which are available via our payment technology platforms.
This guide describes how to integrate the following ACH APMs into your payment flows:
- The “Bank Transfer (ACH)” APM (also known as “Classic ACH”)
- The “Secure Bank Transfer” APM (also known as “Guaranteed ACH”)
APM Overview
Bank Transfer (ACH) APM (Classic ACH)
APM Name | Nuvei APM | Integration Methods | ||
REST API | Web SDK | Checkout SDK | ||
ACH | apmgw_ACH |
✓ | ✓ | ✓ |
APM Flow: | This APM uses a "Direct" workflow. | |||
Notes: |
|
Secure Bank Transfer APM (Guaranteed ACH)
Nuvei’s Guaranteed ACH solution allows e-commerce merchants in the US to accept ACH payments, without administrative or NSF return risk (the merchant always gets their funds). Guaranteed ACH enables a merchant to disregard potential returns. Third party verification tools (like Plaid) are utilized by Nuvei, to validate transactions in real-time, validate consumers, as well as generate consumer risk assessments. If a transaction is approved, Nuvei pays the merchant the following day – regardless of potential returns.
APM Name | Nuvei APM | Integration Methods | ||
REST API | Web SDK | Checkout SDK | ||
Secure Bank Transfer | apmgw_Secure_Bank_Transfer |
✓ | ✓ | ✓ |
APM Flow: | This APM uses a "Redirect" workflow.
|
|||
Notes: | Using this APM "guarantees" that "the merchant always gets their funds":
|
Prerequisites and Notes
- This document assumes that you have completed all the account set up prerequisites, and are ready to integrate the APMs into your payment flow.
- ACH only supports US based IPs. IP addresses outside the US do not work.
- Transactions are conducted in US Dollars.
- Test credentials and testing scenarios should be obtained directly from ACH.
- You can contact Nuvei Support for any type of assistance.
-
Click tab to open…Prerequisites and Notes:
- In addition to payment request responses, the system sends DMNs (Direct Merchant Notifications) containing the transaction processing results to a specified
notificationUrl
provided by you. This ensures that you receive transaction results that may not always be immediately available. - You should include the
notificationUrl
in each/payment
and/payout
request, or set it on the CPanel (hard-coded).
Prerequisites and Notes:- Some parameters can be collected in both the
/openOrder
request and thecreatePayment()
request. - When processing a
createPayment()
request, if there are multiple input values for the same parameter, then the system chooses a single parameter value depending on two factors:- The method used to collect the parameter value.
- The JSON block the parameter belongs to.
- The
billingAddress
block collected in thecreatePayment()
request. - The
billingAddress
block collected in the/openOrder
request. - The
userDetails
block collected in thecreatePayment()
request. - The
userDetails
block collected in the/openOrder
request.
Prerequisites and Notes:- Make sure that ACH APM payment methods described in this guide are included in your Nuvei account.
- When initiating your payment page using the Checkout methods, set the country to “US” and the currency to “USD”, in order to present these ACH APM payment methods in the Payment Method Gallery.
- No further integration steps are required.
- for REST API
-
Prerequisites and Notes:
- In addition to payment request responses, the system sends DMNs (Direct Merchant Notifications) containing the transaction processing results to a specified
notificationUrl
provided by you. This ensures that you receive transaction results that may not always be immediately available. - You should include the
notificationUrl
in each/payment
and/payout
request, or set it on the CPanel (hard-coded).
- In addition to payment request responses, the system sends DMNs (Direct Merchant Notifications) containing the transaction processing results to a specified
- for Web SDK
-
Prerequisites and Notes:
- Some parameters can be collected in both the
/openOrder
request and thecreatePayment()
request. - When processing a
createPayment()
request, if there are multiple input values for the same parameter, then the system chooses a single parameter value depending on two factors:- The method used to collect the parameter value.
- The JSON block the parameter belongs to.
- The
billingAddress
block collected in thecreatePayment()
request. - The
billingAddress
block collected in the/openOrder
request. - The
userDetails
block collected in thecreatePayment()
request. - The
userDetails
block collected in the/openOrder
request.
- Some parameters can be collected in both the
- for Checkout
-
Prerequisites and Notes:
- Make sure that ACH APM payment methods described in this guide are included in your Nuvei account.
- When initiating your payment page using the Checkout methods, set the country to “US” and the currency to “USD”, in order to present these ACH APM payment methods in the Payment Method Gallery.
- No further integration steps are required.
Bank Transfer (ACH)
You can use the Bank Transfer (ACH) APM integration perform payments (deposits), payouts (withdrawals), refunds, and voids.
Nuvei stores your customer’s bank account details in an encrypted UPO (User Payment Option) record in the Nuvei system. A UPO represents a customer bank account or other payment method, for use in future transactions with no need for the customer to enter their payment details again.
Contact Nuvei Support for implementation support.
Payments
The Bank Transfer (ACH) flow begins in your payment page when a customer selects the Bank Transfer (ACH) APM as their payment method.
Follow the steps in the relevant flow:-
Payment (Without UPO)
For new customers, or for payment method details that were not previously captured. -
Payment (With UPO)
You can offer “returning customers” the option to select one of their previously captured payment methods.
Payouts
Refunds
- See the Refunds topic.
Voids
- See the Voids topic.
Payment (Without UPO)
Collect Payment Details and Send Request
Follow the relevant steps for each environment:
Click tab to open…
- The Bank Transfer (ACH) flow begins in your payment page when the customer enters a payment
amount
and selects the Bank Transfer (ACH) APM as the payment method. - Prompt the customer to enter:
-
AccountNumber
– The customer bank account from which to pay. -
RoutingNumber
– The Bank Routing Number for that bank account. firstName
lastName
email
-
- Generate a
sessionToken
by sending a/getSessionToken
request. - Send a
/payment
request with its mandatory parameters, and include:sessionToken
-
userTokenId
– Unique identifier of the customer in your system amount
-
paymentOption.alternativePaymentMethod
block containing:.paymentMethod: "apmgw_ACH"
.AccountNumber
.RoutingNumber
-
billingAddress
block containing:.firstName
,.lastName
,.email
-
userDetails
block containing:.firstName
,.lastName
,.email
-
urlDetails.notificationUrl
Example
/payment
Request (Without UPO){ "sessionToken": "<sessionToken from getSessionToken>", "merchantId": "<your merchantId>", "merchantSiteId": "<your merchantSiteId>", "userTokenId": "<unique customer identifier in merchant system>", "clientRequestId": "<unique request ID in merchant system>", "clientUniqueId": "<unique transaction ID in merchant system>", "currency": "USD", "amount": "1.25", "paymentOption": { "alternativePaymentMethod": { "paymentMethod": "apmgw_ACH", "AccountNumber": "111111111", "RoutingNumber": "999999992" } }, "billingAddress": { "firstName": "John", "lastName": "Smith", "email": "john.smith@email.com", "phone": "1112223333", "address": "2992 Cameron Road", "city": "Newark", "zip": "14236", "state": "NY", "country": "US" }, "userDetails": { "firstName": "John", "lastName": "Smith", "email": "john.smith@email.com", "phone": "1112223333", "address": "2992 Cameron Road", "city": "Newark", "zip": "14236", "state": "NY", "country": "US" "identification": "123456780" }, "deviceDetails": { "deviceType": "DESKTOP", "deviceName": "iPhone 5s", "deviceOS": "iOS 10.2", "browser": "safari", "ipAddress": "192.168.2.38" }, "urlDetails": { "notificationUrl": "[The URL to which DMNs are sent]" }, "timeStamp": "<YYYYMMDDHHmmss>", "checksum": "<calculated checksum>" }
- The Bank Transfer (ACH) flow begins in your payment page when the customer enters a payment
amount
. -
Initiate a Session
Send theamount
and auserTokenId
(unique identifier of the customer in your system) in an/openOrder
request, which authenticates and sets up an order in the Nuvei system, and returns asessionToken
. -
Initialize the Web SDK
This instantiates the Web SDK with thesessionToken
received from the server call to/openOrder
. - Allow the customer to select the Bank Transfer (ACH) APM as the payment method.
- Prompt the customer to enter:
-
AccountNumber
– The customer bank account from which to pay. -
RoutingNumber
– The Bank Routing Number for that bank account. firstName
lastName
email
-
- Send a
createPayment()
request with its mandatory parameters, and include:sessionToken
-
paymentOption.alternativePaymentMethod
block containing:.paymentMethod: "apmgw_ACH"
.AccountNumber
.RoutingNumber
-
billingAddress
block containing:.firstName
,.lastName
,.email
-
userDetails
block containing:.firstName
,.lastName
,.email
Example
createPayment()
Request (Without UPO)sfc.createPayment({ "sessionToken": "<sessiontoken>", "paymentOption": { "alternativePaymentMethod": { "paymentMethod": "apmgw_ACH", "AccountNumber": document.getElementById("AccountNumber").value, "RoutingNumber": document.getElementById("RoutingNumber").value } }, "billingAddress": { "firstName": "John", "lastName": "Smith", "email": "john.smith@email.com", "phone": "1112223333", "address": "2992 Cameron Road", "city": "Newark", "zip": "14236", "state": "NY", "country": "US" }, "userDetails": { "firstName": "John", "lastName": "Smith", "email": "john.smith@email.com", "phone": "1112223333", "address": "2992 Cameron Road", "city": "Newark", "zip": "14236", "state": "NY", "country": "US" "identification": "123456780" } }, function(res) { console.log(res); })
- The Bank Transfer (ACH) flow begins when the customer selects the Bank Transfer (ACH) payment method from the Payment Method Gallery.
- The customer enters Account Number, Routing Number, and Amount, and clicks the Deposit/Process button.
- for REST API
-
- The Bank Transfer (ACH) flow begins in your payment page when the customer enters a payment
amount
and selects the Bank Transfer (ACH) APM as the payment method. - Prompt the customer to enter:
-
AccountNumber
– The customer bank account from which to pay. -
RoutingNumber
– The Bank Routing Number for that bank account. firstName
lastName
email
-
- Generate a
sessionToken
by sending a/getSessionToken
request. - Send a
/payment
request with its mandatory parameters, and include:sessionToken
-
userTokenId
– Unique identifier of the customer in your system amount
-
paymentOption.alternativePaymentMethod
block containing:.paymentMethod: "apmgw_ACH"
.AccountNumber
.RoutingNumber
-
billingAddress
block containing:.firstName
,.lastName
,.email
-
userDetails
block containing:.firstName
,.lastName
,.email
-
urlDetails.notificationUrl
Example
/payment
Request (Without UPO){ "sessionToken": "<sessionToken from getSessionToken>", "merchantId": "<your merchantId>", "merchantSiteId": "<your merchantSiteId>", "userTokenId": "<unique customer identifier in merchant system>", "clientRequestId": "<unique request ID in merchant system>", "clientUniqueId": "<unique transaction ID in merchant system>", "currency": "USD", "amount": "1.25", "paymentOption": { "alternativePaymentMethod": { "paymentMethod": "apmgw_ACH", "AccountNumber": "111111111", "RoutingNumber": "999999992" } }, "billingAddress": { "firstName": "John", "lastName": "Smith", "email": "john.smith@email.com", "phone": "1112223333", "address": "2992 Cameron Road", "city": "Newark", "zip": "14236", "state": "NY", "country": "US" }, "userDetails": { "firstName": "John", "lastName": "Smith", "email": "john.smith@email.com", "phone": "1112223333", "address": "2992 Cameron Road", "city": "Newark", "zip": "14236", "state": "NY", "country": "US" "identification": "123456780" }, "deviceDetails": { "deviceType": "DESKTOP", "deviceName": "iPhone 5s", "deviceOS": "iOS 10.2", "browser": "safari", "ipAddress": "192.168.2.38" }, "urlDetails": { "notificationUrl": "[The URL to which DMNs are sent]" }, "timeStamp": "<YYYYMMDDHHmmss>", "checksum": "<calculated checksum>" }
- The Bank Transfer (ACH) flow begins in your payment page when the customer enters a payment
- for Web SDK
-
- The Bank Transfer (ACH) flow begins in your payment page when the customer enters a payment
amount
. -
Initiate a Session
Send theamount
and auserTokenId
(unique identifier of the customer in your system) in an/openOrder
request, which authenticates and sets up an order in the Nuvei system, and returns asessionToken
. -
Initialize the Web SDK
This instantiates the Web SDK with thesessionToken
received from the server call to/openOrder
. - Allow the customer to select the Bank Transfer (ACH) APM as the payment method.
- Prompt the customer to enter:
-
AccountNumber
– The customer bank account from which to pay. -
RoutingNumber
– The Bank Routing Number for that bank account. firstName
lastName
email
-
- Send a
createPayment()
request with its mandatory parameters, and include:sessionToken
-
paymentOption.alternativePaymentMethod
block containing:.paymentMethod: "apmgw_ACH"
.AccountNumber
.RoutingNumber
-
billingAddress
block containing:.firstName
,.lastName
,.email
-
userDetails
block containing:.firstName
,.lastName
,.email
Example
createPayment()
Request (Without UPO)sfc.createPayment({ "sessionToken": "<sessiontoken>", "paymentOption": { "alternativePaymentMethod": { "paymentMethod": "apmgw_ACH", "AccountNumber": document.getElementById("AccountNumber").value, "RoutingNumber": document.getElementById("RoutingNumber").value } }, "billingAddress": { "firstName": "John", "lastName": "Smith", "email": "john.smith@email.com", "phone": "1112223333", "address": "2992 Cameron Road", "city": "Newark", "zip": "14236", "state": "NY", "country": "US" }, "userDetails": { "firstName": "John", "lastName": "Smith", "email": "john.smith@email.com", "phone": "1112223333", "address": "2992 Cameron Road", "city": "Newark", "zip": "14236", "state": "NY", "country": "US" "identification": "123456780" } }, function(res) { console.log(res); })
- The Bank Transfer (ACH) flow begins in your payment page when the customer enters a payment
- for Checkout
-
- The Bank Transfer (ACH) flow begins when the customer selects the Bank Transfer (ACH) payment method from the Payment Method Gallery.
- The customer enters Account Number, Routing Number, and Amount, and clicks the Deposit/Process button.
Handling the Response
As the transaction progresses in the flow from
PENDING
toUPDATE
toAPPROVED
, you will receive responses anf DMN notifications:-
transactionStatus=PENDING
:
The request returns:- A response that includes
"transactionStatus": "PENDING"
and a"userPaymentOptionId"
.Example of Some Parameters Returned
{ ... ... "transactionId":"36682151", "paymentOption": { "userPaymentOptionId": "8100521", "card": {} }, "transactionStatus": "PENDING", ... ... }
- A DMN containing
"Status=PENDING"
.
See Example “Status=PENDING” DMN.
- A response that includes
-
transactionStatus=UPDATE
:- After a short time period, a
preApprovalId
is generated and stored in the UPO record.
ThepreApprovalId
indicates that:- The customer payment method is authenticated, and there is no need to perform the authentication process again. This allows the system to automatically approve certain payment transactions when this UPO is used in the future.
- If this is an initial recurring payment, then the customer allows you to create subsequent recurring payments on their behalf, without their presence, according to some rebilling agreement.
- You will receive a DMN notification containing
"Status=UPDATE"
.
See Example “Status=UPDATE” DMN.
- After a short time period, a
-
transactionStatus=APPROVED
:
The request is processed and returns a transaction notification with the final status within 2-5 days.- If the transfer is successful, then the following is returned:
- A response with “
status=APPROVED
“. - A DMN notification containing “
status=APPROVED
“.
See Example “Status=APPROVED” DMN.
- A response with “
- If the transfer is not successful, then the following is returned:
- A response with “
status=DECLINED
“. - A DMN notification containing “
status=DECLINED
“.
- A response with “
- If the transfer is successful, then the following is returned:
Payment (With UPO)
Collect Payment Details and Send Request
Follow the relevant steps for each environment:
Click tab to open…
- The Bank Transfer (ACH) flow begins in your payment page when a “returning customer” enters a payment
amount
and selects the Bank Transfer (ACH) APM as the payment method. - Call a /getUserUPOs request to retrieve a list of the customer’s UPOs.
(If no appropriate UPOs are returned, then skip the rest of these steps, and perform the steps in the Payment (Without UPO) flow instead.) - Offer the “returning customer” the option to select one their previously captured payment methods (stored in a UPO record, representing the customer’s bank account), instead of collecting their bank account details again.
- If the customer selects one their previously captured payment methods (UPOs), then continue with the next step.
- If not, then skip the rest of these steps, and perform the steps in the Payment (Without UPO) flow instead.
- Generate a
sessionToken
by sending a/getSessionToken
request. - Send a
/payment
request with its mandatory parameters, and include:sessionToken
userTokenId
amount
-
"paymentOption.userPaymentOptionId": "<userPaymentOptionId of a previously stored customer payment method>"
selected by the customer. -
paymentOption.alternativePaymentMethod
block containing:.paymentMethod: "apmgw_ACH"
.AccountNumber
.RoutingNumber
-
billingAddress
block containing:.firstName
,.lastName
,.email
urlDetails.notificationUrl
Example of some parameters in the
/payment
Request (With UPO){ ... ... "sessionToken": "<sessionToken from getSessionToken>", "userTokenId": "<unique customer identifier in merchant system>", "amount": "125", "paymentOption": { "userPaymentOptionId": "8100521", "alternativePaymentMethod": { "paymentMethod": "apmgw_ACH", "AccountNumber": "111111111", "RoutingNumber": "999999992" } }, "billingAddress": { "firstName": "John", "lastName": "Smith", "email": "john.smith@email.com" }, "urlDetails": { "notificationUrl": "[The URL to which DMNs are sent]" }, ... ... }
- The Bank Transfer (ACH) flow begins in your payment page when a “returning customer” enters a payment
amount
. -
Initiate a Session
Send theamount
and auserTokenId
(unique identifier of the customer in your system) in an/openOrder
request, which authenticates and sets up an order in the Nuvei system, and returns asessionToken
. -
Initialize the Web SDK
This instantiates the Web SDK with thesessionToken
received from the server call to/openOrder
. - Allow the customer to select the Bank Transfer (ACH) APM as the payment method.
- Call a /getUserUPOs request to retrieve a list of the customer’s UPOs.
(If no appropriate UPOs are returned, then skip the rest of these steps, and perform the steps in the Payment (Without UPO) flow instead.) - Offer the “returning customer” the option to select one their previously captured payment methods (stored in a UPO record, representing the customer’s bank account), instead of collecting their bank account details again.
- If the customer selects one their previously captured payment methods (UPOs), then continue with the next step.
- If not, then skip the rest of these steps, and perform the steps in the Payment (Without UPO) flow instead.
- Send a
createPayment()
request with its mandatory parameters, and include:sessionToken
-
"userPaymentOptionId": "<userPaymentOptionId of a previously stored customer payment method>"
selected by the customer. -
paymentOption.alternativePaymentMethod
block containing:.paymentMethod: "apmgw_ACH"
.AccountNumber
.RoutingNumber
Example
createPayment()
Request (With UPO)sfc.createPayment({ "sessionToken": "<sessiontoken>", "paymentOption": { "userPaymentOptionId": "8100521", "alternativePaymentMethod": { "paymentMethod": "apmgw_ACH", "AccountNumber": "111111111", "RoutingNumber": "999999992" } } }, function(res) { console.log(res); })
- The Bank Transfer (ACH) flow begins when the customer selects the Bank Transfer (ACH) payment method from the Payment Method Gallery.
- The customer selects one their previously captured payment methods (UPOs), enters an amount, and clicks the Deposit/Process button.
- for REST API
-
- The Bank Transfer (ACH) flow begins in your payment page when a “returning customer” enters a payment
amount
and selects the Bank Transfer (ACH) APM as the payment method. - Call a /getUserUPOs request to retrieve a list of the customer’s UPOs.
(If no appropriate UPOs are returned, then skip the rest of these steps, and perform the steps in the Payment (Without UPO) flow instead.) - Offer the “returning customer” the option to select one their previously captured payment methods (stored in a UPO record, representing the customer’s bank account), instead of collecting their bank account details again.
- If the customer selects one their previously captured payment methods (UPOs), then continue with the next step.
- If not, then skip the rest of these steps, and perform the steps in the Payment (Without UPO) flow instead.
- Generate a
sessionToken
by sending a/getSessionToken
request. - Send a
/payment
request with its mandatory parameters, and include:sessionToken
userTokenId
amount
-
"paymentOption.userPaymentOptionId": "<userPaymentOptionId of a previously stored customer payment method>"
selected by the customer. -
paymentOption.alternativePaymentMethod
block containing:.paymentMethod: "apmgw_ACH"
.AccountNumber
.RoutingNumber
-
billingAddress
block containing:.firstName
,.lastName
,.email
urlDetails.notificationUrl
Example of some parameters in the
/payment
Request (With UPO){ ... ... "sessionToken": "<sessionToken from getSessionToken>", "userTokenId": "<unique customer identifier in merchant system>", "amount": "125", "paymentOption": { "userPaymentOptionId": "8100521", "alternativePaymentMethod": { "paymentMethod": "apmgw_ACH", "AccountNumber": "111111111", "RoutingNumber": "999999992" } }, "billingAddress": { "firstName": "John", "lastName": "Smith", "email": "john.smith@email.com" }, "urlDetails": { "notificationUrl": "[The URL to which DMNs are sent]" }, ... ... }
- The Bank Transfer (ACH) flow begins in your payment page when a “returning customer” enters a payment
- for Web SDK
-
- The Bank Transfer (ACH) flow begins in your payment page when a “returning customer” enters a payment
amount
. -
Initiate a Session
Send theamount
and auserTokenId
(unique identifier of the customer in your system) in an/openOrder
request, which authenticates and sets up an order in the Nuvei system, and returns asessionToken
. -
Initialize the Web SDK
This instantiates the Web SDK with thesessionToken
received from the server call to/openOrder
. - Allow the customer to select the Bank Transfer (ACH) APM as the payment method.
- Call a /getUserUPOs request to retrieve a list of the customer’s UPOs.
(If no appropriate UPOs are returned, then skip the rest of these steps, and perform the steps in the Payment (Without UPO) flow instead.) - Offer the “returning customer” the option to select one their previously captured payment methods (stored in a UPO record, representing the customer’s bank account), instead of collecting their bank account details again.
- If the customer selects one their previously captured payment methods (UPOs), then continue with the next step.
- If not, then skip the rest of these steps, and perform the steps in the Payment (Without UPO) flow instead.
- Send a
createPayment()
request with its mandatory parameters, and include:sessionToken
-
"userPaymentOptionId": "<userPaymentOptionId of a previously stored customer payment method>"
selected by the customer. -
paymentOption.alternativePaymentMethod
block containing:.paymentMethod: "apmgw_ACH"
.AccountNumber
.RoutingNumber
Example
createPayment()
Request (With UPO)sfc.createPayment({ "sessionToken": "<sessiontoken>", "paymentOption": { "userPaymentOptionId": "8100521", "alternativePaymentMethod": { "paymentMethod": "apmgw_ACH", "AccountNumber": "111111111", "RoutingNumber": "999999992" } } }, function(res) { console.log(res); })
- The Bank Transfer (ACH) flow begins in your payment page when a “returning customer” enters a payment
- for Checkout
-
- The Bank Transfer (ACH) flow begins when the customer selects the Bank Transfer (ACH) payment method from the Payment Method Gallery.
- The customer selects one their previously captured payment methods (UPOs), enters an amount, and clicks the Deposit/Process button.
Handling the Response
You will receive a DMN notification as the transaction
Status
progresses fromPENDING
toUPDATE
toAPPROVED
:
(The next steps are identical to the steps in Payment (Without UPO) above)Payout (Withdrawal)
A Payout (Withdrawal) is performed using the REST API
/payout
request.Prerequisites
A
/payout
request is performed using a UPO (representing the customer bank account).UPOs can be generated in the following ways:
- A UPO is automatically created upon successful completion of a
/payment
request, as described in the payment topics. - Alternatively, you can generate a UPO as described in the Generating UPOs topic.
Sending a
/payout
RequestCall the
/payout
request with its mandatory parameters and include:userTokenId
userPaymentOption.userPaymentOptionId
urlDetails.notificationUrl
- The following parameters may be required if they are not already stored in the UPO:
userDetails
block containing:.firstName
,.lastName
,.email
Example
/payout
Request{ "merchantId": "<your merchantId>", "merchantSiteId": "<your merchantSiteId>", "userTokenId": "<unique customer identifier in merchant system>", "clientUniqueId": "<unique transaction ID in merchant system>", "clientRequestId": "<unique request ID in merchant system>", "currency": "USD", "amount": "35", "userPaymentOption": { "userPaymentOptionId": "<UPO received from previous deposit>" }, "deviceDetails": { "ipAddress": "127.0.0.1" }, "urlDetails": { "notificationUrl": "<The URL to which DMNs are sent>" }, "timeStamp": "<YYYYMMDDHHmmss>", "checksum": "<calculated checksum>" }
The request is processed, and returns a transaction notification with the final status.
- If the transaction is successful, then the following is returned:
- A response with “
status=APPROVED
“. - A DMN notification containing “
status=APPROVED
“.
- A response with “
- If the transaction is not successful, then the following is returned:
- A response with “
status=DECLINED
“. - A DMN notification containing “
status=DECLINED
“.
- A response with “
Example
/payout
Response{ "reason": "", "transactionStatus": "APPROVED", "clientRequestId": "W1Q3SBGE4", "internalRequestId": 17817071, "version": "1.0", "transactionId": "2110000000004333013", "merchantSiteId": "126006", "merchantId": "2502136204546424962", "clientUniqueId": "695701003", "errCode": 0, "userPaymentOptionId": "8054521", "paymentMethodErrorCode": "0", "userTokenId": "CEBQK9OVSLJA", "externalTransactionId": "2110000000068709", "status": "SUCCESS" }
Secure Bank Transfer
Prerequisites and Notes
Accepting the Nuvei Privacy Policy: Customers using the Secure Bank Transfer APM for the first time are required to:
- Have access to a “Privacy Notice” link in order to view the Nuvei Privacy Notice (https://nuvei.com/privacy-notice/).
- Must select the “I agree to the Privacy Policy” checkbox, before being allowed to continue to the next step.
The Secure Bank Transfer payment flow begins in your payment page when a customer selects the Secure Bank Transfer APM as their payment method.
- For a new customer, follow the steps in the Payment (Without UPO) flow.
- For a “returning customer”, offer them the option to select one their previously captured payment methods. Follow the steps in the Payment (With UPO) flow.
Payment (Without UPO)
- Collect the payment details and send the request:
Click tab to open…- The Secure Bank Transfer flow begins in your payment page when the customer enters an
amount
they wish to transfer, and selects the Secure Bank Transfer APM as the payment method. - Display a “Privacy Notice” link that the customer can click to view the Nuvei Privacy Notice (https://nuvei.com/privacy-notice/).
Display the “I agree to the Privacy Policy” checkbox, which the customer must select before allowing them to continue to the next step. - Prompt the customer to enter their user details:
firstName
,lastName
,email
,phone
,address
,city
,zip
,state
,identification
. - Generate a
sessionToken
by sending a/getSessionToken
request. - Send a
/payment
request with its mandatory parameters, and include:sessionToken
-
userTokenId
– Unique identifier of the customer in your system amount
paymentOption.alternativePaymentMethod: "apmgw_Secure_Bank_Transfer"
-
billingAddress
block containing:.firstName
,.lastName
,.email
,.phone
,.address
,.city
,.zip
,.state
. -
userDetails
block containing:.firstName
,.lastName
,.email
,.phone
,.address
,.city
,.zip
,.state
,.identification
. -
urlDetails.notificationUrl
Example
/payment
Request (Without UPO){ "sessionToken": "<sessionToken from getSessionToken>", "merchantId": "<your merchantId>", "merchantSiteId": "<your merchantSiteId>", "userTokenId": "<unique customer identifier in merchant system>", "clientRequestId": "<unique request ID in merchant system>", "clientUniqueId": "<unique transaction ID in merchant system>", "currency": "USD", "amount": "1", "paymentOption": { "alternativePaymentMethod": { "paymentMethod": "apmgw_Secure_Bank_Transfer" } }, "billingAddress": { "firstName": "John", "lastName": "Smith", "email": "john.smith@email.com", "phone": "1112223333", "address": "2992 Cameron Road", "city": "Newark", "zip": "14236", "state": "NY", "country": "US" }, "userDetails": { "firstName": "John", "lastName": "Smith", "email": "john.smith@email.com", "phone": "1112223333", "address": "2992 Cameron Road", "city": "Newark", "zip": "14236", "state": "NY", "country": "US", "identification": "123456780" }, "deviceDetails": { "deviceType": "DESKTOP", "deviceName": "iPhone 5s", "deviceOS": "iOS 10.2", "browser": "safari", "ipAddress": "192.168.2.38" }, "urlDetails": { "notificationUrl": "[The URL to which DMNs are sent]" }, "timeStamp": "<YYYYMMDDHHmmss>", "checksum": "<calculated checksum>" }
- The Secure Bank Transfer flow begins in your payment page when the customer enters a payment
amount
. -
Initiate a Session
Send theamount
and auserTokenId
(unique identifier of the customer in your system) in an/openOrder
request, which authenticates and sets up an order in the Nuvei system, and returns asessionToken
. -
Initialize the Web SDK
This instantiates the Web SDK with thesessionToken
received from the server call to/openOrder
. - Display a “Privacy Notice” link that the customer can click to view the Nuvei Privacy Notice (https://nuvei.com/privacy-notice/).
Display the “I agree to the Privacy Policy” checkbox, which the customer must select before allowing them to continue to the next step. - Allow the customer to select the Secure Bank Transfer APM as the payment method.
- Prompt the customer to enter their user details:
firstName
,lastName
,email
,phone
,address
,city
,zip
,state
,identification
. - Send a
createPayment()
request with its mandatory parameters, and include:sessionToken
paymentOption.alternativePaymentMethod: "apmgw_Secure_Bank_Transfer"
-
billingAddress
block containing:.firstName
,.lastName
,.email
,.phone
,.address
,.city
,.zip
,.state
,.country
. -
userDetails
block containing:.firstName
,.lastName
,.email
,.phone
,.address
,.city
,.zip
,.state
,.country
,.identification
.
Example
createPayment()
Request (Without UPO)sfc.createPayment({ "sessionToken": "<sessiontoken>", "paymentOption": { "alternativePaymentMethod": { "paymentMethod": "apmgw_Secure_Bank_Transfer" } }, "billingAddress": { "firstName": "John", "lastName": "Smith", "email": "john.smith@email.com", "phone": "1112223333", "address": "2992 Cameron Road", "city": "Newark", "zip": "14236", "state": "NY", "country": "US" }, "userDetails": { "firstName": "John", "lastName": "Smith", "email": "john.smith@email.com", "phone": "1112223333", "address": "2992 Cameron Road", "city": "Newark", "zip": "14236", "state": "NY", "country": "US", "identification": "123456780" } }, function(res) { console.log(res); })
- The Secure Bank Transfer flow begins when the customer selects the Secure Bank Transfer payment method from the Payment Method Gallery.
- The customer enters the Amount and the other required details, selects the “I agree to the Privacy Policy” checkbox, and clicks the Deposit/Process button.
- The customer is redirected to their bank’s site, so they can capture the bank account details of the account they want to pay from.
- for REST API
-
- The Secure Bank Transfer flow begins in your payment page when the customer enters an
amount
they wish to transfer, and selects the Secure Bank Transfer APM as the payment method. - Display a “Privacy Notice” link that the customer can click to view the Nuvei Privacy Notice (https://nuvei.com/privacy-notice/).
Display the “I agree to the Privacy Policy” checkbox, which the customer must select before allowing them to continue to the next step. - Prompt the customer to enter their user details:
firstName
,lastName
,email
,phone
,address
,city
,zip
,state
,identification
. - Generate a
sessionToken
by sending a/getSessionToken
request. - Send a
/payment
request with its mandatory parameters, and include:sessionToken
-
userTokenId
– Unique identifier of the customer in your system amount
paymentOption.alternativePaymentMethod: "apmgw_Secure_Bank_Transfer"
-
billingAddress
block containing:.firstName
,.lastName
,.email
,.phone
,.address
,.city
,.zip
,.state
. -
userDetails
block containing:.firstName
,.lastName
,.email
,.phone
,.address
,.city
,.zip
,.state
,.identification
. -
urlDetails.notificationUrl
Example
/payment
Request (Without UPO){ "sessionToken": "<sessionToken from getSessionToken>", "merchantId": "<your merchantId>", "merchantSiteId": "<your merchantSiteId>", "userTokenId": "<unique customer identifier in merchant system>", "clientRequestId": "<unique request ID in merchant system>", "clientUniqueId": "<unique transaction ID in merchant system>", "currency": "USD", "amount": "1", "paymentOption": { "alternativePaymentMethod": { "paymentMethod": "apmgw_Secure_Bank_Transfer" } }, "billingAddress": { "firstName": "John", "lastName": "Smith", "email": "john.smith@email.com", "phone": "1112223333", "address": "2992 Cameron Road", "city": "Newark", "zip": "14236", "state": "NY", "country": "US" }, "userDetails": { "firstName": "John", "lastName": "Smith", "email": "john.smith@email.com", "phone": "1112223333", "address": "2992 Cameron Road", "city": "Newark", "zip": "14236", "state": "NY", "country": "US", "identification": "123456780" }, "deviceDetails": { "deviceType": "DESKTOP", "deviceName": "iPhone 5s", "deviceOS": "iOS 10.2", "browser": "safari", "ipAddress": "192.168.2.38" }, "urlDetails": { "notificationUrl": "[The URL to which DMNs are sent]" }, "timeStamp": "<YYYYMMDDHHmmss>", "checksum": "<calculated checksum>" }
- The Secure Bank Transfer flow begins in your payment page when the customer enters an
- for Web SDK
-
- The Secure Bank Transfer flow begins in your payment page when the customer enters a payment
amount
. -
Initiate a Session
Send theamount
and auserTokenId
(unique identifier of the customer in your system) in an/openOrder
request, which authenticates and sets up an order in the Nuvei system, and returns asessionToken
. -
Initialize the Web SDK
This instantiates the Web SDK with thesessionToken
received from the server call to/openOrder
. - Display a “Privacy Notice” link that the customer can click to view the Nuvei Privacy Notice (https://nuvei.com/privacy-notice/).
Display the “I agree to the Privacy Policy” checkbox, which the customer must select before allowing them to continue to the next step. - Allow the customer to select the Secure Bank Transfer APM as the payment method.
- Prompt the customer to enter their user details:
firstName
,lastName
,email
,phone
,address
,city
,zip
,state
,identification
. - Send a
createPayment()
request with its mandatory parameters, and include:sessionToken
paymentOption.alternativePaymentMethod: "apmgw_Secure_Bank_Transfer"
-
billingAddress
block containing:.firstName
,.lastName
,.email
,.phone
,.address
,.city
,.zip
,.state
,.country
. -
userDetails
block containing:.firstName
,.lastName
,.email
,.phone
,.address
,.city
,.zip
,.state
,.country
,.identification
.
Example
createPayment()
Request (Without UPO)sfc.createPayment({ "sessionToken": "<sessiontoken>", "paymentOption": { "alternativePaymentMethod": { "paymentMethod": "apmgw_Secure_Bank_Transfer" } }, "billingAddress": { "firstName": "John", "lastName": "Smith", "email": "john.smith@email.com", "phone": "1112223333", "address": "2992 Cameron Road", "city": "Newark", "zip": "14236", "state": "NY", "country": "US" }, "userDetails": { "firstName": "John", "lastName": "Smith", "email": "john.smith@email.com", "phone": "1112223333", "address": "2992 Cameron Road", "city": "Newark", "zip": "14236", "state": "NY", "country": "US", "identification": "123456780" } }, function(res) { console.log(res); })
- The Secure Bank Transfer flow begins in your payment page when the customer enters a payment
- for Checkout
-
- The Secure Bank Transfer flow begins when the customer selects the Secure Bank Transfer payment method from the Payment Method Gallery.
- The customer enters the Amount and the other required details, selects the “I agree to the Privacy Policy” checkbox, and clicks the Deposit/Process button.
- The customer is redirected to their bank’s site, so they can capture the bank account details of the account they want to pay from.
- The Secure Bank Transfer flow begins in your payment page when the customer enters an
-
paymentOption.redirectUrl
(to a Secure Bank Transfer URL).Example of a Successful Response with a
paymentOption.redirectUrl
{ "reason": "", "orderId": "36298881", "transactionStatus": "REDIRECT", "clientRequestId": "GF1XTXTBM", "internalRequestId": 17817111, "version": "1.0", "merchantSiteId": "126006", "merchantId": "2502136204546424962", "clientUniqueId": "695701003", "errCode": 0, "paymentOption": { "redirectUrl": "https://cdn-int.safecharge.com/safecharge_resources/v1/get_to_post/index.html?eyJhbGciOiJSUzI1NiJ9.eyJkZXRhaWxzIjoiNzRDQkZEODMyOUI1RDMwMjNDM0YwNUJERThGRkFEMDRGQUNEMURCQUZFMEYxM0QwMzhFQkU5RjRCMzhFMTY2RTY5NEI0QzhDMDg2RjYzMDM2RTdCMkIyREVBRjRENTIyNkM2RDg1RUE5NkI2QjIzNjEzMUVBREI0NDBGRjU0QzE0RThGM0ZCODg2QzUwQzcyMTYxMURBMkNBQzg1NzI2NjRCOEE4ODE0MThEMkJCMjBFNTAzRDE4MTRBMkJBM0M1NjM3RDBCNkFFRDU5MUVFQzk2NEQwMUE2OEFFRUQyMDBBMUJBRUQ4RUIxNDBGNEEwQkQ2OTE3MzYxMEM4Rjg1MTAwMjMxREEzQkRDNUZGMkNGOUNGRURCQkZFMTQ2REEwMDdCQUY4QUUzN0Q1Q0JEQTYzOTQyNDhGMkFEQzhFMzMyODU4NzQ5MzUyNTI2NDFFREREM0Q4ODEwQTE3RkVCNTlBMjY4ODBCMkI2NjYzRkVENjk3RjRBMDhERTFBNzVDRDdBMzk2MzBGRjJBREU1Mjk0N0FERjFFQUVFMDA4Nzg4Q0REN0RCNjM5M0QwRTNEOTFBQkVERTY3MDFBMUQ0RkU3M0M3RTQwNUQ5RjlCNzZDMUYxRjQ5QzIxMjU4RERENDVDQUFDNTNERDg4MEVBNTk2Mzk1QzBDRDQ4NUY0OTQ4M0VERURGNDJFRkQzMUJBNkIwMUYwMTFGMTVGNzAyMUI2OTRBOUQ1NTU0OEEyQ0FDNUQ3MzVBNTgyMkJCMEFDOUFCQjhBQzc1Q0UxNzc1NjI0QzY1QUQ1MDU4NTVCRDI5RjFCMjJCMDlCREExM0I1QkFFQ0ZEMTA1MUI2NTQ4QTUxQkJDNDlEOTlCQUI4MUZERjAwNzAyQTBDQ0IyQTk3MDVENzE2MkZFRUQ5RjEzN0ZGN0FGMDUwNUIyMUIwOTY2RDA2NTFFQkRDRDA1MkY0RTE4MDY5ODlCOEFBQjJDMTIxNkIzNzJDREQ5RDQ0RDQ2N0EwOEUwQjI4MkUzOTkwNjAwOTcyQ0NDNEYwQjZEMDdERDg1ODk2MDYzM0UwNkExQ0VGRTY0OEExNzBDOTA3RjA3Qzg4NDA4NDI0MzQzRjNGQjM1MDZFN0EzRkEwNkQ0MDY5M0QyQkE3MzBGQTdCNzc3NDFFQUU2NDg2NEI2NjE3MDdGMzY0MDNCMTQyOTJDMTM1NzI5NDUwQ0YxRDk3NTcxQUE5NzJDQzg1MTVGQSIsIm1lcmNoYW50X2lkIjoiU2ZDaGFyZ2UiLCJpdiI6Ijk5RTM0MEMyNzg0MkNBOTlCQkIxQzUyNzVFQUFFNURBIiwidXJsIjoiaHR0cHM6Ly9zdGFnaW5nLnZlcmlmaWVkYWNoLmNvbS9jb25zdW1lci9BY3F1aXJlSW5mb0dhdGV3YXkuZG8ifQ.EF3K5UsPQYdua_YcRd9Yefl-KemNwEMq5-EXV7QWAZUbCQglncAaAHzzlW-sxq2XcVZcZ2qbxLkQqjzkB3tItTGUDmqysL-opqOdaaz54EKeHKC5hzQIp77DucIGYQhPxfOB_eAxTOPLvZ85c3woJ37m8BH8kuJPSoAjYrZ12geEQJQx4R2VxNT3QsxxryEWZvU1yKc8mjCl011nWz6cp4LZpHIMwUwvdCMJWUeJtAxC-Q6Ec4NqP93AFki9Ln0OOvenbOEBn3UpK_BncxKu7RFOzM8w4kSf0eopKC44awlROwZaO0k0htJAUikA_W-fgeLISuMpHmWMZz6X3Ju2Bg", "userPaymentOptionId": "8061731", "card": {} }, "sessionToken": "6fa38ea2-6f1a-4620-85ae-7deaf0d5f8f1", "userTokenId": "2J6QZH3UF9E2", "status": "SUCCESS" }
A successful request returns a
- Redirect the customer to their bank’s site, so they can capture the bank account details of the account they want to pay from.
-
The request is processed, and returns a transaction notification with the final status.
- If the transfer is successful, then the following is returned:
- A response with “
status=APPROVED
“. - A
userPaymentOptionId
(UPO):- This represents the customer’s bank account in the Nuvei system. It can be used in future payment transactions to represent the customer’s bank account details.
- A
preApprovalId
is stored in the UPO record. This is used by the system to automatically approve certain payment transactions when this payment method is used in the future.
- A DMN notification that includes the result of the transaction (“
status=APPROVED
“), sent to theurlDetails.notificationUrl
parameter that you provided in the request.
- A response with “
- If the transfer is not successful, then the following is returned:
- A response with “
status=DECLINED
“. - A DMN notification that includes the result of the transaction (“
status=DECLINED
“).
- A response with “
- If the transfer is successful, then the following is returned:
Payment (With UPO)
- Collect the payment details and send the request:
Click tab to open…- The Secure Bank Transfer payment flow begins in your payment page when a “returning customers” enters an
amount
they wish to transfer, and selects the Secure Bank Transfer APM as the payment method. - Generate a
sessionToken
by sending a/getSessionToken
request. - Call a /getUserUPOs request to retrieve a list of the customer’s UPOs.
(If no appropriate UPOs are returned, then skip the rest of these steps, and perform the steps in the Payment (Without UPO) flow instead.) - Offer the “returning customer” the option to select one their previously captured payment methods (stored in a UPO record, representing the customer’s bank account), instead of collecting their bank account details again.
- If the customer selects one their previously captured payment methods (UPOs), then continue with the next step.
- If the customer does not select one of their existing UPOs, then skip the rest of these steps and perform the steps in the Payment (Without UPO) flow instead.
- Send a
/payment
request with its mandatory parameters, and include:sessionToken
-
userTokenId
– Unique identifier of the customer in your system amount
"userPaymentOptionId": "<userPaymentOptionId of a previously stored customer payment method>"
paymentOption.alternativePaymentMethod: "apmgw_Secure_Bank_Transfer"
-
billingAddress
block containing:.firstName
,.lastName
,.email
,.phone
,.address
,.city
,.zip
,.state
,.country
. -
userDetails
block containing:.firstName
,.lastName
,.email
,.phone
,.address
,.city
,.zip
,.state
,.country
,.identification
. urlDetails.notificationUrl
Example of some parameters in the
/payment
Request (With UPO){ ... ... "sessionToken": "<sessionToken from getSessionToken>", "userTokenId": "<unique customer identifier in merchant system>", "amount": "125", "paymentOption": { "userPaymentOptionId": "8100521", "alternativePaymentMethod": { "paymentMethod": "apmgw_Secure_Bank_Transfer" } }, "billingAddress": { "firstName": "John", "lastName": "Smith", "email": "john.smith@email.com", "phone": "1112223333", "address": "2992 Cameron Road", "city": "Newark", "zip": "14236", "state": "NY", "country": "US" }, "userDetails": { "firstName": "John", "lastName": "Smith", "email": "john.smith@email.com", "phone": "1112223333", "address": "2992 Cameron Road", "city": "Newark", "zip": "14236", "state": "NY", "country": "US", "identification": "123456780" }, "urlDetails": { "notificationUrl": "[The URL to which DMNs are sent]" }, ... ... }
- The Secure Bank Transfer flow begins in your payment page when a “returning customer” enters a payment
amount
. -
Initiate a Session
Send theamount
and auserTokenId
(unique identifier of the customer in your system) in an/openOrder
request, which authenticates and sets up an order in the Nuvei system, and returns asessionToken
. -
Initialize the Web SDK
This instantiates the Web SDK with thesessionToken
received from the server call to/openOrder
. - Allow the customer to select the Secure Bank Transfer APM as the payment method.
- Call a /getUserUPOs request to retrieve a list of the customer’s UPOs.
(If no appropriate UPOs are returned, then skip the rest of these steps, and perform the steps in the Payment (Without UPO) flow instead.) - Offer the “returning customer” the option to select one their previously captured payment methods (stored in a UPO record, representing the customer’s bank account), instead of collecting their bank account details again.
- If the customer selects one their previously captured payment methods (UPOs), then continue with the next step.
- If not, then skip the rest of these steps, and perform the steps in the Payment (Without UPO) flow instead.
- Send a
createPayment()
request with its mandatory parameters, and include:sessionToken
-
"userPaymentOptionId": "<userPaymentOptionId of a previously stored customer payment method>"
selected by the customer. paymentOption.alternativePaymentMethod: "apmgw_Secure_Bank_Transfer"
-
billingAddress
block containing:.firstName
,.lastName
,.email
,.phone
,.address
,.city
,.zip
,.state
,.country
. -
userDetails
block containing:.firstName
,.lastName
,.email
,.phone
,.address
,.city
,.zip
,.state
,.country
,.identification
.
Example
createPayment()
Request (With UPO)sfc.createPayment({ "sessionToken": "<sessiontoken>", "paymentOption": { "userPaymentOptionId": "8100521", "alternativePaymentMethod": { "paymentMethod": "apmgw_Secure_Bank_Transfer" } }, "billingAddress": { "firstName": "John", "lastName": "Smith", "email": "john.smith@email.com", "phone": "1112223333", "address": "2992 Cameron Road", "city": "Newark", "zip": "14236", "state": "NY", "country": "US" }, "userDetails": { "firstName": "John", "lastName": "Smith", "email": "john.smith@email.com", "phone": "1112223333", "address": "2992 Cameron Road", "city": "Newark", "zip": "14236", "state": "NY", "country": "US", "identification": "123456780" } }, function(res) { console.log(res); })
- The Secure Bank Transfer flow begins when the customer selects the Secure Bank Transfer payment method from the Payment Method Gallery.
- The customer selects one their previously captured payment methods (UPOs), enters an amount, and clicks the Deposit/Process button.
- for REST API
-
- The Secure Bank Transfer payment flow begins in your payment page when a “returning customers” enters an
amount
they wish to transfer, and selects the Secure Bank Transfer APM as the payment method. - Generate a
sessionToken
by sending a/getSessionToken
request. - Call a /getUserUPOs request to retrieve a list of the customer’s UPOs.
(If no appropriate UPOs are returned, then skip the rest of these steps, and perform the steps in the Payment (Without UPO) flow instead.) - Offer the “returning customer” the option to select one their previously captured payment methods (stored in a UPO record, representing the customer’s bank account), instead of collecting their bank account details again.
- If the customer selects one their previously captured payment methods (UPOs), then continue with the next step.
- If the customer does not select one of their existing UPOs, then skip the rest of these steps and perform the steps in the Payment (Without UPO) flow instead.
- Send a
/payment
request with its mandatory parameters, and include:sessionToken
-
userTokenId
– Unique identifier of the customer in your system amount
"userPaymentOptionId": "<userPaymentOptionId of a previously stored customer payment method>"
paymentOption.alternativePaymentMethod: "apmgw_Secure_Bank_Transfer"
-
billingAddress
block containing:.firstName
,.lastName
,.email
,.phone
,.address
,.city
,.zip
,.state
,.country
. -
userDetails
block containing:.firstName
,.lastName
,.email
,.phone
,.address
,.city
,.zip
,.state
,.country
,.identification
. urlDetails.notificationUrl
Example of some parameters in the
/payment
Request (With UPO){ ... ... "sessionToken": "<sessionToken from getSessionToken>", "userTokenId": "<unique customer identifier in merchant system>", "amount": "125", "paymentOption": { "userPaymentOptionId": "8100521", "alternativePaymentMethod": { "paymentMethod": "apmgw_Secure_Bank_Transfer" } }, "billingAddress": { "firstName": "John", "lastName": "Smith", "email": "john.smith@email.com", "phone": "1112223333", "address": "2992 Cameron Road", "city": "Newark", "zip": "14236", "state": "NY", "country": "US" }, "userDetails": { "firstName": "John", "lastName": "Smith", "email": "john.smith@email.com", "phone": "1112223333", "address": "2992 Cameron Road", "city": "Newark", "zip": "14236", "state": "NY", "country": "US", "identification": "123456780" }, "urlDetails": { "notificationUrl": "[The URL to which DMNs are sent]" }, ... ... }
- The Secure Bank Transfer payment flow begins in your payment page when a “returning customers” enters an
- for Web SDK
-
- The Secure Bank Transfer flow begins in your payment page when a “returning customer” enters a payment
amount
. -
Initiate a Session
Send theamount
and auserTokenId
(unique identifier of the customer in your system) in an/openOrder
request, which authenticates and sets up an order in the Nuvei system, and returns asessionToken
. -
Initialize the Web SDK
This instantiates the Web SDK with thesessionToken
received from the server call to/openOrder
. - Allow the customer to select the Secure Bank Transfer APM as the payment method.
- Call a /getUserUPOs request to retrieve a list of the customer’s UPOs.
(If no appropriate UPOs are returned, then skip the rest of these steps, and perform the steps in the Payment (Without UPO) flow instead.) - Offer the “returning customer” the option to select one their previously captured payment methods (stored in a UPO record, representing the customer’s bank account), instead of collecting their bank account details again.
- If the customer selects one their previously captured payment methods (UPOs), then continue with the next step.
- If not, then skip the rest of these steps, and perform the steps in the Payment (Without UPO) flow instead.
- Send a
createPayment()
request with its mandatory parameters, and include:sessionToken
-
"userPaymentOptionId": "<userPaymentOptionId of a previously stored customer payment method>"
selected by the customer. paymentOption.alternativePaymentMethod: "apmgw_Secure_Bank_Transfer"
-
billingAddress
block containing:.firstName
,.lastName
,.email
,.phone
,.address
,.city
,.zip
,.state
,.country
. -
userDetails
block containing:.firstName
,.lastName
,.email
,.phone
,.address
,.city
,.zip
,.state
,.country
,.identification
.
Example
createPayment()
Request (With UPO)sfc.createPayment({ "sessionToken": "<sessiontoken>", "paymentOption": { "userPaymentOptionId": "8100521", "alternativePaymentMethod": { "paymentMethod": "apmgw_Secure_Bank_Transfer" } }, "billingAddress": { "firstName": "John", "lastName": "Smith", "email": "john.smith@email.com", "phone": "1112223333", "address": "2992 Cameron Road", "city": "Newark", "zip": "14236", "state": "NY", "country": "US" }, "userDetails": { "firstName": "John", "lastName": "Smith", "email": "john.smith@email.com", "phone": "1112223333", "address": "2992 Cameron Road", "city": "Newark", "zip": "14236", "state": "NY", "country": "US", "identification": "123456780" } }, function(res) { console.log(res); })
- The Secure Bank Transfer flow begins in your payment page when a “returning customer” enters a payment
- for Checkout
-
- The Secure Bank Transfer flow begins when the customer selects the Secure Bank Transfer payment method from the Payment Method Gallery.
- The customer selects one their previously captured payment methods (UPOs), enters an amount, and clicks the Deposit/Process button.
- The Secure Bank Transfer payment flow begins in your payment page when a “returning customers” enters an
- The request is processed:
- If the UPO (the payment method selected by the customer) has a
preApprovalId
(generated after a previous successful payment transaction), then Nuvei does not send the transaction to Secure Bank Transfer for processing.
Instead, the Nuvei APM Gateway immediately responds with “status=APPROVED
” or “status=DECLINED
“, according to rules set by Secure Bank Transfer. - If the UPO does not have a
preApprovalId
, then Secure Bank Transfer processes the transaction, and returns a transaction notification with the final status.
See step 4 (The request is processed…..) in Payment (Without UPO) (above)
- If the UPO (the payment method selected by the customer) has a
Appendix
Generating UPOs
Introduction
A
userPaymentOptionId
(UPO) represents a customer bank account in the Nuvei system. It is normally generated automatically upon successful completion of a/payment
request.However, you can also generate a UPO without first sending a
/payment
request first, as described below.Prerequisites
The
userTokenId
is a mandatory parameter when sending a/addUPOAPM
request.If the customer’s
userTokenId
is not yet registered in the Nuvei system, then you can register it by sending a/createUser
request with its mandatory parameters, and include these additional parameters:firstName
,lastName
, andemail
.Example
/createUser
Request{ "merchantId": "<your merchantId>", "merchantSiteId": "<your merchantSiteId>", "clientRequestId": "<unique request ID in merchant system>", "userTokenId": "<unique customer identifier in merchant system>", "firstName":"John", "lastName":"Smith", "email":"john.smith@email.com", "countryCode":"US", "timeStamp": "<YYYYMMDDHHmmss>", "checksum": "<calculated checksum>" }
Generating a
userPaymentOptionId
(UPO)Send an
/addUPOAPM
request with its mandatory parameters and include these parameters:-
userTokenId
– The unique customer identifier in your system. -
apmData.AccountNumber
– The customer’s bank account number. -
apmData.RoutingNumber
– The customer’s financial institution ABA number. (9-digits including leading zeros)
Example
/addUPOAPM
Request{ "merchantId":"<your merchantId>", "merchantSiteId":"<your merchantSiteId>", "clientRequestId":"<unique request ID in merchant system>", "userTokenId":"<unique customer identifier in merchant system>", "paymentMethodName":"apmgw_ACH", "apmData":{ "AccountNumber":"111111111", "RoutingNumber":"999999992" }, "billingAddress":{ "firstName":"John", "lastName":"Smith", "email":"john.smith@email.com", "phone":"1112223333", "address":"2992 Cameron Road", "city":"Newark", "zip":"14236", "state":"NY", "country":"US" }, "timeStamp":"<YYYYMMDDHHmmss>", "checksum":"<calculated checksum>" }
Example
/addUPOAPM
Response{ "reason":"", "merchantId":"2502136204546424962", "errCode":0, "clientRequestId":"HWMTWQ2RT", "userPaymentOptionId":8052151, "internalRequestId":17817221, "version":"1.0", "status":"SUCCESS", "merchantSiteId":"126006" }
Example Payment DMNs
Example “
Status=PENDING
” DMNppp_status=PENDING&Status=PENDING&ExErrCode=0&ErrCode=0&errApmCode=0&errApmDescription=&errScCode=0&errScDescription=&Reason=&ReasonCode=0&PPP_TransactionID=37067271&userid=Test&merchant_unique_id=&customData=&productId=&first_name=John&last_name=Smith&email=john.smith%40safecharge.com¤cy=USD&customField1=&customField2=&customField3=&customField4=&customField5=&customField6=&customField7=&customField8=&customField9=&customField10=&customField11=&customField12=&customField13=&customField14=&customField15=&invoice_id=&address1=340689+main+St.&address2=&country=United+States&state=&city=London&zip=&phone1=&phone2=&phone3=&client_ip=93.146.254.172&nameOnCard=&cardNumber=&bin=&noCVV=&acquirerId=&acquirerBank=Smart2Pay-PI&expMonth=&expYear=&Token=&tokenId=&AuthCode=111111111&AvsCode=&Cvv2Reply=&shippingCountry=&shippingState=&shippingCity=&shippingAddress=&shippingZip=&shippingFirstName=&shippingLastName=&shippingPhone=&shippingCell=&shippingMail=&total_discount=0.00&total_handling=0.00&total_shipping=0.00&total_tax=0.00&buyButtonProductBundleId=&merchant_site_id=3111&merchant_status=&action=&requestVersion=&message=PENDING&merchantLocale=&unknownParameters=&payment_method=apmgw_ACH&ID=&merchant_id=4972436454212160565&responseTimeStamp=2022-03-28.14%3A05%3A24&buyButtonProductId=&webMasterId=&appliedPromotions=&uniqueCC=&transactionType=Sale&externalEmail=&cardCompany=&eci=&user_token_id=Test&userPaymentOptionId=8155541&TransactionID=2110000000005780083&APMReferenceID=C68967F45F76F83F5FBFCCB6FAB859E6&orderTransactionId=18598041&totalAmount=1.26&dynamicDescriptor=QA+Test+site&item_name_1=NA&item_number_1=&item_amount_1=1.26&item_quantity_1=1&item_discount_1=0.00&item_handling_1=0.00&item_shipping_1=0.00&feeAmount=&amountWithoutFee=&houseNumber=&customCurrency=&externalToken_blockedCard=&externalToken_cardAcquirerId=&externalToken_cardAcquirerName=&externalToken_cardBin=&externalToken_cardBrandId=&externalToken_cardBrandName=&externalToken_cardExpiration=&externalToken_cardLength=&externalToken_cardMask=&externalToken_cardName=&externalToken_cardTypeId=&externalToken_cardTypeName=&externalToken_clubName=&externalToken_creditCompanyId=&externalToken_creditCompanyName=&externalToken_extendedCardType=&externalToken_Indication=&externalToken_tokenValue=&externalToken_tokenProvider=&upoRegistrationDate=20220324&type=DEPOSIT&clientRequestId=20220328170520&relatedTransactionId=&responsechecksum=4e5b4caef554c6b74920ea8fd326304b&advanceResponseChecksum=5f243f6b203c7e55c3037ab471b5201b
Example “
Status=UPDATE
” DMNppp_status=PENDING&Status=UPDATE&ExErrCode=0&ErrCode=0&errApmCode=0&errApmDescription=&errScCode=0&errScDescription=&Reason=&ReasonCode=0&PPP_TransactionID=37067271&userid=Test&merchant_unique_id=&customData=&productId=&first_name=John&last_name=Smith&email=john.smith%40safecharge.com¤cy=USD&customField1=&customField2=&customField3=&customField4=&customField5=&customField6=&customField7=&customField8=&customField9=&customField10=&customField11=&customField12=&customField13=&customField14=&customField15=&invoice_id=&address1=340689+main+St.&address2=&country=United+States&state=&city=London&zip=&phone1=&phone2=&phone3=&client_ip=93.146.254.172&nameOnCard=&cardNumber=&bin=&noCVV=&acquirerId=&acquirerBank=Smart2Pay-PI&expMonth=&expYear=&Token=&tokenId=&AuthCode=111111111&AvsCode=&Cvv2Reply=&shippingCountry=&shippingState=&shippingCity=&shippingAddress=&shippingZip=&shippingFirstName=&shippingLastName=&shippingPhone=&shippingCell=&shippingMail=&total_discount=0.00&total_handling=0.00&total_shipping=0.00&total_tax=0.00&buyButtonProductBundleId=&merchant_site_id=3111&merchant_status=&action=&requestVersion=&message=UPDATE&merchantLocale=&unknownParameters=&payment_method=apmgw_ACH&ID=&merchant_id=4972436454212160565&responseTimeStamp=2022-03-28.14%3A05%3A25&buyButtonProductId=&webMasterId=&appliedPromotions=&uniqueCC=&transactionType=Sale&externalEmail=&cardCompany=&eci=&user_token_id=Test&userPaymentOptionId=8155541&TransactionID=2110000000005780083&externalTransactionId=6463161&APMReferenceID=C68967F45F76F83F5FBFCCB6FAB859E6&orderTransactionId=18598041&totalAmount=1.26&dynamicDescriptor=QA+Test+site&item_name_1=NA&item_number_1=&item_amount_1=1.26&item_quantity_1=1&item_discount_1=0.00&item_handling_1=0.00&item_shipping_1=0.00&feeAmount=&amountWithoutFee=&houseNumber=&customCurrency=&externalToken_blockedCard=&externalToken_cardAcquirerId=&externalToken_cardAcquirerName=&externalToken_cardBin=&externalToken_cardBrandId=&externalToken_cardBrandName=&externalToken_cardExpiration=&externalToken_cardLength=&externalToken_cardMask=&externalToken_cardName=&externalToken_cardTypeId=&externalToken_cardTypeName=&externalToken_clubName=&externalToken_creditCompanyId=&externalToken_creditCompanyName=&externalToken_extendedCardType=&externalToken_Indication=&externalToken_tokenValue=&externalToken_tokenProvider=&upoRegistrationDate=20220324&type=DEPOSIT&clientRequestId=20220328170520&relatedTransactionId=&apmPayerInfo=%7B%22StatusInfo%22%3A%22%7B+StatusCode%3A+%2C+info%3A+%7D%22%7D&representmentInformation=Account+Linked&responsechecksum=4e5b4caef554c6b74920ea8fd326304b&advanceResponseChecksum=e4e217faf6fa6f66f48ea8021ad9a872
Example “
Status=APPROVED
” DMNppp_status=OK&Status=APPROVED&ExErrCode=0&ErrCode=0&errApmCode=0&errApmDescription=&errScCode=0&errScDescription=&Reason=&ReasonCode=0&PPP_TransactionID=37067271&userid=Test&merchant_unique_id=&customData=&productId=&first_name=John&last_name=Smith&email=john.smith%40safecharge.com¤cy=USD&customField1=&customField2=&customField3=&customField4=&customField5=&customField6=&customField7=&customField8=&customField9=&customField10=&customField11=&customField12=&customField13=&customField14=&customField15=&invoice_id=&address1=340689+main+St.&address2=&country=United+States&state=&city=London&zip=&phone1=&phone2=&phone3=&client_ip=93.146.254.172&nameOnCard=&cardNumber=&bin=&noCVV=&acquirerId=&acquirerBank=Smart2Pay-PI&expMonth=&expYear=&Token=&tokenId=&AuthCode=111111111&AvsCode=&Cvv2Reply=&shippingCountry=&shippingState=&shippingCity=&shippingAddress=&shippingZip=&shippingFirstName=&shippingLastName=&shippingPhone=&shippingCell=&shippingMail=&total_discount=0.00&total_handling=0.00&total_shipping=0.00&total_tax=0.00&buyButtonProductBundleId=&merchant_site_id=3111&merchant_status=&action=&requestVersion=&message=APPROVED&merchantLocale=&unknownParameters=&payment_method=apmgw_ACH&ID=&merchant_id=4972436454212160565&responseTimeStamp=2022-03-29.06%3A25%3A53&buyButtonProductId=&webMasterId=&appliedPromotions=&uniqueCC=&transactionType=Sale&externalEmail=&cardCompany=&eci=&user_token_id=Test&userPaymentOptionId=8155541&TransactionID=2110000000005780083&externalTransactionId=6463161&APMReferenceID=C68967F45F76F83F5FBFCCB6FAB859E6&orderTransactionId=18598041&totalAmount=1.26&dynamicDescriptor=QA+Test+site&item_name_1=NA&item_number_1=&item_amount_1=1.26&item_quantity_1=1&item_discount_1=0.00&item_handling_1=0.00&item_shipping_1=0.00&feeAmount=&amountWithoutFee=&houseNumber=&customCurrency=&externalToken_blockedCard=&externalToken_cardAcquirerId=&externalToken_cardAcquirerName=&externalToken_cardBin=&externalToken_cardBrandId=&externalToken_cardBrandName=&externalToken_cardExpiration=&externalToken_cardLength=&externalToken_cardMask=&externalToken_cardName=&externalToken_cardTypeId=&externalToken_cardTypeName=&externalToken_clubName=&externalToken_creditCompanyId=&externalToken_creditCompanyName=&externalToken_extendedCardType=&externalToken_Indication=&externalToken_tokenValue=&externalToken_tokenProvider=&upoRegistrationDate=20220324&type=DEPOSIT&clientRequestId=20220328170520&relatedTransactionId=&apmPayerInfo=%7B%22StatusInfo%22%3A%22%7B+StatusCode%3A+%2C+info%3A+%2C+originalAmount%3A+1.2600%2C+ProcessedAmount%3A+1.26%7D%22%2C%22AccountNumber%22%3A%111111111%22%7D&responsechecksum=f1f26100df03d560ba161bca759ed023&advanceResponseChecksum=0a52570c8dab67e027f08745d1770f85
- In addition to payment request responses, the system sends DMNs (Direct Merchant Notifications) containing the transaction processing results to a specified