• Documentation
  • API Reference
  • Documentation
  • API Reference
Expand All Collapse All
< BACK TO HOME
  • APMs Overview
    • Introduction to APMs
    • APM Integrations and Flows
    • APM Input Fields and APIs
    • APM subMethod Class
    • Account Details Capture
    • APM Countries and Currencies
    • Handling In-Process WebView
  • Global Guides
    • Afterpay
    • Apple Pay
      • Registering with Apple Pay
        • (Manually) Register in the Apple System
          • Create an Apple ID
          • Enroll in the Apple Developer Program
            • Submit an Enrollment Request
            • Complete the Enrollment Process
            • Activate your Apple Developer Program Account
          • Register a Merchant ID in the Apple System
            • Create a Merchant ID
            • Create a Payment Processing Certificate
            • Create a Merchant Identity Certificate
            • Register and Verify Your Domain
      • Nuvei Apple Pay Implementations
        • Payment Page using IFrame
        • Static Apple Pay Button
        • Static Pay Button (Web SDK)
        • Dynamic Apple Pay Button
      • Apple Pay Integration
        • Apple Pay (REST API)
        • Apple Pay (Web SDK)
        • Apple Pay (Simply Connect)
        • Apple Pay Integration Testing
    • Google Pay
      • Google Pay (REST API)
      • Google Pay (Web SDK)
      • Google Pay (Simply Connect)
    • Neteller
    • PayPal
    • PayWithCrypto
    • Skrill
    • Visa Checkout
      • Visa Checkout (REST API)
  • US and Canada Guides
    • ACH
    • Instant Bank Transfer (IBT)
    • Interac Combined
    • Interac eCashout
    • Interac e-Transfer
    • Interac Instant
    • Mazooma
    • PayNearMe
    • PlayPlus
      • PlayPlus (REST)
      • PlayPlus (Web SDK)
    • VIP Preferred
      • VIP Preferred (REST)
      • VIP Pref. (Web SDK/Simply Connect)
  • Europe Guides
    • Aircash
    • BANCOMAT Pay
    • Clearpay
    • Giropay
    • iDEAL
    • MB WAY
    • MobilePay
    • Okto Cash
    • Open Banking
    • PaySafeCard
    • Satispay
    • SEPA Payouts
    • Sofort
  • Latin America Guides
    • CLAVE
    • Colombia Payouts
    • Daviplata
    • Efecty
    • LATAM Payouts
    • Pay4Fun
    • Pay with Cash
    • PIX
    • PIX Payouts
    • PSE
    • QR Redeban
    • STPmex
    • WebPay
  • Asia Pacific Guides
    • AlipayHK
    • Dana
    • DragonPay
    • GCash
    • India Payouts
    • KakaoPay
    • Konbini
    • Local Payments Indonesia
    • NPP
    • QRIS
    • Touch ’n Go
    • TrueMoney
    • WeChat

ACH

Home    ACH

On this page:
  • Introduction
  • Supported Countries
  • Supported Currencies
  • APM Overview
  • Prerequisites and Notes
    • Platform-Specific Notes
  • Bank Transfer (ACH)
    • Payment (without UPO)
    • Payment (with UPO)
    • Payout
  • Secure Bank Transfer
    • Payment (without UPO)
    • Payment (with UPO)
    • Payout
    • Refund
  • Testing
  • Appendix
    • Generating UPOs
    • Example Payment DMNs
Attributes
  • METHOD TYPEACH
  • PAYMENTS
  • PAYOUTS
  • REFUNDS

Introduction

ACH (Automated Clearing House) is a US-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 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
  • The “Secure Bank Transfer” APM

Supported Countries

  • United States

Supported Currencies

  • USD

APM Overview

Bank Transfer (ACH) APM

APM NameNuvei APMIntegration Methods
ACHapmgw_ACH✓✓✓
APM Flow:This APM uses a "Direct" workflow.
Notes:
  • The first time a customer uses a particular bank account to perform a bank transfer, they capture their bank account details. Nuvei stores these details in an encrypted UPO (User Payment Option) record in the Nuvei system, for use in future transactions.
  • You can offer "returning customers" the option of selecting one of their previously captured payment methods (UPOs) instead of capturing their bank account details again.

Secure Bank Transfer APM

Nuvei’s Secure Bank Transfer ACH solution allows e-commerce merchants in the US to accept ACH payments. 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.

APM NameNuvei APMIntegration Methods
REST APIWeb SDKCheckout SDK
Secure Bank Transferapmgw_Secure_Bank_Transfer✓✓✓
APM Flow:This APM uses a "Redirect" workflow.
  • The first time the customer performs a bank transfer using a particular bank account, they are "redirected" to select their bank and bank account.
  • Subsequent bank transfers using that bank account are "Direct".

Prerequisites and Notes

  • This document assumes that you have completed all the account setup 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 from Nuvei.
  • You can contact Nuvei Support for any type of assistance.

Platform-Specific Notes

Press tab to open…

  • for REST API
  • for Web SDK
  • for Simply Connect
  • In addition to payment request responses, the system sends Direct Merchant Notifications (DMNs) 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).

  • Some parameters can be collected in both the /openOrder request and the createPayment() 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 following order of precedence is used to choose the single parameter value (from highest priority to lowest):
    1. The billingAddress block collected in the createPayment() request.
    2. The userDetails block collected in the createPayment() request.

  • Make sure that the ACH APM payment methods described in this guide are included in your Nuvei account.
  • When initiating your payment page using the Simply Connect method, set the country to “US” and the currency to “USD” to present these ACH APM payment methods in the payment method gallery.
  • No further integration steps are required.

for REST API
  • In addition to payment request responses, the system sends Direct Merchant Notifications (DMNs) 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).

for Web SDK
  • Some parameters can be collected in both the /openOrder request and the createPayment() 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 following order of precedence is used to choose the single parameter value (from highest priority to lowest):
    1. The billingAddress block collected in the createPayment() request.
    2. The userDetails block collected in the createPayment() request.

for Simply Connect
  • Make sure that the ACH APM payment methods described in this guide are included in your Nuvei account.
  • When initiating your payment page using the Simply Connect method, set the country to “US” and the currency to “USD” 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 to 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 another 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 payment flow begins on your payment page when a customer selects the Bank Transfer (ACH) payment method.

  • For a new customer, or for payment method details that were not previously captured, follow the steps in the Payment (without UPO).
  • For a “returning customer”, offer them the option to select one of their previously captured payment methods. Follow the steps in the Payment (with UPO).

Payouts

  • Payout

Refunds

  • See the Refund topic.

Voids

  • See the Void topic.

Prerequisites and Notes

  1. A userPaymentOptionId (UPO) 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.
  2. 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 preApprovalId indicates that:
    • The specified customer payment method is authenticated, and there is no need to perform the authentication process again.
    • 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.

Payment (without UPO)

Follow the relevant steps for each environment:

