Our Instant Payments API is the ideal choice for real-time payments within Canada. Powered by Interac e-Transfer, you can quickly send or request money, be sure that funds will be available immediately and track the latest status in real-time. All you need is the recipient’s email or account number.

Overview

Limits:

$25,000/payment

$25,000/money request

1 payment/call

1 money request/call

Unlimited calls

Countries:

Canada only

CAD only

Speed:

Instant deposits (account numbers and emails with Autodeposit)

Up to 30 minutes (emails without Autodeposit)

Cut-off times (business days):

Available 24/7

A closer look

Seamless app integration – Our Request Money API lets you collect instant payments from users without them leaving your app or website. Simply create a money request for the chosen amount and our API will return a gateway URL. Within your app, users can then sign in with their bank and complete the transaction.

Confirm deposit speed before you pay – Our Get Payment Option API tells you upfront if real-time deposits are available for a recipient’s email or account number.

End-to-end tracking – Request on-demand status updates for the entire lifecycle of your sent payments and money requests or get automatic alerts in real time by API, email or text message using our Push Notifications API

Final and irrevocable payments – We use Interac e-Transfers that cannot be reversed once completed. However, you can cancel pending payments and money requests using our Cancel payment/money request API.

Custom expiry periods – For money requests and payments sent to emails without Autodeposit, you can set your own expiry periods ranging from 2 hours to 30 days for money requests and 1-30 days for payments.

Endpoints Summary

post
/tpp/interac-etransfer/payment-initiation/get-transaction
Obtain Payment Status
post
/tpp/interac-etransfer/payment-initiation/get-request-for-payment-transaction
Obtain Request for Payment Status
post
/tpp/interac-etransfer/payment-initiation/creditor-payment-activation-request
Send Request for Payment
post
/tpp/interac-etransfer/payment-initiation/get-emt-recipient-payment-options/get
Get Payment Option
post
/tpp/interac-etransfer/payment-initiation/customer-credit-transfer-initiation
Send Payment

Payload encryption

For security reasons, all requests to and responses from our Payments APIs need to be encrypted. For detailed instructions, have a look at our encryption process.

View Encryption documentation

Get payment status

Once your payment has been submitted, you can request its latest status at any time (CAMT.005). Please check our table below for more information about the possible statuses that can be returned (Pain.002).

Note: Instead of checking manually, you can also request automatic alerts whenever a payment status changes. You can choose which statuses you want to be notified about and if you want to receive them by API Webhook, email or text message. For more information, please contact your BMO representative or get help setting up your API Webhooks with our Push Notifications API documentation.

Post
/tpp/interac-etransfer/payment-initiation/get-transaction

Request

Code Samples

Headers

x-fapi-financial-id
string
x-fapi-customer-last-logged-time
string
x-fapi-customer-ip-address
string
x-fapi-interaction-id required
string
x-fapi-customer-user-agent
string
x-client-id required
string
x-request-id required
string
Authorization required
string
x-app-cat-id
string
true-client-ip required
string
x-crypto-key
string
x-api-key required
string

Body

Response

Get money request status

Once your money request has been submitted, you can check its latest status at any time and as often as you like (CAMT.005). Please check our table below for more information about the possible statuses that can be returned (Pain.002).

Note: Instead of checking manually, you can also request automatic alerts whenever a money request status changes. You can choose which statuses you want to be notified about and if you want to receive them by API Webhook, email or text message. For more information, please contact your BMO representative or get help setting up your API Webhooks with our Push Notifications API documentation.

Post
/tpp/interac-etransfer/payment-initiation/get-request-for-payment-transaction

Request

Code Samples

Headers

x-fapi-financial-id
string
x-fapi-customer-last-logged-time
string
x-fapi-customer-ip-address
string
x-fapi-interaction-id required
string
x-fapi-customer-user-agent
string
x-client-id required
string
x-request-id required
string
Authorization required
string
x-app-cat-id
string
true-client-ip required
string
x-crypto-key
string
x-api-key required
string

Body

Response

Request money

You can quickly request money by email or collect instant payments within your own application for purchases or wallet funding. Here’s how it works:

Option 1: Request money using email

