# EFT

## Overview

An EFT payment method is an electronic funds transfer between banks in Canada that takes up to 3 days to complete. You can send and receive funds using EFT.&#x20;

`Method: POST`

`Endpoint: {{env}}/api/transaction`&#x20;

**Example**

{% tabs %}
{% tab title="Request Payload" %}

```json
{
  "ZumRailsType": "AccountsReceivable",
  "TransactionMethod": "Eft",
  "Amount": 123.45,
  "Memo": "Memo description",
  "Comment": "This transaction is just a test from a user to wallet",
  "UserId": "1d431e8b-...85452adb4eee",
  "WalletId": "8ebd932b-...b92633e14297"
}
```

{% endtab %}
{% endtabs %}

**Request Parameters**

<table><thead><tr><th width="215">Parameter</th><th width="112">Type</th><th width="106">Mandatory</th><th>Description</th></tr></thead><tbody><tr><td>ZumRailsType</td><td>string</td><td>yes</td><td>Transaction type</td></tr><tr><td>TransactionMethod</td><td>string</td><td>yes</td><td>Transaction method</td></tr><tr><td>Amount</td><td>decimal</td><td>yes</td><td>Transaction amount</td></tr><tr><td>Memo</td><td>string</td><td>yes</td><td>Memo description. If customer transaction description type is "PerTransaction", this will be shown at the bank statements. Maximum of 15 characters. Only letters, numbers, dash, space and underscore are allowed</td></tr><tr><td>Comment</td><td>string</td><td>no</td><td>Internal comment you might want to add. Interac transactions will display the comment on the request.</td></tr><tr><td>FundingSourceId</td><td>guid</td><td>no</td><td>Funding Source Id</td></tr><tr><td>WalletId</td><td>guid</td><td>no</td><td>Wallet Id</td></tr><tr><td>UserId</td><td>guid</td><td>no</td><td>User Id</td></tr><tr><td>User</td><td><a href="https://docs.zumrails.com/docs/canada/api-specification/users">User input</a></td><td>no</td><td>It's possible to create a transaction without adding a user first. Simply pass the user object (instead of the UserId) into the transaction body. For reference, check the payload example of the user object <a href="https://docs.zumrails.com/docs/canada/api-specification/users#creating-a-new-user">here</a> and pass this when you create a transaction (check interac transaction payload example). Only available for EFT and interac transaction methods</td></tr><tr><td>ScheduledStartDate</td><td>date</td><td>no</td><td>The date when the transaction will be sent to the financial institution, in the format <code>YYYY-MM-DD</code>. Must be greater than today.</td></tr><tr><td>ClientTransactionId</td><td>string</td><td>no</td><td>This field can be used to store the Transaction id created in your system when the Transaction is initiated</td></tr></tbody></table>