Press tab to open…

  • for REST API
  • for Web SDK
  • for Simply Connect
  1. The payment flow begins on your payment page when the customer enters a payment amount and selects the Bank Transfer (ACH) payment method.
  2. 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
  3. Generate a sessionToken by sending a /getSessionToken request.
  4. Send a /payment request with its mandatory parameters including:
    • userTokenId – Unique identifier of the customer in your system.
    • amount
    • paymentOption.alternativePaymentMethod block containing:
      • paymentMethod: “apmgw_ACH“
      • AccountNumber
      • RoutingNumber
    • deviceDetails block containing: ipAddress
    • 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
  1. 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": "100",
      "paymentOption": {
        "alternativePaymentMethod": {
          "paymentMethod": "apmgw_ACH",
          "AccountNumber": "111111111",
          "RoutingNumber": "999999992"
        }
      },
      "deviceDetails": {
        "ipAddress": "<customer's IP address>"
      },
      "billingAddress": {
        "firstName": "John",
        "lastName": "Smith",
        "email": "john.smith@email.com",
        "phone": "6175551414",
        "address": "22 Main Street",
        "city": "Boston",
        "zip": "02460",
        "state": "MA",
        "country": "US"
      },
      "userDetails": {
        "firstName": "John",
        "lastName": "Smith",
        "email": "john.smith@email.com",
        "phone": "6175551414",
        "address": "22 Main Street",
        "city": "Boston",
        "zip": "02460",
        "state": "MA",
        "country": "US",
        "identification": "123456789"
      },
      "urlDetails": {
        "notificationUrl": "[URL to which DMNs are sent]"
      },
      "timeStamp": "<YYYYMMDDHHmmss>",
      "checksum": "<calculated checksum>"
    }

  1. The payment flow begins on your payment page when the customer enters a payment amount.
  2. Initiate a Session
    Send the amount and a userTokenId (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 a sessionToken.
  3. Initialize the Web SDK
    This instantiates the Web SDK with the sessionToken received from the server call to /openOrder.
  4. Allow the customer to select the Bank Transfer (ACH) APM as the payment method.
  5. 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
  6. Send a createPayment() request with its mandatory parameters including:
    • sessionToken
    • paymentOption.alternativePaymentMethod block containing:
      • paymentMethod: “apmgw_ACH“
      • AccountNumber
      • RoutingNumber
    • deviceDetails block containing: ipAddress
    • billingAddress block containing: firstName, lastName, email, phone, address, city,  zip, state
    • userDetails block containing:  firstName, lastName, email, phone, address, city,  zip, state, identification
Example createPayment() Request (without UPO)
sfc.createPayment({
  sessionToken: "<sessiontoken>",
  paymentOption: {
    alternativePaymentMethod: {
      paymentMethod: "apmgw_ACH",
      AccountNumber: document.getElementById("AccountNumber").value,
      RoutingNumber: document.getElementById("RoutingNumber").value
    }
  },
  deviceDetails: {
    ipAddress: "<customer's IP address>"
  },
  billingAddress: {
    firstName: "John",
    lastName: "Smith",
    email: "john.smith@email.com",
    phone: "6175551414",
    address: "22 Main Street",
    city: "Boston",
    zip: "02460",
    state: "MA",
    country: "US"
  },
  userDetails: {
    firstName: "John",
    lastName: "Smith",
    email: "john.smith@email.com",
    phone: "6175551414",
    address: "22 Main Street",
    city: "Boston",
    zip: "02460",
    state: "MA",
    country: "US"
    identification: "123456789"
  }
}, function(res) {
  console.log(res);
})

  1. The Bank Transfer (ACH) flow begins when the customer selects the Bank Transfer (ACH) payment method from the payment method gallery.
  2. The customer enters the Account Number, Routing Number, and Amount, and presses the Deposit/Process button.

for REST API
  1. The payment flow begins on your payment page when the customer enters a payment amount and selects the Bank Transfer (ACH) payment method.
  2. 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
  3. Generate a sessionToken by sending a /getSessionToken request.
  4. Send a /payment request with its mandatory parameters including:
    • userTokenId – Unique identifier of the customer in your system.
    • amount
    • paymentOption.alternativePaymentMethod block containing:
      • paymentMethod: “apmgw_ACH“
      • AccountNumber
      • RoutingNumber
    • deviceDetails block containing: ipAddress
    • 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
  1. 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": "100",
      "paymentOption": {
        "alternativePaymentMethod": {
          "paymentMethod": "apmgw_ACH",
          "AccountNumber": "111111111",
          "RoutingNumber": "999999992"
        }
      },
      "deviceDetails": {
        "ipAddress": "<customer's IP address>"
      },
      "billingAddress": {
        "firstName": "John",
        "lastName": "Smith",
        "email": "john.smith@email.com",
        "phone": "6175551414",
        "address": "22 Main Street",
        "city": "Boston",
        "zip": "02460",
        "state": "MA",
        "country": "US"
      },
      "userDetails": {
        "firstName": "John",
        "lastName": "Smith",
        "email": "john.smith@email.com",
        "phone": "6175551414",
        "address": "22 Main Street",
        "city": "Boston",
        "zip": "02460",
        "state": "MA",
        "country": "US",
        "identification": "123456789"
      },
      "urlDetails": {
        "notificationUrl": "[URL to which DMNs are sent]"
      },
      "timeStamp": "<YYYYMMDDHHmmss>",
      "checksum": "<calculated checksum>"
    }

for Web SDK
  1. The payment flow begins on your payment page when the customer enters a payment amount.
  2. Initiate a Session
    Send the amount and a userTokenId (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 a sessionToken.
  3. Initialize the Web SDK
    This instantiates the Web SDK with the sessionToken received from the server call to /openOrder.
  4. Allow the customer to select the Bank Transfer (ACH) APM as the payment method.
  5. 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
  6. Send a createPayment() request with its mandatory parameters including:
    • sessionToken
    • paymentOption.alternativePaymentMethod block containing:
      • paymentMethod: “apmgw_ACH“
      • AccountNumber
      • RoutingNumber
    • deviceDetails block containing: ipAddress
    • billingAddress block containing: firstName, lastName, email, phone, address, city,  zip, state
    • userDetails block containing:  firstName, lastName, email, phone, address, city,  zip, state, identification
Example createPayment() Request (without UPO)
sfc.createPayment({
  sessionToken: "<sessiontoken>",
  paymentOption: {
    alternativePaymentMethod: {
      paymentMethod: "apmgw_ACH",
      AccountNumber: document.getElementById("AccountNumber").value,
      RoutingNumber: document.getElementById("RoutingNumber").value
    }
  },
  deviceDetails: {
    ipAddress: "<customer's IP address>"
  },
  billingAddress: {
    firstName: "John",
    lastName: "Smith",
    email: "john.smith@email.com",
    phone: "6175551414",
    address: "22 Main Street",
    city: "Boston",
    zip: "02460",
    state: "MA",
    country: "US"
  },
  userDetails: {
    firstName: "John",
    lastName: "Smith",
    email: "john.smith@email.com",
    phone: "6175551414",
    address: "22 Main Street",
    city: "Boston",
    zip: "02460",
    state: "MA",
    country: "US"
    identification: "123456789"
  }
}, function(res) {
  console.log(res);
})

for Simply Connect
  1. The Bank Transfer (ACH) flow begins when the customer selects the Bank Transfer (ACH) payment method from the payment method gallery.
  2. The customer enters the Account Number, Routing Number, and Amount, and presses the Deposit/Process button.

Handling the Response

As the transaction progresses in the flow from PENDING to UPDATE to APPROVED, you receive responses and DMNs:

  1. 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 DMN with status=PENDING.
  2. transactionStatus=UPDATE:
    • After a short time period, a preApprovalId is generated and stored in the UPO record.
    • You receive a DMN containing status=UPDATE.
      See Example DMN with status=UPDATE.
  3. 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 containing status=APPROVED.
        See Example DMN with status=APPROVED.
    • If the transfer is not successful, then the following is returned:
      • A response with status=DECLINED.
      • A DMN containing status=DECLINED.

Payment (with UPO)

Follow the relevant steps for each environment:

Press tab to open…

  • for REST API
  • for Web SDK
  • for Simply Connect
  1. The payment flow begins on your payment page when a “returning customer” enters a payment amount and selects the Bank Transfer (ACH) payment method.
  2. 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.)
  3. Offer the “returning customer” the option to select one of 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 of 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.
  4. Generate a sessionToken by sending a /getSessionToken request.
  5. Send a /payment request with its mandatory parameters including:
    • userTokenId – Unique identifier of the customer in your system.
    • amount
    • paymentOption.userPaymentOptionId – userPaymentOptionId of a previously stored customer payment method selected by the customer
    • deviceDetails block containing: ipAddress
    • billingAddress block containing: firstName, lastName, email, country
    • urlDetails.notificationUrl
