Skip to content
Create account
or
Sign in
The Stripe Docs logo
/
Ask AI
Create account
Sign in
Get started
Payments
Finance automation
Platforms and marketplaces
Money management
Developer tools
Get started
Payments
Finance automation
Get started
Payments
Finance automation
Platforms and marketplaces
Money management
Overview
About Stripe payments
Upgrade your integration
Payments analytics
Online payments
OverviewFind your use caseManaged Payments
Use Payment Links
Build a checkout page
Build an advanced integration
Build an in-app integration
Payment methods
Add payment methods
    Overview
    Payment method integration options
    Manage default payment methods in the Dashboard
    Payment method types
    Cards
    Pay with Stripe balance
    Bank debits
    Bank redirects
    Bank transfers
      Accept a payment
      Customer balance
        Reconciliation
        Funding instructions
        Virtual bank account numbers
        Migrating from ACH Credit Transfer Sources
          Migrate with Invoicing or Billing
          Migrate from the Sources API
          Migrate your Standard Connect integration
          Automatic migration to Bank Transfers
      Refunds
    Credit transfers (Sources)
    Buy now, pay later
    Real-time payments
    Vouchers
    Wallets
    Enable local payment methods by country
    Custom payment methods
Manage payment methods
Faster checkout with Link
Payment interfaces
Payment Links
Checkout
Web Elements
In-app Elements
Payment scenarios
Custom payment flows
Flexible acquiring
Orchestration
In-person payments
Terminal
Other Stripe products
Financial Connections
Crypto
Climate
HomePaymentsAdd payment methodsBank transfersCustomer balanceMigrating from ACH Credit Transfer Sources

Migrating your Standard Connect integration to USD Bank Transfers

Learn how to migrate your ACH Credit Transfer Standard Connect integration to USD Bank Transfers.

Copy page

Warning

We deprecated the Sources API and plan to remove support for local payment methods. If you currently integrate with ACH Credit Transfers, you must migrate to the Payment Methods API.

For information about migrating to USD Bank Transfer supported by the current APIs, refer to the documentation below.

Reasons to migrate

Account properties

Connected accounts can be configured with properties that determine how the account will behave. Account types can be mapped to their corresponding properties.
This content applies to connected accounts that have full Stripe Dashboard access. This includes Standard accounts.

If your Connect platform integrates with Standard connected accounts using ACH Credit Transfers, you can migrate to USD Bank Transfers. USD Bank Transfers enables your connected accounts to benefit from the most up-to-date bank transfer processes. To learn more about the improvements we added to the USD Bank Transfers product, see Migrating from Sources-based Credit Transfers.

Impact of not migrating

If you don’t migrate to Bank Transfers, you can continue to use the legacy ACH Credit Transfer product. Legacy means we won’t add new functionality to the ACH Credit Transfer going forward. To stay up to date, we recommend integrating with USD Bank Transfers instead.

If you don’t migrate to Bank Transfers, Stripe prevents your connected accounts from having compatibility issues:

  • Users who are currently connected to your platform won’t be able to request access to Bank Transfers through the Dashboard.
  • Users who’ve used Bank Transfers with one or more customers won’t be able to connect to your Stripe platform.

Stripe will remove these restrictions from your platform after your integration is ready to accept Bank Transfer payments.

Impact on the ACH Credit Transfers customers of your connected accounts

If you migrate, Stripe keeps the same bank account information for the customers of your connected accounts, which streamlines the process for them. If you don’t migrate, your connected account’s customers can still send funds using the legacy ACH Credit Transfer product.

Before you begin

  • To confirm if you’re using the legacy ACH Credit Transfers product, see the applicable Before you begin sections for:

    • Migrate from the Sources API
    • Migrate with invoicing or Billing
  • To confirm that you’re currently using Connect with Standard connected accounts, navigate to the Connected accounts page and filter by account type. If your live mode account list includes Standard accounts with status Enabled, then you’re using Standard Connect.

  • To confirm that you’re using direct charges on Standard Connect, verify the following:

    • If you’re using the API to create charges, the request includes the connected account ID as part of the Stripe-Account header.
    • You create charges on the connected account rather than your Stripe account.
    • The funds from these charges (minus Stripe’s fees) are directly available in the connected account’s balance.
  • If you’re not using ACH Credit Transfers with direct charges for Standard connected accounts, this guide doesn’t apply to you. If you’re using ACH Credit Transfers in other Connect configurations, see Migrating from Sources-based Credit Transfers.

