- METHOD TYPEBank Transfer; Real-Time Bank Transfer
- PAYMENTS
- PAYOUTS
- REFUNDS
- RECURRING
Introduction
The Nuvei Interac Instant integration allows your customers to pay you from their selected bank accounts, and allows you to make payouts to them, using these Interac Instant methods:
- Interac Online – Provides online payment services in near real-time.
- Interac e-Transfer – Provides an “open loop” offline payment services, where the customer submits a payment request and then copies the unique payment details into their bank account website or app to complete the payment flow.
This guide describes the steps to integrate Interac Instant as a Nuvei alternative payment method (APM) into your payment flows, enabling customer payments, and allowing you to perform payouts, using Nuvei’s server-to-server REST API calls.
Interac Instant allows your customers to link any number of their Canadian bank accounts to their email address. The Nuvei platform encrypts your customer’s bank account details securely, and provides a userPaymentOptionId (UPO) representing the account, for you to use in transactions.
Prerequisites and Notes
- This guide assumes you have completed all account setup prerequisites, and are ready to integrate Interac Instant into your payment flow.
- Interac Instant only supports Canadian based IPs.
- Payments (“deposits”) and payout (“withdrawal”) transactions are conducted in Canadian Dollars between Canadian bank accounts.
- Nuvei handles Interac Instant transactions in “redirection mode”.
- A UPO is an encrypted customer payment method record stored in the Nuvei system, representing a customer bank account or other payment method.
- Test credentials and testing scenarios can be provided by Nuvei if necessary. You can contact Nuvei support for assistance.
Supported Countries
- Canada
Supported Currencies
- CAD
Payment (Deposit) Flow
Follow these steps to perform a payment using Nuvei REST API integration:
1. Generate a sessionToken
Press here for details.
2. Send a /payment Request
Perform the payment by sending a /payment request with its mandatory parameters including:
userTokenIdamountcurrencypaymentOption.alternativePaymentMethodclass containing:paymentMethod: “apmgw_INTERAC_Instant“
deviceDetailsclass containing:ipAddressbillingAddressclass containing:firstName,lastName,email,phone,countryuserDetailsclass containing:firstName,lastName,email,phone,country
Example /payment Request
{
"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": "CAD",
"amount": "100",
"paymentOption": {
"alternativePaymentMethod": {
"paymentMethod": "apmgw_INTERAC_Instant"
}
},
"billingAddress": {
"firstName": "John",
"lastName": "Smith",
"phone": "16139575555",
"country": "CA",
"email": "[email protected]"
},
"userDetails": {
"firstName": "John",
"lastName": "Smith",
"phone": "16139575555",
"country": "CA",
"email": "[email protected]"
},
"deviceDetails": {
"ipAddress": "<customer's IP address>"
},
"timeStamp": "<YYYYMMDDHHmmss>",
"checksum": "<calculated checksum>"
}
The response generates and returns a redirect URL (redirectUrl) to redirect the customer to the payment page, as well as a UPO (userPaymentOptionId) for use in future transactions.
Example /payment Response
{
"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"
}
After the transaction is processed, Nuvei sends a Direct Merchant Notification (DMN) that includes the result of the transaction to the URL provided in urlDetails.notificationUrl, which Nuvei recommends including in the /payment request.
If the payment is successful, then the Nuvei system generates and returns the following identifiers that you can store in your system for future use when sending an Interac Instant Payout (which requires a UPO):
userTokenId– Representing the customeruserPaymentOptionId– Representing the customer’s bank account.
Payout (Withdrawal) Flow
Interac Instant allows you to pay money to your customers using the /payout REST API method.
A /payout request requires userPaymentOptionId, which represents the customer’s bank account.
Interac Instant requires that the UPO record should contain these security question parameters:
interac_instant_security_questioninterac_instant_security_answer
Follow these steps to perform a payout (withdrawal):
- Retrieve the customer’s
userTokenId:- If your customer does not yet have a
userTokenId, then generate one by sending a customer identifier, from your system, in a/createUserrequest. - If this is a returning-customer, then retrieve the customer’s
userTokenIdstored in your system.
- If your customer does not yet have a
- Send the customer’s
userTokenIdin a/getUserUPOsrequest to retrieve a list of their UPOs (and their security questions). - Display these UPOs for the customer to choose from (also display the option to choose another account).
- Handle the customer’s selection:
- If the customer selects one of their previously stored UPOs for you to pay the money into, then:
- Check the output from the
/getUserUPOsrequest to see if the selected UPO contains the security question parameters located at:paymentMethods.upoData.interac_instant_security_questionpaymentMethods.upoData.interac_instant_security_answer
- If the selected UPO does not have a security question, then add a UPO security question.
- Check the output from the
- If the customer decides not to use one of their existing UPOs, but instead provides other bank details, then use these to generate a UPO.
- If the customer selects one of their previously stored UPOs for you to pay the money into, then:
- Now that you have a UPO that contains a security question, use the relevant
userTokenIdanduserPaymentOptionIdto send a/payoutrequest.
Example
/payoutRequest{ "merchantId": "<your merchantId>", "merchantSiteId": "<your merchantSiteId>", "userTokenId": "<unique customer identifier in merchant system>", "clientUniqueId": "<unique transaction ID in merchant system>", "clientRequestId": "<unique request ID in merchant system>", "currency": "CAD", "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>" }Example
/payoutResponse{ "reason": "", "transactionStatus": "APPROVED", "clientRequestId": "W1Q3SBGE4", "internalRequestId": 17817071, "version": "1.0", "transactionId": "2110000000004333013", "merchantSiteId": "126006", "merchantId": "2502136204546424962", "clientUniqueId": "695701003", "errCode": 0, "userPaymentOptionId": "8054521", "paymentMethodErrorCode": 0, "userTokenId": "CEBQK9OVSLJA", "externalTransactionId": "2110000000068709", "status": "SUCCESS" } - After the transaction is processed, Nuvei sends a DMN that includes the result of the transaction to the URL provided in
urlDetails.notificationUrl, which Nuvei recommends including in the/payoutrequest.
User Experience
Online Banking
- The customer is redirected to the
redirectUrladdress. - The user selects the Online Banking option and then selects their bank.