Example of /payment Request (with 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": "100",
  "paymentOption": { 
    "userPaymentOptionId": "8100521"
  },
  "deviceDetails": {
    "ipAddress": "<customer's IP address>"
  },
  "billingAddress": {
    "firstName": "John",
    "lastName": "Smith",
    "email": "john.smith@email.com",
    "country": "US"
  },
  "urlDetails": {
    "notificationUrl": "[URL to which DMNs are sent]"
  },
  "timeStamp": "<YYYYMMDDHHmmss>",
  "checksum": "<calculated checksum>"
}

  1. The payment flow begins on your payment page when a “returning customer” enters a payment amount.
  2. Initiate a Session
    Send the amount and a userTokenId (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 a sessionToken.
  3. Initialize the Web SDK
    This instantiates the Web SDK with the sessionToken received from the server call to /openOrder.
  4. Allow the customer to select the Bank Transfer (ACH) APM as the payment method.
  5. 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.)
  6. Offer the “returning customer” the option to select one of 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 of 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.
  7. Send a createPayment() request with its mandatory parameters including:
    • userTokenId – Unique identifier of the customer in your system.
    • amount
    • paymentOption.userPaymentOptionId – userPaymentOptionId of a previously stored customer payment method selected by the customer
    • deviceDetails block containing: ipAddress
    • billingAddress block containing: firstName, lastName, email, country
    • urlDetails.notificationUrl
Example createPayment() Request (With UPO)
sfc.createPayment({
  sessionToken: "<sessiontoken>",
  paymentOption: {
    userPaymentOptionId: "8100521"
  },
  deviceDetails: {
    ipAddress: "<customer's IP address>"
  },
  billingAddress: {
    firstName: "John",
    lastName: "Smith",
    email: "john.smith@email.com",
    country: "US"
  },
  urlDetails: {
    notificationUrl: "[URL to which DMNs are sent]"
  },
}, function(res) {
  console.log(res);
});

  1. The Bank Transfer (ACH) flow begins when the customer selects the Bank Transfer (ACH) payment method from the payment method gallery.
  2. The customer selects one of their previously captured payment methods (UPOs), enters an amount, and presses the Deposit/Process button.

for REST API
  1. The payment flow begins on your payment page when a “returning customer” enters a payment amount and selects the Bank Transfer (ACH) payment method.
  2. 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.)
  3. Offer the “returning customer” the option to select one of 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 of 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.
  4. Generate a sessionToken by sending a /getSessionToken request.
  5. Send a /payment request with its mandatory parameters including:
    • userTokenId – Unique identifier of the customer in your system.
    • amount
    • paymentOption.userPaymentOptionId – userPaymentOptionId of a previously stored customer payment method selected by the customer
    • deviceDetails block containing: ipAddress
    • billingAddress block containing: firstName, lastName, email, country
    • urlDetails.notificationUrl
Example of /payment Request (with 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": "100",
  "paymentOption": { 
    "userPaymentOptionId": "8100521"
  },
  "deviceDetails": {
    "ipAddress": "<customer's IP address>"
  },
  "billingAddress": {
    "firstName": "John",
    "lastName": "Smith",
    "email": "john.smith@email.com",
    "country": "US"
  },
  "urlDetails": {
    "notificationUrl": "[URL to which DMNs are sent]"
  },
  "timeStamp": "<YYYYMMDDHHmmss>",
  "checksum": "<calculated checksum>"
}

for Web SDK
  1. The payment flow begins on your payment page when a “returning customer” enters a payment amount.
  2. Initiate a Session
    Send the amount and a userTokenId (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 a sessionToken.
  3. Initialize the Web SDK
    This instantiates the Web SDK with the sessionToken received from the server call to /openOrder.
  4. Allow the customer to select the Bank Transfer (ACH) APM as the payment method.
  5. 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.)
  6. Offer the “returning customer” the option to select one of 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 of 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.
  7. Send a createPayment() request with its mandatory parameters including:
    • userTokenId – Unique identifier of the customer in your system.
    • amount
    • paymentOption.userPaymentOptionId – userPaymentOptionId of a previously stored customer payment method selected by the customer
    • deviceDetails block containing: ipAddress
    • billingAddress block containing: firstName, lastName, email, country
    • urlDetails.notificationUrl
Example createPayment() Request (With UPO)
sfc.createPayment({
  sessionToken: "<sessiontoken>",
  paymentOption: {
    userPaymentOptionId: "8100521"
  },
  deviceDetails: {
    ipAddress: "<customer's IP address>"
  },
  billingAddress: {
    firstName: "John",
    lastName: "Smith",
    email: "john.smith@email.com",
    country: "US"
  },
  urlDetails: {
    notificationUrl: "[URL to which DMNs are sent]"
  },
}, function(res) {
  console.log(res);
});

for Simply Connect
  1. The Bank Transfer (ACH) flow begins when the customer selects the Bank Transfer (ACH) payment method from the payment method gallery.
  2. The customer selects one of their previously captured payment methods (UPOs), enters an amount, and presses the Deposit/Process button.

Handling the Response

You receive a DMN as the transactionStatus progresses from PENDING to UPDATE to APPROVED:
(The next steps are identical to the steps in Payment (without UPO) above.)

  1. transactionStatus=PENDING
  2. transactionStatus=UPDATE
  3. transactionStatus=APPROVED

Payout

A payout 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 Request

Call the /payout request with its mandatory parameters including:

  • userTokenId – Unique identifier of the customer in your system.
  • userPaymentOption block containing: userPaymentOptionId
  • deviceDetails block containing: ipAddress
  • urlDetails.notificationUrl
  • The following parameters may be required if they are not already stored in the UPO:
    userDetails block containing: firstName, lastName, email
    If they are not present, please use the /updateUser method to add them.

Press here for more information about updating and/or adding user details.

