Interac E-Transfer Deposit

How do I fund an account via Interac E-Transfer in my Canadian bank?

This guide walks you through the process of depositing funds to a Cybrid fiat account using the instant deposit rail Interac E-Transfer.

ℹ️

Availability

Interac E-Transfer is only available to Canadian banks on the Cybrid Platform and can only be used to deposit CAD to CAD-based fiat accounts.

Prerequisites

Before you begin, ensure you have:

  • a customer already created and verified; and,
  • a CAD fiat account created for the customer.

Overview

The e-transfer deposit process involves four main steps:

  1. Create a funding quote
  2. Execute a transfer with the payment_rail set to etransfer
  3. Display the gateway_url on the resulting transfer to your customer and instruct them to authorize the payment through their bank
  4. Wait for your customer to authorize the payment and the transfer to transition to the completed state

Step 1: Create a funding quote

Create a quote via POST /api/quotes:

{
  "product_type": "funding",
  "customer_guid": "your-customer-guid",
  "asset": "CAD",
  "side": "deposit",
  "receive_amount": 10000
}

Step 2: Execute the transfer

Create the transfer via POST /api/transfers with transfer_type set to funding and payment_rail set to etransfer. The quote_guid is the guid from the quote created in Step 1.

{
  "quote_guid": "your-quote-guid",
  "transfer_type": "funding",
  "payment_rail": "etransfer",
  "source_participants": [
    {
      "type": "customer",
      "guid": "your-customer-guid",
      "amount": 100000
    }
  ],
  "destination_participants": [
    {
      "type": "customer",
      "guid": "your-customer-guid",
      "amount": 100000
    }
  ]
}

Step 3: Display the gateway_url to your customer and instruct them to authorize the payment

ℹ️

Domain allowlisting

The gateway_url uses the domain etransfer.interac.ca. Allowlist this domain if needed.

⚠️

Sandbox behavior

In sandbox, Interac E-Transfer deposits complete automatically. The gateway_url returned is not a valid URL because the sponsor bank does not support the interactive flow in sandbox.

⚠️

Asynchronous processing

Generating the gateway_url can take time in both sandbox and production due to sponsor bank response times. Handle asynchronous calls using webhook registration and polling as a backup.

Wait for the transfer to transition to the pending state. Once pending, read the gateway_url from the identifiers array on the transfer. The identifier has type set to gateway_url and value set to the URL to display to your customer.

Display the gateway_url to your customer through your application, email, SMS, or any other channel.

When your customer visits the gateway_url they will be shown a screen to select their bank and authorize the deposit via their bank's website.

Step 4: Wait for the transfer to transition to the completed state

After displaying the gateway_url to your customer, wait for the transfer to transition to completed. Once completed, the funds are available on the platform.

Poll the transfer via GET /api/transfers/{transfer_guid} to check the state, or register for webhooks. The transfer_guid is the guid from the transfer created in Step 2.

Error handling

E-transfer request URLs expire if the customer does not authorize them. The customer can also reject the request. In both cases, the transfer transitions to failed:

  • payment_request_expired -- The customer did not authorize before the URL expired.
  • cancelled -- The customer rejected the e-transfer request.