- The user can use biometrics via their bank’s app for fast login:

- All the payment details are prefilled. The user selects their bank account for the payment.

- The user receives a confirmation message.

e-Transfer
- The customer is redirected to the
redirectUrladdress. - The user selects the e-Transfer option.

- The bank’s page displays the payment details and instructions for the customer to complete the transaction.

- The user sends an e-Transfer request.

- The user receives a confirmation message.

Testing
| Data | Value |
|---|---|
| First Name | Larry |
| Last Name | Johnson |
| Email Address | Any valid email address Example: [email protected] |
| Phone Number | Any 10-digit number Example: 16139575555 |
Appendices
Generating a UPO
Follow these steps to generate a UPO for the selected customer bank account, for use in Interac Instant transactions:
- If your customer does not yet have a
userTokenId, then generate one by sending a customer identifier, from your system, in a/createUserrequest. - Send the customer’s
userTokenIdin an/addUPOAPMrequest, including the following Interac Instant parameters in theapmDataclass:interac_instant_emailinterac_instant_phone(Canadianphonenumbers must be 10 digits, without the country prefix.)interac_instant_security_questioninterac_instant_security_answer(6–25 characters, no spaces, no special characters)
Example /addUPOAPM Request
{
"merchantId": "2502136204546424962",
"merchantSiteId": "<your merchantId>",
"clientRequestId": "<unique request ID in merchant system>",
"userTokenId": "<unique customer identifier in merchant system>",
"paymentMethodName":"apmgw_INTERAC_Instant",
"apmData":{
"interac_instant_email": "[email protected]",
"interac_instant_phone": "16139575555",
"interac_instant_security_question": "your favorite city",
"interac_instant_security_answer": "boston"
},
"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"
}
Add UPO Security Questions
Interac Instant requires that the UPO record (representing the customer’s bank account) used in a /payout request should contain these security question parameters: interac_instant_security_question and interac_instant_security_answer.
Send the customer’s userTokenId, which is stored in your system, in an /editUPOAPM request and include the following additional Interac Instant parameters in the apmData class:
interac_instant_emailinterac_instant_phone(Canadian phone numbers must be 10 digits, without the country prefix.)interac_instant_security_questioninterac_instant_security_answer(6–25 characters, no spaces, no special characters)
Example /editUPOAPM Request
{
"merchantId": "<your merchantId>",
"merchantSiteId": "<your merchantId>",
"clientRequestId": "<unique request ID in merchant system>",
"userTokenId": "<unique customer identifier in merchant system>",
"userPaymentOptionId": "<UPO received from previous deposit>",
"apmData":{
"interac_instant_email": "[email protected]",
"interac_instant_phone": "16139575555",
"interac_instant_security_question": "your favorite city",
"interac_instant_security_answer": "<boston>"
},
"timeStamp": "<YYYYMMDDHHmmss>",
"checksum": "<calculated checksum>"
}
Example /editUPOAPM Response
{
"reason": "",
"merchantId": "2502136204546424962",
"errCode": 0,
"clientRequestId": "HWMTWQ2RT",
"internalRequestId": 17817221,
"version": "1.0",
"status": "SUCCESS",
"merchantSiteId": "126006"
}