Example /payout Request
{
  "merchantId": "<your merchantId>",
  "merchantSiteId": "<your merchantSiteId>",
  "userTokenId": "<unique customer identifier in merchant system>",
  "clientRequestId": "<unique request ID in merchant system>",
  "currency": "USD",
  "amount": "100",
  "userPaymentOption": {
    "userPaymentOptionId": "<UPO received from previous deposit>"
  },  
  "deviceDetails": {
    "ipAddress": "<customer's IP address>"
  },
  "urlDetails": {
    "notificationUrl": "<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 containing status=APPROVED.
  • If the transaction is not successful, then the following is returned:
    • A response with status=DECLINED.
    • A DMN containing status=DECLINED.
Example /payout Response
{
  "reason": "",
  "transactionStatus": "APPROVED",
  "clientRequestId": "W1Q3SBGE4",
  "internalRequestId": 17817071,
  "version": "1.0",
  "transactionId": "2110000000004333013",
  "merchantSiteId": "126006",
  "merchantId": "2502136204546424962",
  "additionalTransactionBankId": "1802509592"
  "clientUniqueId": "695701003",
  "errCode": 0,
  "userPaymentOptionId": "8054521",
  "paymentMethodErrorCode": "0",
  "userTokenId": "CEBQK9OVSLJA",
  "externalTransactionId": "2110000000068709",
  "status": "SUCCESS"
}

Refund

See the Refund topic.

Voids

See the Void topic.

Secure Bank Transfer

You can use the Secure Bank Transfer APM integration to perform payments (deposits), payouts (withdrawals), and refunds.

Contact Nuvei Support for implementation support.

Payments

The payment flow begins on your payment page when a customer selects the Secure Bank Transfer 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 of their previously captured payment methods. Follow the steps in the Payment (with UPO) flow.

Payouts

  • Payout (same flow as for Bank Transfer (ACH))

Refunds

  • See the Refund topic.

Prerequisites and Notes

  1. A userPaymentOptionId (UPO) 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.
  2. 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 preApprovalId indicates that:
    • The specified customer payment method is authenticated, and there is no need to perform the authentication process again.
    • 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.
  3. You have the option to enable the Privacy Policy acceptance (optional) feature, by contacting Nuvei to configure this feature in your merchant account.
    This feature forces customers who are using the Secure Bank Transfer APM for the first time to agree to the “Privacy Notice”, before allowing them to continue to the next step. If you choose to use this feature, then:
    • You should display a link for the customer to view the Nuvei Privacy Notice (https://nuvei.com/privacy-notice/).
    • Provide a checkbox for the customer to accept the “Privacy Notice”, before being allowed to continue to the next step.
      For example, “I agree to the Privacy Policy”.
  4. You have the option to enable the “Automatic Transaction Approval” (optional) feature, however, you are responsible for all losses from “returned transactions” and other risks.
    To enable this, contact Nuvei to configure this feature in your merchant account.

Payment (without UPO)

Follow the relevant steps for each environment:

Press tab to open…

  • for REST API
  • for Web SDK
  • for Simply Connect
  1. The payment flow begins on your payment page when the customer enters an amount they wish to transfer, and selects the Secure Bank Transfer payment method.
  2. This is an optional step, if you enabled the “Privacy Notice” acceptance option (see the prerequisite above):
    • Display a “Privacy Notice” link for the customer to press 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.
  3. Prompt the customer to enter their user details: firstName, lastName, email, phone, address, city, zip, state, identification.
  4. Generate a sessionToken by sending a /getSessionToken request.
  5. Send a /payment request with its mandatory parameters including:
    • userTokenId – Unique identifier of the customer in your system.
    • amount
    • paymentOption.alternativePaymentMethod: “apmgw_Secure_Bank_Transfer“
    • deviceDetails block containing: ipAddress
    • 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": "100",
        "paymentOption": {
          "alternativePaymentMethod": {
            "paymentMethod": "apmgw_Secure_Bank_Transfer"
          }
        },
        "billingAddress": {
          "firstName": "John",
          "lastName": "Smith",
          "email": "john.smith@email.com",
          "phone": "6175551414",
          "address": "22 Main Street",
          "city": "Boston",
          "zip": "02460",
          "state": "MA",
          "country": "US"
        },
        "userDetails": {
          "firstName": "John",
          "lastName": "Smith",
          "email": "john.smith@email.com",
          "phone": "6175551414",
          "address": "22 Main Street",
          "city": "Boston",
          "zip": "02460",
          "state": "MA",
          "country": "US",
          "identification": "123456789"
        },
        "deviceDetails": {
          "ipAddress": "<customer's IP address>"
        },
        "urlDetails": {
          "notificationUrl": "[URL to which DMNs are sent]"
        },
        "timeStamp": "<YYYYMMDDHHmmss>",
        "checksum": "<calculated checksum>"
      }
  6. A successful request returns a 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"
    }
  7. Redirect the customer to their bank’s site, so they can capture the bank account details of the account they want to pay from.

  1. The payment flow begins on your payment page when the customer enters a payment amount.
  2. Initiate a Session
    Send the amount and a userTokenId (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 a sessionToken.
  3. Initialize the Web SDK
    This instantiates the Web SDK with the sessionToken received from the server call to /openOrder.
  4. This is an optional step, if you enabled the “Privacy Notice” acceptance option (see the prerequisite above):
    • Display a “Privacy Notice” link for the customer to press 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.
  5. Allow the customer to select the Secure Bank Transfer APM as the payment method.
  6. Prompt the customer to enter their user details:
    firstName, lastName, email, phone, address, city, zip, state, identification.
  7. Send a createPayment() request with its mandatory parameters including:
    • userTokenId – Unique identifier of the customer in your system.
    • amount
    • paymentOption.alternativePaymentMethod: “apmgw_Secure_Bank_Transfer“
    • deviceDetails block containing: ipAddress
    • 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 createPayment() Request (without UPO)
      sfc.createPayment({
        sessionToken: "<sessiontoken>",
        paymentOption: {
          alternativePaymentMethod: {
            paymentMethod: "apmgw_Secure_Bank_Transfer"
          }
        },
        deviceDetails: {
          ipAddress: "<customer's IP address>"
        },
        billingAddress: {
          firstName: "John",
          lastName: "Smith",
          email: "john.smith@email.com",
          phone: "6175551414",
          address: "22 Main Street",
          city: "Boston",
          zip: "02460",
          state: "MA",
          country: "US"
        },
        userDetails: {
          firstName: "John",
          lastName: "Smith",
          email: "john.smith@email.com",
          phone: "6175551414",
          address: "22 Main Street",
          city: "Boston",
          zip: "02460",
          state: "MA",
          country: "US",
          identification: "123456789"
        },
        urlDetails: {
          notificationUrl: "[URL to which DMNs are sent]"
        },
      }, function(res) {
        console.log(res);
      });
  8. A successful request returns a 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"
    }
  9. Redirect the customer to their bank’s site, so they can capture the bank account details of the account they want to pay from.

  1. The Secure Bank Transfer flow begins when the customer selects the Secure Bank Transfer payment method from the payment method gallery.
  2. This is an optional step, if you enabled the “Privacy Notice” acceptance option (see the prerequisite above):
    1. Display a “Privacy Notice” link for the customer to press to view the Nuvei Privacy Notice (https://nuvei.com/privacy-notice/).
    2. Display the “I agree to the Privacy Policy” checkbox, which the customer must select before allowing them to continue to the next step.
  3. The customer enters the Amount and other required details, and presses the Deposit/Process button.
  4. 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
  1. The payment flow begins on your payment page when the customer enters an amount they wish to transfer, and selects the Secure Bank Transfer payment method.
  2. This is an optional step, if you enabled the “Privacy Notice” acceptance option (see the prerequisite above):
    • Display a “Privacy Notice” link for the customer to press 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.
  3. Prompt the customer to enter their user details: firstName, lastName, email, phone, address, city, zip, state, identification.
  4. Generate a sessionToken by sending a /getSessionToken request.
  5. Send a /payment request with its mandatory parameters including:
    • userTokenId – Unique identifier of the customer in your system.
    • amount
    • paymentOption.alternativePaymentMethod: “apmgw_Secure_Bank_Transfer“
    • deviceDetails block containing: ipAddress
    • 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": "100",
        "paymentOption": {
          "alternativePaymentMethod": {
            "paymentMethod": "apmgw_Secure_Bank_Transfer"
          }
        },
        "billingAddress": {
          "firstName": "John",
          "lastName": "Smith",
          "email": "john.smith@email.com",
          "phone": "6175551414",
          "address": "22 Main Street",
          "city": "Boston",
          "zip": "02460",
          "state": "MA",
          "country": "US"
        },
        "userDetails": {
          "firstName": "John",
          "lastName": "Smith",
          "email": "john.smith@email.com",
          "phone": "6175551414",
          "address": "22 Main Street",
          "city": "Boston",
          "zip": "02460",
          "state": "MA",
          "country": "US",
          "identification": "123456789"
        },
        "deviceDetails": {
          "ipAddress": "<customer's IP address>"
        },
        "urlDetails": {
          "notificationUrl": "[URL to which DMNs are sent]"
        },
        "timeStamp": "<YYYYMMDDHHmmss>",
        "checksum": "<calculated checksum>"
      }
  6. A successful request returns a 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"
    }
  7. Redirect the customer to their bank’s site, so they can capture the bank account details of the account they want to pay from.