Migrate to Bank Transfers integration

Use this guide to build a Bank Transfers integration alongside your existing ACH Credit Transfer integration. Use the new integration to migrate all the existing ACH Credit Transfer customers of your connected accounts to the new payment method.

Create a test Standard connected account

Create a Standard connected account in a sandbox for the purpose of testing the new integration.

Build a Bank Transfers integration

  1. Create a test customer:

    Command Line
    cURL
    curl https://api.stripe.com/v1/customers \ -u "
    sk_test_BQokikJOvBiI2HlWgH4olfQ2
    :"
    \ -H "Stripe-Account:
    {{CONNECTED_ACCOUNT_ID}}
    "
    \ -d name="Jenny Rosen" \ --data-urlencode email="jenny.rosen@example.com"
  2. Create an ACH Credit Transfer source and attach it to the customer

    Complete the steps in the integration guide of ACH Credit Transfer. Make sure to pass the Stripe-Account header in the API requests that create and attach the source to the customer. Save the bank details of the Source from the ach_credit_transfer field of the object to refer to later.

  3. Create and confirm a PaymentIntent

    At this point, you’re able to create and confirm a bank transfers PaymentIntent on the customer object of the connected account following the respective step in the Accept a payment guide. The Stripe-Account header must be passed to create the PaymentIntent on the customer of the connected account.

    Creating a customer_balance PaymentIntent in a sandbox always succeeds. However, in live mode direct charges require the connected account itself (not the platform) to have activated Bank Transfers. Hence, before creating the PaymentIntent on the connected account, the platform must use the bank_transfer_payments capability to determine whether this is the case. If Bank Transfers isn’t activated, your integration logic could fall back to the legacy ACH Credit Transfer payment method.

    server.py
    import stripe stripe.api_key =
    "sk_test_BQokikJOvBiI2HlWgH4olfQ2"
    def funding_instructions(connected_account: str, customer: stripe.Customer) -> dict: bank_transfer_payments_capability = stripe.Account.retrieve_capability( connected_account, "us_bank_transfer_payments", ) if bank_transfer_payments_capability["status"] == "active": pi = stripe.PaymentIntent.create( stripe_account=connected_account, amount=1099, currency="usd", customer=customer["id"], payment_method_types=["customer_balance"], payment_method_data={ "type": "customer_balance", }, payment_method_options={ "customer_balance": { "funding_type": "bank_transfer", "bank_transfer": { "type": "us_bank_transfer", }, }, }, confirm=True, ) return pi.next_action["display_bank_transfer_instructions"] else: source = stripe.Source.retrieve( stripe_account=connected_account, id=customer["default_source"] ) return source["ach_credit_transfer"]
  4. Confirm that the integration works

    After you test and confirm that the integration works, check if the bank details of the Credit Transfer Source have been migrated. Navigate to the customer details page in the Dashboard, and then expand Cash balance. The bank details of the Cash balance should match the ones obtained from the Source in Step 2.

    The customer of the connected account has been successfully migrated.

Contact Stripe

After you’ve built, tested, and deployed your integration to production, and have successfully served live traffic, please reach out to Stripe to let us know that your integration is compatible with Bank Transfers. We’ll make sure that your integration is working as expected and lift the restrictions imposed on your connected accounts. We’ll also activate Bank Transfers for all your connected accounts, which allows you to completely stop supporting the legacy payment method.

See also

  • Migrating from Sources-based Credit Transfers
Was this page helpful?
YesNo
Need help? Contact Support.
Join our early access program.
Check out our changelog.
Questions? Contact Sales.
LLM? Read llms.txt.
Powered by Markdoc