Why Offer ACH Direct Debit?
Lower Processing Cost
Bank debits typically cost less to process than card payments, especially on high-value orders.
No Card Required
Reach US customers who prefer paying from a bank account or who don’t want to use a card for large purchases.
Higher Value Orders
The cost advantage over cards grows with order value, making ACH well suited to large one-time purchases.
Overview
How It Works
Customer Experience
- Customer selects ACH Direct Debit at checkout
- Customer authorizes the debit against their US bank account
- The payment is submitted to the ACH network and enters a processing state
- Clearing completes over the following business days
- The payment moves to a succeeded state, or fails if the bank returns it
Because clearing is asynchronous, rely on webhooks to learn the final outcome rather than the checkout redirect. A successful redirect only means the customer authorized the debit.The payment emits
payment.processing once the debit is submitted, then payment.succeeded or payment.failed when clearing completes. Only payment.succeeded is safe to fulfill on.Availability
ACH Direct Debit appears at checkout when all of the following are true:- Billing currency is
USD - Billing country is
US - The transaction is a one-time payment
ACH Direct Debit is not available for subscriptions. Its multi-day clearing window makes it unsuitable for recurring billing cycles. For recurring payments, use cards or another method that supports subscriptions — see the Payment Methods overview.
Configuration
ACH Direct Debit requires a USD billing currency and a US billing address. If you quote your prices in another currency, enable Adaptive Currency so US customers are billed in USD and ACH becomes available.
API Method Type
Refunds and Disputes
Refunds and disputes for ACH payments use the same APIs and dashboard flows as every other payment method — there is no ACH-specific handling to implement.Testing
1
Enable test mode
Use your Dodo Payments test API keys.
2
Set currency and billing address
Set the billing currency to
USD and the billing address country to US.3
Include `ach` in allowed methods
Pass
ach in allowed_payment_method_types, or omit the field entirely to show every eligible method.4
Enter the test bank details
Enter one of the test routing and account number pairs below, then confirm your webhook handler receives the final payment status.
Test Bank Accounts
Customers enter their account and routing number directly at checkout. In test mode, use the routing number110000000 with any of the account numbers below to force a specific outcome.
Most test payments reach a final status far faster than the live clearing window, so you don’t need to wait days to verify your integration. The exception is
000000000009, which is designed to stay in processing.Best Practices
Set customer expectations at checkout
Set customer expectations at checkout
Tell customers that bank payments don’t clear instantly. This reduces support tickets asking why an order is still pending.
Provide card fallbacks
Provide card fallbacks
Always include
credit and debit alongside ach so customers who need instant access to your product can choose a faster method.Use ACH for high-value one-time purchases
Use ACH for high-value one-time purchases
The cost advantage of ACH grows with order value, so it is most useful on large one-time purchases rather than small ones.
Troubleshooting
ACH not appearing at checkout
ACH not appearing at checkout
Check:
- Billing currency set to
USD? - Customer billing country is
US? achincluded inallowed_payment_method_types?- Is this a one-time payment? ACH is not offered on subscriptions.
allowed_payment_method_types temporarily to see all eligible methods, then verify the billing currency and address country in your API request.ACH not appearing on a subscription checkout
ACH not appearing on a subscription checkout
Cause: ACH Direct Debit is only offered for one-time payments.Solution: Use cards or another subscription-capable method for recurring billing.
Payment stuck in processing
Payment stuck in processing
Cause: This is expected. ACH payments remain in a processing state for the full clearing window, far longer than card payments.Solution: Wait for the final webhook. Do not retry the payment — retrying can debit the customer twice.
Payment failed after initially succeeding at checkout
Payment failed after initially succeeding at checkout
Cause: The customer’s bank returned the debit — most commonly for insufficient funds or a closed account.Solution: Treat the payment as failed and ask the customer to retry with another payment method. Always gate fulfillment on the succeeded state to avoid this.
Related Pages
Payment Methods Overview
See all supported payment methods.
Adaptive Currency
Currency support and automatic conversion.
Checkout Guide
Complete checkout implementation guide.
Webhooks
Handle delayed payment confirmations asynchronously.