for Web SDK
  1. The payment flow begins on your payment page when the customer enters a payment amount.
  2. Initiate a Session
    Send the amount and a userTokenId (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 a sessionToken.
  3. Initialize the Web SDK
    This instantiates the Web SDK with the sessionToken received from the server call to /openOrder.
  4. This is an optional step, if you enabled the “Privacy Notice” acceptance option (see the prerequisite above):
    • Display a “Privacy Notice” link for the customer to press 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.
  5. Allow the customer to select the Secure Bank Transfer APM as the payment method.
  6. Prompt the customer to enter their user details:
    firstName, lastName, email, phone, address, city, zip, state, identification.
  7. Send a createPayment() request with its mandatory parameters including:
    • userTokenId – Unique identifier of the customer in your system.
    • amount
    • paymentOption.alternativePaymentMethod: “apmgw_Secure_Bank_Transfer“
    • deviceDetails block containing: ipAddress
    • 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 createPayment() Request (without UPO)
      sfc.createPayment({
        sessionToken: "<sessiontoken>",
        paymentOption: {
          alternativePaymentMethod: {
            paymentMethod: "apmgw_Secure_Bank_Transfer"
          }
        },
        deviceDetails: {
          ipAddress: "<customer's IP address>"
        },
        billingAddress: {
          firstName: "John",
          lastName: "Smith",
          email: "john.smith@email.com",
          phone: "6175551414",
          address: "22 Main Street",
          city: "Boston",
          zip: "02460",
          state: "MA",
          country: "US"
        },
        userDetails: {
          firstName: "John",
          lastName: "Smith",
          email: "john.smith@email.com",
          phone: "6175551414",
          address: "22 Main Street",
          city: "Boston",
          zip: "02460",
          state: "MA",
          country: "US",
          identification: "123456789"
        },
        urlDetails: {
          notificationUrl: "[URL to which DMNs are sent]"
        },
      }, function(res) {
        console.log(res);
      });
  8. A successful request returns a 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"
    }
  9. Redirect the customer to their bank’s site, so they can capture the bank account details of the account they want to pay from.

for Simply Connect
  1. The Secure Bank Transfer flow begins when the customer selects the Secure Bank Transfer payment method from the payment method gallery.
  2. This is an optional step, if you enabled the “Privacy Notice” acceptance option (see the prerequisite above):
    1. Display a “Privacy Notice” link for the customer to press to view the Nuvei Privacy Notice (https://nuvei.com/privacy-notice/).
    2. Display the “I agree to the Privacy Policy” checkbox, which the customer must select before allowing them to continue to the next step.
  3. The customer enters the Amount and other required details, and presses the Deposit/Process button.
  4. 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.

Handling the Response

The transaction begins to be processed and the system returns the following responses:

Optional – Only applicable to the “Automatic Transaction Approval” feature:

If you enabled the optional “Automatic Transaction Approval” feature, then 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) with a preApprovalId stored in the UPO record.
    • A DMN that includes the result of the transaction (status=APPROVED), sent to the urlDetails.notificationUrl parameter that you provided in the request.
  • If the transfer is not successful, then the following is returned:
    • A response with status=DECLINED.
    • A DMN that includes the result of the transaction (status=DECLINED).

The transaction status progresses from PENDING to UPDATE, and then to APPROVED or DECLINED.
You receive the following responses and DMNs:

  1. 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 DMN with status=PENDING.
  2. transactionStatus=UPDATE:
    • After a short time period, a preApprovalId is generated and stored in the UPO record.
    • You receive a DMN containing status=UPDATE.
      See Example DMN with status=UPDATE.
  3. The request is processed and returns a transaction notification with the final status within 2–5 days.
    • transactionStatus=APPROVED:
      If the transfer is successful, then the following is returned:
      • A response with status=APPROVED.
      • A DMN containing status=APPROVED.
        See Example DMN with status=APPROVED.
    • status=DECLINED:
      If the transfer is not successful, then the following is returned:
      • A response with status=DECLINED.
      • A DMN containing status=DECLINED.

Payment (with UPO)

Follow the relevant steps for each environment:

Press tab to open…

  • for REST API
  • for Web SDK
  • for Simply Connect
  1. The payment flow begins on your payment page when a “returning customer” enters an amount they wish to transfer, and selects the Secure Bank Transfer payment method.
  2. Generate a sessionToken by sending a /getSessionToken request.
  3. 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.)
  4. Offer the “returning customer” the option to select one of 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 of 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.
  5. Send a /payment request with its mandatory parameters including:
    • userTokenId – Unique identifier of the customer in your system
    • amount
    • userPaymentOptionId – userPaymentOptionId of a previously stored customer payment method
    • deviceDetails block containing: ipAddress
    • 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 /payment Request (with 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": "100",
  "paymentOption": {
    "userPaymentOptionId": "8100521",
    "alternativePaymentMethod": {
      "paymentMethod": "apmgw_Secure_Bank_Transfer"
    }
  },
  deviceDetails: {
    ipAddress: "<customer's IP address>"
  },
  "billingAddress": {
    "firstName": "John",
    "lastName": "Smith",
    "email": "john.smith@email.com",
    "phone": "6175551414",
    "address": "22 Main Street",
    "city": "Boston",
    "zip": "02460",
    "state": "MA",
    "country": "US"
  },
  "userDetails": {
    "firstName": "John",
    "lastName": "Smith",
    "email": "john.smith@email.com",
    "phone": "6175551414",
    "address": "22 Main Street",
    "city": "Boston",
    "zip": "02460",
    "state": "MA",
    "country": "US",
    "identification": "123456789"
  },
  "urlDetails": {
    "notificationUrl": "[URL to which DMNs are sent]"
  },
  "timeStamp": "<YYYYMMDDHHmmss>",
  "checksum": "<calculated checksum>"
}

  1. The payment flow begins on your payment page when a “returning customer” enters a payment amount.
  2. Initiate a Session
    Send the amount and a userTokenId (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 a sessionToken.
  3. Initialize the Web SDK
    This instantiates the Web SDK with the sessionToken received from the server call to /openOrder.
  4. Allow the customer to select the Secure Bank Transfer APM as the payment method.
  5. 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.)
  6. Offer the “returning customer” the option to select one of 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 of 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.
  7. Send a createPayment() request with its mandatory parameters including:
    • 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“
    • deviceDetails block containing: ipAddress
    • 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 createPayment() Request (with UPO)
