Interac

Accept Interac payments in your online store.


Interac is a trusted and widely used payment network in Canada that allows secure, direct bank transfers for online payments and payouts. Integrate Interac using the emerchantpay API across supported payment platforms.


Payment types and use cases

emerchantpay supports both pay-ins and payout options through the Genesis gateway. Below are the supported Interac payment methods:

Payment Type Use Case Description Supported Country Supported Currency
Pay-ins Customer deposits to you. Allows your customers to deposit funds into your account. Canada CAD
Interac e-Transfer Outbound (RTO) Payouts to customers in real time. Real-time transfer of funds to your customers using Interac e-Transfer. Canada CAD
eCashout Payouts (ACH) Scheduled payouts to your customers. Automated bank-to-bank deposits for secure, scheduled payouts. Canada CAD


Prerequisites

Before integrating Interac payments, ensure you have:

  • An emerchantpay merchant account. If you don’t have one, apply here.
  • API credentials provided by your emerchantpay Account Manager.
  • A development team familiar with:
    •     Web programming languages
    •     HTTP methods in XML and JSON formats
    •     UTF-8 encoding
  • The Genesis SDK (optional but recommended) for easier integration.
  • If using the Web Payment Form (WPF) instead of API integration, contact your Account Manager to enable it and refer to the WPF API documentation.


Integrate Pay-ins

Pay-ins allows your customers to deposit funds into your account quickly and securely through trusted banking methods. Below is a reference table highlighting the key parameters required to initiate an Interac Pay-in transaction:

Parameter Required Example Description
transaction_type ✅ Yes bank_payout Specifies the type of transaction performed.
bank_code ✅ Yes CPI Identifies the banking method used.
user_id ✅ Yes user12345 A unique user identifier defined by you in your system. It can be an ID, username, hash, or other unique value. It must remain consistent for the same user across all transactions.

For additional parameters and advanced configuration, refer to the full API documentation.

Example Pay-in request

<payment_transaction>
   <transaction_type>online_banking</transaction_type>
   <transaction_id>ir_s2s_cad1737665628</transaction_id>
   <remote_ip>52.31.190.191</remote_ip>
   <amount>5000</amount>
   <currency>CAD</currency>
   <usage>test</usage>
   <customer_email>travis@example.com</customer_email>
   <customer_phone>2143547658</customer_phone>
   <notification_url>https://example.com/notification_url</notification_url>
   <return_success_url>https://example.com/return_success_url</return_success_url>
   <return_failure_url>https://example.com/return_failure_url</return_failure_url>
   <return_pending_url>https://example.com/return_pending_url</return_pending_url>
   <billing_address>
      <first_name>Travis</first_name>
      <last_name>Pastrana</last_name>
      <address1>Muster Str. 12</address1>
      <zip_code>10178</zip_code>
      <city>Toronto</city>
      <state>ON</state>
      <country>CA</country>
   </billing_address>
   <risk_params>
      <session_id>96ad031e6ab0d6ffee8946416a580ea4</session_id>
   </risk_params>
   <bank_code>CPI</bank_code>
   <virtual_payment_address/>
   <payment_type>online_banking</payment_type>
   <consumer_reference/>
   <user_id>123456789</user_id>
</payment_transaction>

Example Pay-in response:

You will receive a Success or Error response to your payment request.

<payment_response>
   <transaction_type>online_banking</transaction_type>
   <status>pending_async</status>
   <unique_id>d6b998c33ba3d983f747efefebefb8bd</unique_id>
   <transaction_id>ir_s2s_cad1737665628</transaction_id>
   <technical_message>TESTMODE: No real money will be transferred!</technical_message>
   <message>TESTMODE: No real money will be transferred!</message>
   <redirect_url>https://staging.gate.emerchantpay.net/redirect/to_acquirer/d6b998c33ba3d983f747efefebefb8bd</redirect_url>
   <mode>test</mode>
   <timestamp>2025-01-23T20:53:48Z</timestamp>
   <descriptor>test online banking</descriptor>
   <amount>5000</amount>
   <currency>CAD</currency>
   <sent_to_acquirer>false</sent_to_acquirer>
   <bank_code>CPI</bank_code>
   <payment_type>online_banking</payment_type>
   <user_id>123456789</user_id>
</payment_response>


Integrate Interac e-Transfer Outbound Pay-outs

Interac e-Transfer Outbound Payouts allow you to transfer funds to your customers in real time. Below is a reference table highlighting the key parameters required to initiate an Interac e-Transfer Outbound Payout transaction:

Parameter Required Example Description
transaction_type ✅ Yes bank_payout Specifies the type of transaction performed.
bank_name ✅ Yes Interac e-Transfer Outbound Payout Specifies the name of the bank for the payout.
user_id ✅ Yes user12345 A unique user identifier defined by you in your system. It can be an ID, username, hash, or other unique value. It must remain consistent for the same user across all transactions.

For additional parameters and advanced configuration, refer to the full API documentation.

Example Interac e-Transfer Outbound Payout request:

<payment_transaction>
   <transaction_type>bank_payout</transaction_type>
   <transaction_id>ir_wpf_inr_1737665822</transaction_id>
   <remote_ip>95.42.222.78</remote_ip>
   <amount>1000</amount>
   <currency>CAD</currency>
   <usage>test</usage>
   <notification_url>https://example.com/notification_url</notification_url>
   <return_success_url>https://example.com/return_success_url</return_success_url>
   <return_failure_url>https://example.com/return_failure_url</return_failure_url>
   <return_pending_url>https://example.com/return_pending_url</return_pending_url>
   <customer_email>travis@example.com</customer_email>
   <customer_phone>1111111111</customer_phone>
   <billing_address>
      <first_name>Travis</first_name>
      <last_name>Pastrana</last_name>
      <address1>Muster Str. 12</address1>
      <zip_code>10178</zip_code>
      <city>Toronto</city>
      <state>ON</state>
      <country>CA</country>
   </billing_address>
   <risk_params>
      <session_id>0580738ab43807ebfb4926f9c4a5b07a</session_id>
   </risk_params>
   <bank_name>Interac e-Transfer Outbound Pay-out</bank_name>
   <user_id>45678</user_id>
