Our ACH Payments API is a quick, cost-effective way to send and collect domestic and international payments from the U.S. You can submit batches of up to 200 payments at any time and track them with real-time status updates.

Overview

Limits:

$99,999,999/payment

200 payments/call (must be all debits or all credits)

Up to 60 days in advance

Unlimited calls

Countries:

U.S., Mexico and Panama

USD only (local currency conversion at destination)

Speed:

Same day (available until 2 p.m. CT for payments within the U.S.)

2 business days (standard ACH and IAT)

Cut-off times (business days):

Same-day ACH payments

2:00 p.m. CT

Standard ACH and IAT payments

8:00 p.m. CT

A closer look

Cost-efficient bulk payments – You can bundle up to 200 payments in a single call and save. Batched payments must be of the same type.

Send now or later – You can send same-day payments or schedule them up to 60 days in advance. Bulk payments can have a mix of processing dates.

Separate processing – Payments sent or collected don’t appear in Online Banking for Business and cannot be modified once submitted. However, deletions and reversals are available in ACH Fraud Control.

Real-time tracking – Request on-demand status updates for your created payments or get automatic alerts by API, email or text message using our Push Notifications API. Payments are tracked up until the time they leave BMO, but potential issues at the other bank are also covered.

Easy reconciliation – You can subscribe to an automatic end-of-day report showing individual transactions that were offset by a consolidated PEP+ Generated settlement entry. This allows you to easily reconcile ACH settlements with their individual ACH entries.

Endpoints Summary

post
/tpp/ach/payment-initiation/customer-credit-transfer-initiation
Send Payment Credit
post
/tpp/ach/payment-initiation/customer-direct-debit-initiation
Send Payment Debit
post
/tpp/ach/payment-initiation/get-transaction-status/get
Obtain Payment Status
post
/tpp/ach/customer-access-entitlement/commercial-user-access-arrangement/get
Get Company ID List

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

Send payments

To reduce the number of necessary calls, you can submit one or more batches with a combined total of up to 200 payments within the same call. They must all be credits, but you can include a mix of current and scheduled payments (up to 60 days in the future).

Create your payments (Pain.001) by providing the type and all mandatory details as outlined in the Specifications document at the top. As a best practice, we recommend first sending a $0 prenote transaction and confirming a successful payment status before sending the actual amount. Our API supports both $0 prenotes and microdeposits of less than $1, but they need to be submitted as independent transactions. For added certainty, we also recommend the use of our Account Validation API.

Once submitted, we'll validate your payments and respond with the results (Pain.002). If there are no issues, we'll process your payments. No approvals are required.

Note: Payments don't appear in Online Banking for Business and cannot be modified once submitted. However, deletions and reversals are available in ACH Fraud Control.

Post
/tpp/ach/payment-initiation/customer-credit-transfer-initiation

Request

Code Samples

Headers

x-fapi-interaction-id required
string
x-fapi-customer-last-logged-time
string
x-fapi-customer-ip-address
string
x-fapi-customer-user-agent
string
x-fapi-financial-id
string
x-crypto-key
string
x-request-id required
string
x-sourcesystem-id
string
x-api-key
string
x-app-cat-id
string
x-csrf-token
string
x-content-type
string
x-expires
string
x-cache-control
string
x-content-disposition
string

Body

Response

Collect payments

You can also collect payments in bulk to reduce the number of necessary calls. You can submit one or more batches with a combined total of up to 200 payments within the same call. They must all be debits, but you can include a mix of current and scheduled payments (up to 60 days in the future).

Create your payments (Pain.008) by providing the type and all mandatory details as outlined in the Specifications document at the top. It's required to first submitting a $0 prenote transaction and confirming a successful payment status before collecting the actual amount. Our API supports both $0 prenotes and microdeposits of less than $1, but they need to be submitted as independent transactions. For added certainty, we also recommend the use of our Account Validation API.

Once submitted, we'll validate your payments and respond with the results (Pain.002). If there are no issues, we'll process your payments. No approvals are required.

Note: Payments don't appear in Online Banking for Business and cannot be modified once submitted. However, deletions and reversals are available in ACH Fraud Control.

Post
/tpp/ach/payment-initiation/customer-direct-debit-initiation

Request

Code Samples

Headers

x-fapi-interaction-id required
string
x-fapi-customer-last-logged-time
string
x-fapi-customer-ip-address
string
x-fapi-customer-user-agent
string
x-fapi-financial-id
string
x-crypto-key
string
x-request-id required
string
x-sourcesystem-id
string
x-api-key
string
x-app-cat-id
string
x-csrf-token
string
x-content-type
string
x-expires
string
x-cache-control
string
x-content-disposition
string

Body

Response

Get payment status

Check the latest status for your sent payments (CAMT.005). This call returns the current status of a particular payment batch (Pain.002) up until it leaves BMO. Please check our table below for more information about the possible statuses that can be returned.

Note: Instead of checking manually, you can also request automatic alerts by API Webhook, email or text message using our Push Notifications API.

Post
/tpp/ach/payment-initiation/get-transaction-status/get

Request

Code Samples

Headers

x-fapi-interaction-id required
string
x-fapi-customer-last-logged-time
string
x-fapi-customer-ip-address
string
x-fapi-customer-user-agent
string
x-fapi-financial-id
string
x-crypto-key
string
x-request-id required
string
x-sourcesystem-id
string
x-api-key
string
x-app-cat-id
string
x-csrf-token
string
x-content-type
string
x-expires
string
x-cache-control
string
x-content-disposition
string

Body

Response

Get ACH Company ID list

ACH Company IDs act as an alias for your BMO accounts and ACH payment types that can be used. This is an optional call to retrieve the list of available ACH Company IDs that have received consent for API use in .json format.

Note: This API endpoint is currently not available for testing in our Sandbox and Pre-Production environments.

Request

Code Samples

Headers

x-fapi-interaction-id required
string
x-fapi-customer-last-logged-time
string
x-fapi-customer-ip-address
string
x-fapi-customer-user-agent
string
x-fapi-financial-id
string
x-crypto-key
string
x-request-id required
string
x-sourcesystem-id required
string
x-api-key
string
x-app-cat-id
string
x-csrf-token
string
x-content-type
string
x-expires
string
x-cache-control
string
x-content-disposition
string

Body

Response