sfc.createPayment({
  sessionToken: "<sessiontoken>",  
  paymentOption: {
    userPaymentOptionId: "8100521",
    alternativePaymentMethod: {
      paymentMethod: "apmgw_Secure_Bank_Transfer"      
    }
  },
  deviceDetails: {
    ipAddress: "<customer's IP address>"
  },
  billingAddress: {
    firstName: "John",
    lastName: "Smith",
    email: "john.smith@email.com",
    phone: "6175551414",
    address: "22 Main Street",
    city: "Boston",
    zip: "02460",
    state: "MA",
    country: "US"
  },
  userDetails: {
    firstName: "John",
    lastName: "Smith",
    email: "john.smith@email.com",
    phone: "6175551414",
    address: "22 Main Street",
    city: "Boston",
    zip: "02460",
    state: "MA",
    country: "US",
    identification: "123456789"
  },
  urlDetails: {
    notificationUrl: "[URL to which DMNs are sent]"
  },
}, function(res) {
  console.log(res);
});

  1. The Secure Bank Transfer flow begins when the customer selects the Secure Bank Transfer payment method from the payment method gallery.
  2. The customer selects one of their previously captured payment methods (UPOs), enters an amount, and presses the Deposit/Process button.

for REST API
  1. The payment flow begins on your payment page when a “returning customer” enters an amount they wish to transfer, and selects the Secure Bank Transfer payment method.
  2. Generate a sessionToken by sending a /getSessionToken request.
  3. 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.)
  4. Offer the “returning customer” the option to select one of 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 of 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.
  5. Send a /payment request with its mandatory parameters including:
    • userTokenId – Unique identifier of the customer in your system
    • amount
    • userPaymentOptionId – userPaymentOptionId of a previously stored customer payment method
    • deviceDetails block containing: ipAddress
    • 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 /payment Request (with 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": "100",
  "paymentOption": {
    "userPaymentOptionId": "8100521",
    "alternativePaymentMethod": {
      "paymentMethod": "apmgw_Secure_Bank_Transfer"
    }
  },
  deviceDetails: {
    ipAddress: "<customer's IP address>"
  },
  "billingAddress": {
    "firstName": "John",
    "lastName": "Smith",
    "email": "john.smith@email.com",
    "phone": "6175551414",
    "address": "22 Main Street",
    "city": "Boston",
    "zip": "02460",
    "state": "MA",
    "country": "US"
  },
  "userDetails": {
    "firstName": "John",
    "lastName": "Smith",
    "email": "john.smith@email.com",
    "phone": "6175551414",
    "address": "22 Main Street",
    "city": "Boston",
    "zip": "02460",
    "state": "MA",
    "country": "US",
    "identification": "123456789"
  },
  "urlDetails": {
    "notificationUrl": "[URL to which DMNs are sent]"
  },
  "timeStamp": "<YYYYMMDDHHmmss>",
  "checksum": "<calculated checksum>"
}

for Web SDK
  1. The payment flow begins on your payment page when a “returning customer” enters a payment amount.
  2. Initiate a Session
    Send the amount and a userTokenId (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 a sessionToken.
  3. Initialize the Web SDK
    This instantiates the Web SDK with the sessionToken received from the server call to /openOrder.
  4. Allow the customer to select the Secure Bank Transfer APM as the payment method.
  5. 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.)
  6. Offer the “returning customer” the option to select one of 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 of 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.
  7. Send a createPayment() request with its mandatory parameters including:
    • 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“
    • deviceDetails block containing: ipAddress
    • 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 createPayment() Request (with UPO)
sfc.createPayment({
  sessionToken: "<sessiontoken>",  
  paymentOption: {
    userPaymentOptionId: "8100521",
    alternativePaymentMethod: {
      paymentMethod: "apmgw_Secure_Bank_Transfer"      
    }
  },
  deviceDetails: {
    ipAddress: "<customer's IP address>"
  },
  billingAddress: {
    firstName: "John",
    lastName: "Smith",
    email: "john.smith@email.com",
    phone: "6175551414",
    address: "22 Main Street",
    city: "Boston",
    zip: "02460",
    state: "MA",
    country: "US"
  },
  userDetails: {
    firstName: "John",
    lastName: "Smith",
    email: "john.smith@email.com",
    phone: "6175551414",
    address: "22 Main Street",
    city: "Boston",
    zip: "02460",
    state: "MA",
    country: "US",
    identification: "123456789"
  },
  urlDetails: {
    notificationUrl: "[URL to which DMNs are sent]"
  },
}, function(res) {
  console.log(res);
});

for Simply Connect
  1. The Secure Bank Transfer flow begins when the customer selects the Secure Bank Transfer payment method from the payment method gallery.
  2. The customer selects one of their previously captured payment methods (UPOs), enters an amount, and presses the Deposit/Process button.

The request is processed:

  • Secure Bank Transfer processes the transaction and returns transaction notifications and status.
    See the Handling the Response topic (same as for “Payment (without UPO)” (above).
  • Alternatively:

    Optional – Only applicable to the “Automatic Transaction Approval” feature:
    If you enabled the optional “Automatic Transaction Approval” feature and 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 transfer is successful, then the following is returned:
      • A response with status=APPROVED.
      • A userPaymentOptionId (UPO) with a preApprovalId stored in the UPO record.
      • A DMN that includes the result of the transaction (status=APPROVED), sent to the urlDetails.notificationUrl parameter that you provided in the request.
    • If the transfer is not successful, then the following is returned:
      • A response with status=DECLINED.
      • A DMN that includes the result of the transaction (status=DECLINED).

Payout

A payout is performed using the REST API /payout request.

See the Payout topic above – same flow as for Bank Transfer (ACH).

Refund

See the Refund topic.

Testing

Declined Deposit and Declined Pre-approval

NSF – Amount 1.27
Declined – Amount 1.30
Account No: 3666394279
Routing No: 123456780

Successful Deposit and Successful Pre-approval

Success – Amount: 1.25
Account No: 111111111
Routing No: 123456780

Testing Trigger Amounts

In production, a real bank account must be used to get back an approved transaction.

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.

A userTokenId is the unique identifier of your customer in your system. It is normally registered in the Nuvei system automatically upon the successful completion of a /payment 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, including email, countryCode, firstName, and lastName.

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":"2-letter ISO country code>",
  "timeStamp": "<YYYYMMDDHHmmss>",
  "checksum": "<calculated checksum>"
}

Generating a userPaymentOptionId (UPO)