</payment_transaction>

Example Interac e-Transfer Outbound Payout response:

<payment_response>
   <transaction_type>bank_payout</transaction_type>
   <status>pending_async</status>
   <unique_id>5326ac142e0225643d51c36df028adac</unique_id>
   <transaction_id>ir_wpf_inr_1737665822</transaction_id>
   <technical_message>TESTMODE: No real money will be transferred!</technical_message>
   <message>TESTMODE: No real money will be transferred!</message>
   <redirect_url>https://staging.gate.emerchantpay.net/redirect/to_acquirer/5326ac142e0225643d51c36df028adac</redirect_url>
   <mode>test</mode>
   <timestamp>2025-01-23T20:57:02Z</timestamp>
   <descriptor>test online banking</descriptor>
   <amount>1000</amount>
   <currency>CAD</currency>
   <sent_to_acquirer>false</sent_to_acquirer>
</payment_response>


Integrate eCashout Pay-outs

The eCashout Payout option allows you to transfer funds directly to a customer’s bank account. Below is a reference table highlighting the key parameters required to initiate an eCashout Payout transaction:

Parameter Description Example Required
transaction_type Specifies the transaction type. bank_payout Yes
bank_name Specifies the type of bank payout. eCashout Pay-out Yes
bank_account_number The customer’s bank account transit number. 1234567890 Yes
account_id The customer’s bank account number. 76484475687 Yes

For additional parameters and advanced configuration, refer to the full API documentation.

Example eCashout Payout request:

<payment_transaction>
   <transaction_type>bank_payout</transaction_type>
   <transaction_id>ir_wpf_inr_1737667884</transaction_id>
   <remote_ip>52.31.190.191</remote_ip>
   <amount>100</amount>
   <currency>CAD</currency>
   <usage>test</usage>
   <notification_url>https://example.com/notification_url</notification_url>
   <return_success_url>https://example.com/return_success_url</return_success_url>
   <return_failure_url>https://example.com/return_failure_url</return_failure_url>
   <return_pending_url>https://example.com/return_pending_url</return_pending_url>
   <customer_email>travis@example.com</customer_email>
   <customer_phone>25443677901</customer_phone>
   <billing_address>
      <first_name>Travis</first_name>
      <last_name>Pastrana</last_name>
      <address1>Muster Str. 12</address1>
      <zip_code>10178</zip_code>
      <city>Toronto</city>
      <state>ON</state>
      <country>CA</country>
   </billing_address>
   <risk_params>
      <session_id>d1e1d877d87874dafc5d38aece346c23</session_id>
   </risk_params>
   <bank_name>eCashout Pay-out</bank_name>
   <bank_account_number>1234567890</bank_account_number>
   <account_id>76484475687</account_id>
</payment_transaction>

Example eCashout Payout response:

<payment_response>
   <transaction_type>bank_payout</transaction_type>
   <status>pending_async</status>
   <unique_id>4ec1830f619ff1a3711c76ba736e1844</unique_id>
   <transaction_id>ir_wpf_inr_1737667884</transaction_id>
   <bank_account_number>1234567890</bank_account_number>
   <technical_message>TESTMODE: No real money will be transferred!</technical_message>
   <message>TESTMODE: No real money will be transferred!</message>
   <redirect_url>https://staging.gate.emerchantpay.net/redirect/to_acquirer/4ec1830f619ff1a3711c76ba736e1844</redirect_url>
   <mode>test</mode>
   <timestamp>2025-01-23T21:31:24Z</timestamp>
   <descriptor>test online banking</descriptor>
   <amount>100</amount>
   <currency>CAD</currency>
   <sent_to_acquirer>false</sent_to_acquirer>
</payment_response>

Asynchronous notification

Interac transactions are processed asynchronously. After your customer authorises the payment, the result is sent via HTTP POST to the notification_url you provided in the request.

Example of a notification for an Interac transaction:

{
  “transaction_id”: “f44f2856b5d933c04f42d1e922e30cbf”,
  “unique_id”: “832eb553eba838f79113167cbc1002a1”,
  “transaction_type”: “online_banking”,
  “status”: “approved”,
  “signature”: “b74ed54d95589fce6f9d7a229b225fd4a925e9bc”,
  “amount”: “5000”,
  “currency”: “CAD”
}

Verify the notification’s validity using the signature field:

signature = SHA-1(<unique_id><API password>)

Example of a Confirmation Reply:

<?xml version=”1.0″ encoding=”UTF-8″?>
<notification_echo>
  <unique_id>832eb553eba838f79113167cbc1002a1</unique_id>
</notification_echo>


Test your integration

Before accepting live payments, test your integration in the emerchantpay staging environment:

  1. Add an item to your cart in your online store.
  2. Proceed to the checkout and select Interac as the payment method.
  3. Follow the redirect link and simulate the payment.
  4. Verify the payment in the Genesis Dashboard.


Accept live payments

After successful testing, contact your Account Manager to get credentials for the production environment. Update your integration with the production API credentials and URLs to start accepting live payments. You are now ready to accept Interac payments in your online store.