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 same type)

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

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

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 a batch of up to 200 payments within the same call. They must be of the same type (ACH credits or IAT credits), but you can mix 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 bundle up to 200 payments in a single batch as long as they are of the same type (ACH debits or IAT debits), but you can mix 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