GuidesRecipesAPI ReferenceChangelog
Guides

Interac E-Transfer

How do I deposit or withdraw CAD via Interac E-Transfer?

Deposit and withdraw CAD using the Interac E-Transfer instant rail. This guide covers both flows.

ℹ️

Availability

Interac E-Transfer is only available to Canadian banks on the Cybrid Platform and only works with CAD on CAD-based fiat accounts.

Prerequisites

  • A customer already created and verified
  • A CAD fiat account created for the customer
  • For withdrawals only:
    • The customer's identity record populated with an email address or phone number — the e-transfer is routed using this contact information
    • A security question and answer that the recipient will be required to answer to claim the funds
⚠️

Sandbox behavior

In sandbox, Interac E-Transfer deposits complete automatically and the gateway_url returned is not a valid URL. See Sandbox transfers for full sandbox-specific behavior.

Deposit flow

The deposit process involves four steps:

  1. Create a funding quote
  2. Execute a transfer with payment_rail set to etransfer
  3. Display the gateway_url so the customer can authorize the payment
  4. Wait for the transfer to transition to completed

Step 1: Create a funding quote

{
  "product_type": "funding",
  "customer_guid": "customer_guid",
  "asset": "CAD",
  "side": "deposit",
  "deliver_amount": 10000
}
ℹ️

deliver_amount vs receive_amount

deliver_amount fixes what you send; fees come out of what the recipient gets. receive_amount fixes what the recipient gets; you pay fees on top. See Create and execute a trade for the canonical explanation.

Step 2: Execute the transfer

Create the transfer with transfer_type set to funding and payment_rail set to etransfer. The quote_guid is the guid from Step 1.

{
  "quote_guid": "quote_guid",
  "transfer_type": "funding",
  "payment_rail": "etransfer",
  "source_participants": [
    {"type": "customer", "guid": "customer_guid", "amount": 10000}
  ],
  "destination_participants": [
    {"type": "customer", "guid": "customer_guid", "amount": 10000}
  ]
}

Step 3: Display the gateway URL

ℹ️

Domain allowlisting

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

⚠️

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 through your application, email, SMS, or any other channel. When the customer visits the URL they will be shown a screen to select their bank and authorize the deposit via their bank's website.

Step 4: Wait for completion

Poll GET /api/transfers/{transfer_guid} or register for webhooks to monitor state. Once completed, the funds are available on the platform.

Deposit failure modes

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

Withdrawal flow

The withdrawal process involves four steps:

  1. Create a funding quote with payment_rail set to etransfer
  2. Execute a transfer with payment_rail set to etransfer and a security question/answer pair
  3. Wait for the transfer to transition to completed
  4. Handle any terminal failed states

Auto-Deposit recipients supported

Recipients with Auto-Deposit enabled can receive Interac E-Transfers from the Cybrid Platform. A security_question and security_answer are still required on the transfer request even though Auto-Deposit bypasses the question on the recipient side.

Security questions: examples and best practices

Avoid common, publicly guessable facts such as first names, pet names, or city names. Use "shared secret" questions or inside knowledge known only to you and the recipient.

Example questions

  • What is the password we agreed upon?
  • What item did we discuss yesterday?
  • What is the answer to the secret riddle?
  • What was the first item we decided to buy together?
  • What is the custom code word for this transaction?
  • What flavor of treat did we share on our last visit?
  • What is the name of the made-up place we talked about?

Best practices

  • Use "blind" questions. The question does not need to relate to the answer. The best questions appear random to anyone else.
  • Avoid personal data. Do not use easily researched details such as birthdays, anniversaries, or maiden names.
  • Keep it simple. Interac answers are typically one word, should not have spaces, and should not include special characters.
  • Never reuse combinations. Do not use the same security question and answer for multiple recipients or transactions.

Share the answer safely

  • Use an out-of-band method. Share the answer separately from any message you send the recipient about the transfer itself.
  • Separate the channels. If you send the transfer notification via email, send the answer via SMS.
  • Gold standard. The safest way to share the answer is verbally over a phone call or in person.

Step 1: Create a funding quote

The payment_rail field is required on the quote for e-transfer withdrawals.

{
  "product_type": "funding",
  "customer_guid": "customer_guid",
  "asset": "CAD",
  "side": "withdrawal",
  "payment_rail": "etransfer",
  "deliver_amount": 10000
}
ℹ️

No destination_account_guid required

Unlike EFT withdrawals, Interac E-Transfer withdrawals do not take a destination_account_guid. The recipient is resolved at transfer time using the customer's email or phone, not via an external bank account.

Step 2: Execute the transfer

Create the transfer with transfer_type set to funding and payment_rail set to etransfer. Both security_question (max 40 characters) and security_answer (max 25 characters) are required for e-transfer withdrawals. The recipient must answer the question correctly to claim the funds. Do not include external_bank_account_guid — it is not used on the e-transfer rail.

Character limits

security_question accepts up to 40 characters and security_answer accepts up to 25 characters. Validate length before submitting the transfer.

{
  "quote_guid": "quote_guid",
  "transfer_type": "funding",
  "payment_rail": "etransfer",
  "security_question": "What city were we in?",
  "security_answer": "Toronto",
  "source_participants": [
    {"type": "customer", "guid": "customer_guid", "amount": 10000}
  ],
  "destination_participants": [
    {"type": "customer", "guid": "customer_guid", "amount": 10000}
  ]
}

Step 3: Wait for completion

Poll GET /api/transfers/{transfer_guid} or register for webhooks. Once completed, the funds have been sent to the recipient and debited from the customer's fiat account.

Step 4: Handle withdrawal failures

Inspect the failure_code field on the transfer:

  • customer_contact_info_missing — the customer's identity has no email or phone populated. Add an email or phone to the identity and create a new transfer to retry.
  • payment_request_expired — the recipient did not claim the e-transfer before it expired
  • cancelled — the recipient declined the e-transfer

Other failure_code values may apply. See the Cybrid Bank API reference for the full set.