ACH Direct Debit payments
Learn how to make ACH payments by using Monite payment rails.
Available in: 🇺🇸 US
Supported currencies: USD
Overview
US-based entities can use the Automated Clearing House (ACH) network to pay their payables, either individually or in bulk. This guide is for Monite partners who want to implement the ACH payment functionality for their entities.
All API calls mentioned in this guide require a partner access token.
Implementing ACH payments
Implementing ACH payments includes the following steps:
- Enable the ACH payment method for an entity and onboard this entity.
- The entity needs to verify the ownership of its US bank account.
- After successful onboarding and verification, the entity can make ACH payments.
Requirements
This guide assumes that:
- Both the entity and the counterparts (payment recipients) are US-based and have US bank accounts.
- The entity has the
us_ach
payment method enabled. - The entity has verified the ownership of its bank account.
Requirements for counterparts:
- The address specified by
default_billing_address_id
must have all fields filled in, including optional fields. Optional fields with no value should be stored as empty strings instead ofnull
. - If
default_billing_address_id
is not specified, the counterpart’s default address is instead used as the billing address. This default address must have all fields filled in.
Additionally, each counterpart’s bank account that will be specified in batch payment request must have these fields filled in:
account_holder_name
account_number
routing_number
1. Subscribe to the webhooks
To get notified about the status updates of payments made by entities, you need to subscribe to these webhooks:
batch_payment.status_updated
- notifies about status transitions of a batch payment as a whole;payment_intent.status_updated
- notifies about status transitions of individual payment intents within the batch payment.
2. Create an ACH payment
To create an ACH payment on behalf of an entity, call POST /batch_payments
and provide information about the payables that the entity wants to pay and the entity’s bank account to withdraw funds from. A single request can include one or more payables.
The specified payables must be in the waiting_to_be_paid
status.
The POST /batch_payments
endpoint creates one payment intent per each payable specified in the request’s payment_intents
list. A list of the created intents is returned in the payment_intents
field of the created batch payment. Each payment intent specifies the amount
to be paid (taken from the payable object’s data), and the total amount of all payments are returned in the total_amount
field.
3. Track the payment status
Batch payment statuses
A batch payment goes through several statuses, some of which also reflect the statuses of the individual payment intents within this batch payment.
Check the batch payment status
Assuming you have subscribed to the payment webhooks, you will receive the batch_payment.status_updated
and payment_intent.status_updated
webhooks whenever the payment status is updated.
In the case of the batch_payment.status_updated
webhook, the event payload contains the batch payment ID (object_id
) and the ID of the entity that made this payment (entity_id
):
Use these IDs to query the new status of the batch payment by calling GET /batch_payment/{id}
:
The returned batch payment object contains the statuses of the batch payment itself and its individual payment intents, among other details. If the batch payment status is partially_successful
or failed
, the error
fields contain any errors that occurred while processing the batch payment as a whole and individual payment intent.