Send an /addUPOAPM request with its mandatory parameters including:

  • userTokenId – The unique customer identifier in your system.
  • apmData block containing:
    • AccountNumber – The customer’s bank account number.
    • 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":"6175551414",
    "address":"22 Main Street",
    "city":"Boston",
    "zip":"02460",
    "state":"MA",
    "country":"US"
  },
  "timeStamp":"<YYYYMMDDHHmmss>",
  "checksum":"<calculated checksum>"
}
{
  "merchantId":"<your merchantId>",
  "merchantSiteId":"<your merchantSiteId>",
  "clientRequestId":"<unique request ID in merchant system>",
  "userTokenId":"<unique customer identifier in merchant system>",
  "paymentMethodName":"apmgw_Secure_Bank_Transfer",
  "apmData":{
    "AccountNumber":"111111111", 
    "RoutingNumber":"999999992" 
  },
  "billingAddress":{
    "firstName":"John",
    "lastName":"Smith",
    "email":"john.smith@email.com",
    "phone":"6175551414",
    "address":"22 Main Street",
    "city":"Boston",
    "zip":"02460",
    "state":"MA",
    "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 DMN with status=PENDING
...'ppp_status=PENDING&Status=PENDING&ExErrCode=0&ErrCode=0&errApmCode=0&errApmDescription=&errScCode=0&errScDescription=&Reason=&ReasonCode=0&PPP_TransactionID=37833471&userid=UID&merchant_unique_id=MUID012311122&customData=QA+test+merchant&productId=PID&first_name=Alberta&last_name=Bobbeth+Charleson&email=test%40mymail.com&currency=USD&customField1=&customField2=&customField3=&customField4=&customField5=&customField6=&customField7=&customField8=&customField9=&customField10=&customField11=&customField12=&customField13=&customField14=&customField15=&invoice_id=&address1=Sancho+el+fuerte&address2=15&country=United+States&state=NEW+YORK&city=Madrid&zip=07208&phone1=4804638290&phone2=&phone3=&client_ip=174.26.150.77&nameOnCard=&cardNumber=&bin=&noCVV=&acquirerId=&acquirerBank=Nuvei-PI&expMonth=&expYear=&Token=&tokenId=&AuthCode=0000&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=en_GB&unknownParameters=&payment_method=apmgw_Secure_Bank_Transfer&ID=&merchant_id=4972436454212160565&responseTimeStamp=2022-07-12.11%3A22%3A01&buyButtonProductId=&webMasterId=&appliedPromotions=&uniqueCC=&transactionType=Sale&externalEmail=&cardCompany=&eci=&user_token_id=Test1111111111111222222&user_token=auto&userPaymentOptionId=8288891&TransactionID=2110000000006605022&externalTransactionId=9715155&APMReferenceID=9195BF012FC0B7FFCD0B4DB98799ABAB&orderTransactionId=18916101&totalAmount=1.25&dynamicDescriptor=QA+Test+site&item_name_1=ItemName&item_number_1=&item_amount_1=1.25&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=20220711&type=DEPOSIT&clientRequestId=&relatedTransactionId=&apmPayerInfo=%7B%22StatusInfo%22%3A%22%7B+StatusCode%3A+%2C+info%3A+%7D%22%2C%22BankName%22%3A%22Chase%3A+Plaid+Checking%22%2C%22AccountNumber%22%3A%220000%22%2C%22AccountHolder%22%3A%22Alberta+Bobbeth+Charleson%22%2C%22TransactionAmountLimit%22%3A%2250000%22%2C%22DailyAmountLimit%22%3A%2250000%22%2C%22MonthlyAmountLimit%22%3A%22100000%22%2C%22BankKYC%22%3A%5B%7B%22names%22%3A%5B%22Alberta+Bobbeth+Charleson%22%5D%2C%22addresses%22%3A%5B%7B%22data%22%3A%7B%22city%22%3A%22Malakoff%22%2C%22country%22%3A%22US%22%2C%22postal_code%22%3A%2202460%22%2C%22region%22%3A%22MA%22%2C%22street%22%3A%2222+Main+Street%22%7D%2C%22primary%22%3Atrue%7D%2C%7B%22data%22%3A%7B%22city%22%3A%22San+Matias%22%2C%22country%22%3A%22US%22%2C%22postal_code%22%3A%2293405-2255%22%2C%22region%22%3A%22CA%22%2C%22street%22%3A%222493+Leisure+Lane%22%7D%2C%22primary%22%3Afalse%7D%5D%2C%22emails%22%3A%5B%7B%22data%22%3A%22accountholder0%40example.com%22%2C%22primary%22%3Atrue%7D%2C%7B%22data%22%3A%22accountholder1%40example.com%22%2C%22primary%22%3Afalse%7D%2C%7B%22data%22%3A%22extraordinarily.long.email.username.123456%40reallylonghostname.com%22%2C%22primary%22%3Afalse%7D%5D%2C%22phone_numbers%22%3A%5B%7B%22data%22%3A%226175551414%22%2C%22primary%22%3Afalse%7D%2C%7B%22data%22%3A%221112224444%22%2C%22primary%22%3Afalse%7D%2C%7B%22data%22%3A%221112225555%22%2C%22primary%22%3Afalse%7D%5D%7D%5D%2C%22Note%22%3A%22PrevPay%3A+nil+%2B0%7CScore%3A+100%2F100%22%7D&sessionId=21f7e875c612def9af98328ceb5f&responsechecksum=0296f25eb86c71bdf4dd7fe3e4060e1b&advanceResponseChecksum=5f47045e522221edfb1b084cf2caa5a3,
Example DMN with status=UPDATE
...'ppp_status=OK&Status=UPDATE&ExErrCode=0&ErrCode=0&errApmCode=0&errApmDescription=&errScCode=0&errScDescription=&Reason=&ReasonCode=0&PPP_TransactionID=37833471&userid=UID&merchant_unique_id=MUID012311122&customData=QA+test+merchant&productId=PID&first_name=Alberta&last_name=Bobbeth+Charleson&email=test%40mymail.com&currency=USD&customField1=&customField2=&customField3=&customField4=&customField5=&customField6=&customField7=&customField8=&customField9=&customField10=&customField11=&customField12=&customField13=&customField14=&customField15=&invoice_id=&address1=Sancho+el+fuerte&address2=15&country=United+States&state=NEW+YORK&city=Madrid&zip=07208&phone1=4804638290&phone2=&phone3=&client_ip=174.26.150.77&nameOnCard=&cardNumber=&bin=&noCVV=&acquirerId=&acquirerBank=Nuvei-PI&expMonth=&expYear=&Token=&tokenId=&AuthCode=0000&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=en_GB&unknownParameters=&payment_method=apmgw_Secure_Bank_Transfer&ID=&merchant_id=4972436454212160565&responseTimeStamp=2022-07-12.12%3A58%3A19&buyButtonProductId=&webMasterId=&appliedPromotions=&uniqueCC=&transactionType=Sale&externalEmail=&cardCompany=&eci=&user_token_id=Test1111111111111222222&user_token=auto&userPaymentOptionId=8288891&TransactionID=2110000000006605022&externalTransactionId=9715155&APMReferenceID=9195BF012FC0B7FFCD0B4DB98799ABAB&orderTransactionId=18916101&totalAmount=1.25&dynamicDescriptor=QA+Test+site&item_name_1=ItemName&item_number_1=&item_amount_1=1.25&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=&ECIRaw=&cryptogram=&upoRegistrationDate=20220711&type=DEPOSIT&clientRequestId=&relatedTransactionId=&apmPayerInfo=%7B%22StatusInfo%22%3A%22%7B+StatusCode%3A+%2C+info%3A+%7D%22%2C%22BankName%22%3A%22Chase%3A+Plaid+Checking%22%2C%22AccountNumber%22%3A%220000%22%2C%22AccountHolder%22%3A%22Alberta+Bobbeth+Charleson%22%2C%22AvailableBalance%22%3A%2210000%22%2C%22CurrentBalance%22%3A%2211000%22%2C%22TransactionAmountLimit%22%3A%2250000%22%2C%22DailyAmountLimit%22%3A%2250000%22%2C%22MonthlyAmountLimit%22%3A%22100000%22%2C%22BankKYC%22%3A%5B%7B%22names%22%3A%5B%22Alberta+Bobbeth+Charleson%22%5D%2C%22addresses%22%3A%5B%7B%22data%22%3A%7B%22city%22%3A%22Malakoff%22%2C%22country%22%3A%22US%22%2C%22postal_code%22%3A%2202460%22%2C%22region%22%3A%22MA%22%2C%22street%22%3A%2222+Main+Street%22%7D%2C%22primary%22%3Atrue%7D%2C%7B%22data%22%3A%7B%22city%22%3A%22San+Matias%22%2C%22country%22%3A%22US%22%2C%22postal_code%22%3A%2293405-2255%22%2C%22region%22%3A%22CA%22%2C%22street%22%3A%222493+Leisure+Lane%22%7D%2C%22primary%22%3Afalse%7D%5D%2C%22emails%22%3A%5B%7B%22data%22%3A%22accountholder0%40example.com%22%2C%22primary%22%3Atrue%2C%22type%22%3A%22primary%22%7D%2C%7B%22data%22%3A%22accountholder1%40example.com%22%2C%22primary%22%3Afalse%2C%22type%22%3A%22secondary%22%7D%2C%7B%22data%22%3A%22extraordinarily.long.email.username.123456%40reallylonghostname.com%22%2C%22primary%22%3Afalse%2C%22type%22%3A%22other%22%7D%5D%2C%22phone_numbers%22%3A%5B%7B%22data%22%3A%226175551414%22%2C%22primary%22%3Afalse%2C%22type%22%3A%22home%22%7D%2C%7B%22data%22%3A%221112224444%22%2C%22primary%22%3Afalse%2C%22type%22%3A%22work%22%7D%2C%7B%22data%22%3A%221112225555%22%2C%22primary%22%3Afalse%2C%22type%22%3A%22mobile%22%7D%5D%7D%5D%2C%22Note%22%3A%22PrevPay%3A+nil+%2B0%7CScore%3A+100%2F100%22%7D&representmentInformation=Account+Linked&sessionId=21f7e875c612def9af98328ceb5f&responsechecksum=40ce1091b7db73b2b9203452f86d4b19&advanceResponseChecksum=a6252e4a90a788b4641db423ad54409a',
Example DMN with status=APPROVED
...'ppp_status=OK&Status=APPROVED&ExErrCode=0&ErrCode=0&errApmCode=0&errApmDescription=&errScCode=0&errScDescription=&Reason=&ReasonCode=0&PPP_TransactionID=37833471&userid=UID&merchant_unique_id=MUID012311122&customData=QA+test+merchant&productId=PID&first_name=Alberta&last_name=Bobbeth+Charleson&email=test%40mymail.com&currency=USD&customField1=&customField2=&customField3=&customField4=&customField5=&customField6=&customField7=&customField8=&customField9=&customField10=&customField11=&customField12=&customField13=&customField14=&customField15=&invoice_id=&address1=Sancho+el+fuerte&address2=15&country=United+States&state=NEW+YORK&city=Madrid&zip=07208&phone1=4804638290&phone2=&phone3=&client_ip=174.26.150.77&nameOnCard=&cardNumber=&bin=&noCVV=&acquirerId=&acquirerBank=Nuvei-PI&expMonth=&expYear=&Token=&tokenId=&AuthCode=0000&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=en_GB&unknownParameters=&payment_method=apmgw_Secure_Bank_Transfer&ID=&merchant_id=4972436454212160565&responseTimeStamp=2022-07-12.11%3A31%3A46&buyButtonProductId=&webMasterId=&appliedPromotions=&uniqueCC=&transactionType=Sale&externalEmail=&cardCompany=&eci=&user_token_id=Test1111111111111222222&user_token=auto&userPaymentOptionId=8288891&TransactionID=2110000000006605022&externalTransactionId=9715155&APMReferenceID=9195BF012FC0B7FFCD0B4DB98799ABAB&orderTransactionId=18916101&totalAmount=1.25&dynamicDescriptor=QA+Test+site&item_name_1=ItemName&item_number_1=&item_amount_1=1.25&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=20220711&type=DEPOSIT&clientRequestId=&relatedTransactionId=&apmPayerInfo=%7B%22StatusInfo%22%3A%22%7B+StatusCode%3A+%2C+info%3A+%2C+originalAmount%3A+1.2500%2C+ProcessedAmount%3A+1.25%7D%22%2C%22BankName%22%3A%22Chase%3A+Plaid+Checking%22%2C%22AccountNumber%22%3A%220000%22%2C%22AccountHolder%22%3A%22Alberta+Bobbeth+Charleson%22%2C%22AvailableBalance%22%3A%2210000%22%2C%22CurrentBalance%22%3A%2211000%22%2C%22TransactionAmountLimit%22%3A%2250000%22%2C%22DailyAmountLimit%22%3A%2250000%22%2C%22MonthlyAmountLimit%22%3A%22100000%22%2C%22BankKYC%22%3A%5B%7B%22names%22%3A%5B%22Alberta+Bobbeth+Charleson%22%5D%2C%22addresses%22%3A%5B%7B%22data%22%3A%7B%22city%22%3A%22Malakoff%22%2C%22country%22%3A%22US%22%2C%22postal_code%22%3A%2202460%22%2C%22region%22%3A%22MA%22%2C%22street%22%3A%2222+Main+Street%22%7D%2C%22primary%22%3Atrue%7D%2C%7B%22data%22%3A%7B%22city%22%3A%22San+Matias%22%2C%22country%22%3A%22US%22%2C%22postal_code%22%3A%2293405-2255%22%2C%22region%22%3A%22CA%22%2C%22street%22%3A%222493+Leisure+Lane%22%7D%2C%22primary%22%3Afalse%7D%5D%2C%22emails%22%3A%5B%7B%22data%22%3A%22accountholder0%40example.com%22%2C%22primary%22%3Atrue%7D%2C%7B%22data%22%3A%22accountholder1%40example.com%22%2C%22primary%22%3Afalse%7D%2C%7B%22data%22%3A%22extraordinarily.long.email.username.123456%40reallylonghostname.com%22%2C%22primary%22%3Afalse%7D%5D%2C%22phone_numbers%22%3A%5B%7B%22data%22%3A%226175551414%22%2C%22primary%22%3Afalse%7D%2C%7B%22data%22%3A%221112224444%22%2C%22primary%22%3Afalse%7D%2C%7B%22data%22%3A%221112225555%22%2C%22primary%22%3Afalse%7D%5D%7D%5D%2C%22Note%22%3A%22PrevPay%3A+nil+%2B0%7CScore%3A+100%2F100%22%7D&sessionId=21f7e875c612def9af98328ceb5f&responsechecksum=40ce1091b7db73b2b9203452f86d4b19&advanceResponseChecksum=789fc87b58bce800ac0890acaf491563',
    • Language fr
  • Terms of use
  • Privacy Policy
Nuvei. All rights reserved.