Step 1: Using our Request Money API endpoint, you send us your money request for the chosen amount (Pain.013). We then validate it and send you a response (Pain.014). You can specify a custom expiry period between 2 hours and 30 days.

Step 2: If there are no issues, we then forward the request to Interac which sends it as an email to the recipient.

Step 3: Recipient opens the email and reviews your request. If the recipient agrees to pay, they click the button.

Step 4: Recipient is redirected to a gateway URL where they select their financial institution.

Step 5: Recipient signs in and completes the payment.

Step 6: Payment is instantly deposited into the account you specified in your original request.

You and the recipient receive an email confirming that the payment was deposited.

Option 2: Collect payments within your application

Step 1: User decides to pay a fixed or custom amount during checkout and selects their payment method.

Step 2: Using our Request Money API endpoint, your application sends us the money request specifying that emails should be suppressed (Pain.013). We then validate it and send you a response (Pain.014).

Note: You still need to pass the user's email address even if you decide to suppress Interac emails.

Step 3: If there are no issues, we then forward the request to Interac which returns a gateway URL and suppresses the usual emails.

Step 4: To retrieve the gateway URL, use our Get payment status endpoint (CAMT.005) or let our Push Notifications API return it automatically.

Step 5: Your application displays the gateway URL to the user who picks their financial institution.

Step 6: User signs in to their online banking and completes the payment.

Step 7: Your application confirms the status of the deposit (CAMT.005 or Push Notifications API) and displays a success message.

The purchase or wallet funding is complete and irrevocable without the user ever leaving your application. Interac confirmation emails are suppressed to avoid confusion.

Post
/tpp/interac-etransfer/payment-initiation/creditor-payment-activation-request

Request

Code Samples

Headers

x-fapi-financial-id
string
x-fapi-customer-last-logged-time
string
x-fapi-customer-ip-address
string
x-fapi-interaction-id required
string
x-fapi-customer-user-agent
string
x-client-id required
string
x-request-id required
string
Authorization required
string
x-app-cat-id
string
true-client-ip required
string
x-crypto-key
string
x-api-key required
string

Body

Response

Get payment options

Before you can send a payment, you'll need to first check which payment option is available for the recipient’s email or account number:

Real-time deposits

Emails with Autodeposit

Account number routing supported by recipient bank

Interac e-Transfer with security question

Emails without Autodeposit

Using our Get Payment Options API endpoint, you'll submit your encrypted request in the ACMT.023 format. In our response (ACMT.024), we'll then return if real-time deposits are available and will provide a Reference ID you'll need to include when submitting your payment (Pain.001). Reference IDs expire within 10 minutes.

Note: If you’re trying to send a payment to an email address that is registered for Autodeposit, our ACMT.024 response will also include the registered trade name or legal name of the account holder. This helps confirm that you’re paying the right person or company

Post
/tpp/interac-etransfer/payment-initiation/get-emt-recipient-payment-options/get

Request

Code Samples

Headers

x-fapi-financial-id
string
x-fapi-customer-last-logged-time
string
x-fapi-customer-ip-address
string
x-fapi-interaction-id required
string
x-fapi-customer-user-agent
string
x-client-id required
string
x-request-id required
string
Authorization required
string
x-app-cat-id
string
true-client-ip required
string
x-crypto-key
string
x-api-key required
string

Body

Response

Send payment

Now that you know which payment option is supported, it’s time to create your payment. Using our Send Payment API endpoint, you’ll submit your encrypted payment details (Pain.001). You must do so before your Reference ID from the previous call expires. For payments sent to an email address without Autodeposit, you can specify a custom expiry period between 1-30 days.

This call returns a confirmation if your file passed our validations (Pain.002). If no issues are found, payments are immediately forwarded to Interac for processing. Scheduling future payments is not possible via our API.

Post
/tpp/interac-etransfer/payment-initiation/customer-credit-transfer-initiation

Request

Code Samples

Headers

x-fapi-financial-id
string
x-fapi-customer-last-logged-time
string
x-fapi-customer-ip-address
string
x-fapi-interaction-id required
string
x-fapi-customer-user-agent
string
x-client-id required
string
x-request-id required
string
Authorization required
string
x-app-cat-id
string
true-client-ip required
string
x-crypto-key
string
x-api-key required
string

Body

Response