{% hint style="success" %}
To learn more about EFT transactions, see [API Reference](https://docs.zumrails.com/api-reference/transactions).
{% endhint %}

## Benefits of using EFT&#x20;

* **Speed & Efficiency**: Faster transactions  and no need for paper checks or visits to the bank.
* **Cost-Effective**: Low transaction fees and reduced administrative costs.
* **Security**: Encrypted, reducing fraud risk, and providing clear transaction records.
* **Accuracy**: Fewer errors, with automatic transaction reconciliation.
* **Recurring Payments**: Ideal for subscriptions and direct deposits, ensuring on-time payments.

## How it works?

**Collect PAD**

Independent of the method used to add payment profile, a user is always asked to agree and consent the information shared (PAD) when creating a payment profile. The message can be customized for your needs as well. Your specific settings will be available under your profile in Zūm Rails portal.

**Transaction Types**

With EFT, you can perform five unique transaction types:

* FundZumWallet&#x20;
* WithdrawZumWallet
* AccountsPayable
* AccountsReceivable
* UserTransfer (Only available using API)

**Transaction Life Cycle**&#x20;

* **Accounts Receivable transaction with funds deposited to Wallet**
  1. Transaction Started
  2. Transaction for debit transaction was added to an EFT File
  3. EFT file for debit transaction uploaded to Financial Institution
  4. EFT answer was received for debit transaction from financial institution
  5. Wallet Funded
  6. EFT for debit transaction has been processed by Financial Institution&#x20;
  7. Transaction Complete
* **Accounts Payable transaction with funds sent to User from Wallet**
  1. Transaction started
  2. Wallet Withdrawn&#x20;
  3. Credit transaction added to an EFT file
  4. EFT file for credit transaction uploaded to Financial Institution&#x20;
  5. EFT answer received for credit transaction from Financial Institution&#x20;
  6. EFT for credit transaction processed by Financial Institution&#x20;
  7. Transaction Complete

## Processing Schedule

**EFT - Financial Institute A**

* Times we send the transactions - mon to fri:
  * 5:55am;
  * 2:55pm;
  * 6:55pm;
* When we process the responses - tue to sat:
  * 1:10am;

**EFT - Financial Institute B**

* Times we send the transactions - mon to fri:
  * 2:55am;
  * 1:58pm;
  * 5:58pm;
* When we process the responses - tue to sat:
  * 8:00am;

## **Transaction Limits**

| Transaction Limit            | Minimum | Maximum    |
| ---------------------------- | ------- | ---------- |
| Amount limit per transaction | $0.00   | Unlimited  |
| Maximum volume per day       | $0.00   | Unlimited  |
| Transaction per day          | 0       | 99,999,999 |
| Maximum Volume Per Month     | $0.00   | Unlimited  |

## **Transaction Events**

Zūm Rails also offers a more detailed transaction event, to indicate every step the transaction passed.

<table><thead><tr><th width="92.82904052734375">Method</th><th width="272">Event</th><th>Description</th></tr></thead><tbody><tr><td>All</td><td>Started</td><td>When the transaction started</td></tr><tr><td>All</td><td>Succeeded</td><td>When the transaction succeeds, when it finishes without any error</td></tr><tr><td>All</td><td>WalletFunded</td><td>When the transaction funds a wallet</td></tr><tr><td>All</td><td>WalletWithdrawn</td><td>When the transaction withdrawn a wallet</td></tr><tr><td>-------</td><td>-------</td><td>-------</td></tr><tr><td>Eft</td><td>EFTFileCreated</td><td>When an EFT file is created. One transaction might have up to 2 files</td></tr><tr><td>Eft</td><td>EFTFileUploaded</td><td>When an EFT file is uploaded</td></tr><tr><td>Eft</td><td>EFTAnswerReceived</td><td>When an EFT file response is received</td></tr><tr><td>Eft</td><td>EFTAnswerProcessed</td><td>When an EFT file is processed</td></tr><tr><td>Eft</td><td>EftFailedValidationRejection</td><td>When EFT could not be created, due an invalid information provided</td></tr><tr><td>Eft</td><td>EftFailedCurrencyAccountMismatch</td><td>When currency of the transaction does not match the currency of the account.</td></tr><tr><td>Eft</td><td>EftFailedTransactionLimitExceeded</td><td>When payment amount exceeds user’s transaction limit.</td></tr><tr><td>Eft</td><td>EftFailedInsufficientFunds</td><td>When transaction is rejected, due non sufficient funds available</td></tr><tr><td>Eft</td><td>EftFailedCannotLocateAccount</td><td>When account is not located, account, transit or institution numbers are invalid</td></tr><tr><td>Eft</td><td>EftFailedStopPayment</td><td>Account do not allow EFT</td></tr><tr><td>Eft</td><td>EftFailedAccountClosed</td><td>When account is closed</td></tr><tr><td>Eft</td><td>EftFailedNoDebitAllowed</td><td>Account do not allow EFT</td></tr><tr><td>Eft</td><td>EftFailedFundsNotFree</td><td>When transaction is rejected, due non sufficient funds available</td></tr><tr><td>Eft</td><td>EftFailedCurrencyAccountMismatch</td><td>When the currency of the transaction does not match the currency of the account</td></tr><tr><td>Eft</td><td>EftFailedPayorPayeeDeceased</td><td>Account do not allow EFT</td></tr><tr><td>Eft</td><td>EftFailedFrozenAccount</td><td>Account do not allow EFT</td></tr><tr><td>Eft</td><td>EftFailedInvalidErrorAccountNumber</td><td>When account is not located, account numbers are invalid</td></tr><tr><td>Eft</td><td>EftFailedErrorPayorPayeeName</td><td>When account is not located, first, last or company name (business) mismatch</td></tr><tr><td>Eft</td><td>EftFailedRefusedNoAgreement</td><td>Account do not allow EFT</td></tr><tr><td>Eft</td><td>EftFailedNotInAccountAgreementP</td><td>Account do not allow EFT</td></tr><tr><td>Eft</td><td>EftFailedNotInAccountAgreementE</td><td>Account do not allow EFT</td></tr><tr><td>Eft</td><td>EftFailedAgreementRevoked</td><td>Account do not allow EFT</td></tr><tr><td>Eft</td><td>EftFailedDefaultByAFinancialInstitution</td><td>Generic error provided by the financial institution</td></tr><tr><td>Eft</td><td>EftFailedCustomerInitiatedReturnCreditOnly</td><td>When the payee has requested the credit to be returned</td></tr><tr><td>Eft</td><td>EftFailedTransactionNotAllowed</td><td>When the bank account is banned</td></tr><tr><td>Eft</td><td>EftFailedCustomerInitiatedReturnCreditOnly</td><td>When the payee has requested the credit to be returned</td></tr><tr><td>Eft</td><td>EftFailedNoPrenotificationP1</td><td>No Confirmation/Pre-Notification – Personal</td></tr><tr><td>Eft</td><td>EftFailedNoPrenotificationP2</td><td>No Confirmation/Pre-Notification – Business</td></tr><tr><td>Eft</td><td>EFTFileCreated</td><td>When the EFT file is created</td></tr><tr><td>Eft</td><td>EFTAnswerReceived</td><td>When the EFT answer is received</td></tr><tr><td>Eft</td><td>EFTAnswerProcessed</td><td>When the EFT answer is processed</td></tr><tr><td>Eft</td><td>NotEnoughBalanceInWalletError</td><td>When the wallet has not balance enough</td></tr></tbody></table>

## Testing

### Users & Bank Accounts

In the sandbox environment, to add a bank account for a User, use any valid 3-digit institution number along with a randomly generated transit number and account number.

### Transactions

To simulate an EFT failure, include an event name from the list above in the COMMENT field when creating a transaction. If you don't mention an event in the COMMENT, the transaction will change its status to "Completed" in the sandbox environment.

**Examples:**

{% tabs %}
{% tab title="Simulating Success" %}

```json
{
  "ZumRailsType": "FundZumWallet",
  "TransactionMethod": "Eft",
  "Amount": 123.45,
  "Memo": "Memo description",
  "Comment": "This transaction will succeed because there's no keyword",
  "FundingSourceId": "1d431e8b-...85452adb4eee",
  "WalletId": "8ebd932b-...b92633e14297"
}
```

{% endtab %}

{% tab title="Simulating Failure" %}

```json
{
  "ZumRailsType": "FundZumWallet",
  "TransactionMethod": "Eft",
  "Amount": 123.45,
  "Memo": "Memo description",
  "Comment": "EftFailedNoDebitAllowed", // Include event name in comment
  "FundingSourceId": "1d431e8b-...85452adb4eee",
  "WalletId": "8ebd932b-...b92633e14297"
}
```

{% endtab %}
{% endtabs %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.zumrails.com/payments/bank-payments/eft.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
