RyzeDeskRyzeDesk

Stripe

4105 articles

Save details for future payments with ACH Direct Debit


Save details for future payments with ACH Direct Debit

Learn how to save payment method details for future ACH Direct Debit payments.

Checkout

Elements

Mobile

You can use Checkout in setup mode to collect payment method details in advance, with the final amount or payment date determined later. This is useful for:

  • Saving payment methods to a wallet to streamline future purchases
  • Collecting surcharges after fulfilling a service
  • Starting a free trial for a subscription

Note

ACH Direct Debit is a delayed notification payment method, which means that funds aren’t immediately available after payment. A payment typically takes 4 business days to arrive in your account.

Before you begin

This guide shows you how to extend the foundational set up future payments Checkout integration to add support for ACH Direct Debit payments.

Use the Accounts v2 API to represent customers

The Accounts v2 API is generally available for Connect users, and in public preview for other Stripe users. If you’re part of the Accounts v2 preview, you need to specify a preview version in your code.

To join the Accounts v2 preview, go to Account previews and features in your Dashboard and enable Reusable payment methods for Global Payouts.

For most use cases, we recommend modelling your customers as customer-configured Account objects instead of using Customer objects.

Create a customer-configured Account object when your user creates an account with your business, or retrieve an existing Account associated with this user. Associating the ID of the Account object with your own internal representation of a customer enables you to retrieve and use the stored payment method details later. Include an email address on the Account to enable Financial Connections’ return user optimisation.

Command Line

Select a language

cURL

Stripe CLI

Ruby

Python

PHP

Java

Node.js

Go

.NET

No results

Enable ACH Direct Debit as a payment method

When creating a new Checkout Session, you need to:

  1. Enable US bank account in your Dashboard. Stripe automatically displays US bank account to eligible customers using dynamic payment methods . If you currently specify payment _ method _ types , see the migration guide .
  2. Set the permissions parameter to include payment _ method .

Command Line

Select a language

cURL

Stripe CLI

Ruby

Python

PHP

Java

Node.js

Go

.NET

No results

By default, collecting bank account payment information uses Financial Connections to instantly verify your customer’s account, with a fallback option of manual account number entry and microdeposit verification. See the Financial Connections docs to learn how to configure Financial Connections and access additional account data to optimise your ACH integration. For example, you can use Financial Connections to check an account’s balance before initiating the ACH payment.

Note

To expand access to additional data after a customer authenticates their account, they must re-link their account with expanded permissions.

During the Checkout session, the customer sees a dialog that gives them the option to use instant verification or provide bank account details for microdeposit verification.

If the customer opts for microdeposit verification, Stripe automatically sends two small deposits to the provided bank account. These deposits can take 1-2 business days to appear on the customer’s online bank statement. When the deposits arrive, the customer receives an email with a link to confirm these amounts and verify the bank account with Stripe. After verification completes, the payment begins processing.

Test your integration

Learn how to test scenarios with instant verifications using Financial Connections.

Send transaction emails in a sandbox

After you collect the bank account details and accept a mandate, send the mandate confirmation and microdeposit verification emails in a sandbox.

If your domain is {domain} and your username is {username}, use the following email format to send test transaction emails: {username}+test_email@{domain}.

For example, if your domain is example.com and your username is info, use the format **** for testing ACH Direct Debit payments. This format ensures that emails route correctly. If you don’t include the +test_email suffix, Stripe won’t send the email.

Common mistake

You must set up your Stripe account before you can trigger these emails while testing.

Test account numbers

Stripe provides several test account numbers and corresponding tokens you can use to make sure your integration for manually-entered bank accounts is ready for production.

Account numberTokenRouting numberBehavior
000123456789pm_usBankAccount_success110000000The payment succeeds.
000111111113pm_usBankAccount_accountClosed110000000The payment fails because the account is closed.
000000004954pm_usBankAccount_riskLevelHighest110000000The payment is blocked by Radar due to a high risk of fraud.
000111111116pm_usBankAccount_noAccount110000000The payment fails because no account is found.
000222222227pm_usBankAccount_insufficientFunds110000000The payment fails due to insufficient funds.
000333333335pm_usBankAccount_debitNotAuthorized110000000The payment fails because debits aren’t authorized.
000444444440pm_usBankAccount_invalidCurrency110000000The payment fails due to invalid currency.
000666666661pm_usBankAccount_failMicrodeposits110000000The payment fails to send microdeposits.
000555555559pm_usBankAccount_dispute110000000The payment triggers a dispute.
000000000009pm_usBankAccount_processing110000000The payment stays in processing indefinitely. Useful for testing PaymentIntent cancellation.
000777777771pm_usBankAccount_weeklyLimitExceeded110000000The payment fails due to payment amount causing the account to exceed its weekly payment volume limit.
000888888885110000000The payment fails because of a deactivated tokenised account number.

Before test transactions can complete, you need to verify all test accounts that automatically succeed or fail the payment. To do so, use the test microdeposit amounts or descriptor codes in the following table.

Test microdeposit amounts and descriptor codes

To mimic different scenarios, use these microdeposit amounts or 0.01 descriptor code values.

Microdeposit values0.01 descriptor code valuesScenario
32 and 45the related settingSimulates verifying the account.
10 and 11the related settingSimulates exceeding the number of allowed verification attempts.
40 and 41the related settingSimulates a microdeposit timeout.

Test settlement behaviour

Test transactions settle instantly and are added to your available test balance. This behaviour differs from live mode, where transactions can take multiple days to settle in your available balance.

Use the payment method

After completing the Checkout Session, you can collect the PaymentMethod ID. You can use these PaymentMethod IDs to initiate future payments without having to prompt the customer for their bank account a second time.

When creating a PaymentIntent, provide the payment_method and customer IDs to charge your customer using their saved bank account information.

Optional Instant only verification

Optional Access data on a Financial Connections bank account

Optional Updating the default payment method

Last verified 2026-09-27

Is this helpful?