Automatic migration to Bank Transfers
Learn what changes you can expect when Bank Transfers replace ACH Credit Transfers.
Stripe is replacing the ACH Credit Transfers payment method with Bank Transfers. As part of the Sources API deprecation, Stripe is replacing the ACH Credit Transfers payment method with Bank Transfers, so you won’t be able to use ACH Credit Transfers in your workflows moving forward. This migration occurs automatically for accounts processing ACH Credit Transfers through invoices or subscriptions.
You might need to adjust your integration if:
- Your setup includes webhook endpoints listening for
source.
,transaction. created source.
,chargeable source.
, orrefund_ attributes_ required customer.
events. Learn more about changes to webhooks.source. created - You use the Billing API and depend on ACH Credit Transfer source objects. Learn more about changes to the API.
Otherwise, you don’t need to take any action, and the migration won’t disrupt your operations or those of your customers.
During the migration to Bank Transfers:
- There won’t be any change to the bank account information that your customers currently use to send credit transfers.
- The automatic migration appears seamless from your customer’s perspective. The structure of the hosted invoice page or PDF that you currently share with your customer won’t change.
- Existing open invoices and subscriptions with ACH Credit Transfer as an enabled payment method update to present Bank Transfers instead.
Bank Transfer improvements
Bank Transfers allow you to:
- Reconcile multiple invoices: You can reconcile multiple invoices with a single transfer using our reconciliation algorithm, allowing your customers to pay batches of invoices with one bank transfer. You can also use manual reconciliation mode, configurable at an account or customer level.
- Use an enhanced refund process: This includes a customer refund email outreach flow with a UI that allows your customers to enter their bank account details for refunds.
- Use test mode: You can simulate bank transfer fundings in test mode to test edge cases of overfunding or underfunding, and fundings associated with specific banking rails such as ACH, Fedwire, or SWIFT.
- Generate a self-serve VBAN ownership letter: You can generate a self-serve VBAN ownership letter for your customers through the Dashboard.
- Add the USD Cash Balance payment method: Stripe removes and replaces the ACH Credit Transfer payment method linked to your customers with the USD Cash Balance payment method.
Dashboard changes
Invoice page
Access the Invoice page through dashboard.
.
Before | After |
---|---|
Subscription page
Access the Subscription page through dashboard.
.
Before | After |
---|---|
Stripe removes and replaces the ACH Credit Transfer payment method linked to your customers with the USD Cash Balance payment method. If your customer has unreconciled funds in their ACH Credit Transfer payment method, those funds move to their cash balance. You’ll no longer have the ability to use the ACH Credit Transfer payment method for any operation. This change appears in the Payment methods section of the Customer page.
Customer page
Access the Customer page through dashboard.
.
Before | After |
---|---|
Payment method view
Access the Payment method view through dashboard.
for ACH credit transfers and dashboard.
for Bank Transfers.
Before | After |
---|---|
Source object view | View balance details page |
Balance details view
The Balance details view for a customer offers a comprehensive overview of all bank transfer data associated with that customer:
- Shows the customer’s bank account information.
- Lists all transactions applied to the customer’s cash balance.
- Records all bank transfer refunds.
- Allows you to download a PDF letter confirming the ownership of the bank account that you share with the customer. We encourage you to share this PDF with your customers if they request it.
Charge invoices
If you’re manually charging invoices through the Dashboard, you can continue doing so using the same Charge customer button on dashboard.
:
In the Charge customer dialog, select Cash Balance instead of ACH Credit Transfer:
Before | After |
---|---|
Note
You can charge old ACH credit transfer invoices using the Cash Balance if they don’t have bank transfer as an enabled payment method.
ACH Credit Transfer settings
If you currently set ACH Credit Transfer as enabled by default for all your invoices, you see a change in your account’s invoice settings under Default payment terms:
Because Bank Transfers have automatically been enabled in your invoice settings, all new invoices generated on your account (either manually or through existing or new subscriptions) will enable Bank Transfers by default.
If ACH Credit Transfer is currently disabled (meaning, it’s not included by default on all your invoices), Stripe doesn’t update your account’s invoice settings.
Reconciliation
Overall, the reconciliation logic of Bank Transfers aligns with Credit Transfers when a transfer reaches Stripe:
- First, it attempts to match the bank transfer reference with the invoice number.
- If that doesn’t work, it then tries to match the transfer amount with the amount of the customer’s open invoices.
- If there’s no exact amount match, the algorithm funds as many invoices as possible in full, prioritizing the oldest finalized invoices first.
However, there’s a slight difference in the detailed logic of the step where Stripe matches by exact amount:
- In ACH Credit Transfer, Stripe attempts to match only one invoice by the exact amount.
- With Bank Transfers, Stripe searches for a group of 1-5 invoices that total the exact amount the user sent. Stripe then sorts those groups based on their size and finalization date, enabling your customers to batch pay multiple invoices with the same transfer.
Learn more about how Bank Transfers reconciliation works.
Refunds
Overall, the refund logic of Bank Transfers aligns with ACH Credit Transfers:
- You issue a credit or bank transfer invoice to your customer.
- Your customer sends a transfer to the specified bank account.
- The transfer reaches Stripe and gets reconciled to the open invoice. The invoice status changes to paid.
- You issue a refund for the payment related to that invoice.
- The customer receives an email prompting them to enter their bank account details for the refund.
- Stripe processes the refund to the provided bank account.
You can process refunds using the same interface you currently use. Learn more about refunding a customer.
You can send the refunded funds to the cash balance instead of sending them to the customer’s bank account. This allows you to use those funds for the customer’s future invoices:
We have also updated the user interface that your customers use to enter their bank account details in response to the email outreach:
Before | After |
---|---|
Learn more about bank transfer refunds.
Unreconciled funds
Similar to ACH Credit Transfers, Bank Transfers can manage cases of over-funding. In the deprecated product, the remaining funds are stored in the Source
object, but in Bank Transfers, unreconciled funds go to the customer’s cash balance. In both situations, you can either capture those funds by creating a payment or choose to return them to the sender. If the unreconciled funds remain unclaimed for a certain period, Stripe performs specific actions to address it.
Functionality | Before | After |
---|---|---|
Storage of unreconciled funds | Source object | Customer cash balance |
Inspect unreconciled funds | Remaining Balances tab ofdashboard.stripe.com/customers | |
Take action on unreconciled funds | ||
Failing to timely action unreconciled funds | If an unreconciled funding remains at the Source for more than 45 days, it automatically sweeps to your account balance. The sweeping process is executed on a monthly basis (on the 15th of each month) and sweeps fundings that are older than 45 days. Hence, a funding can remain un-actioned in the source from 45 to 60 days. | An unreconciled funding can remain un-actioned in the cash balance of a customer for 75 days. At that point, Stripe attempts to automatically refund the funds back to the customer. If the refund to your customer fails (for example, if the customer doesn’t enter their bank information following the email outreach), Stripe leaves the funds in the cash balance for another 15 days. At the 90-day mark, Stripe sweeps the unreconciled funding to your Stripe account balance. |
Learn more about how unreconciled funds are handled in Bank Transfers.
Webhooks
Note
Skip this section if you haven’t configured webhook endpoints listening for source.
, source.
, source.
, or customer.
events. See what endpoints you’ve configured in the Dashboard.
After your account automatically migrates to Bank Transfers, the following webhook events related to ACH Credit Transfer stop:
source.
transaction. created source.
chargeable customer.
source. created source.
refund_ attributes_ required
Verify that the suspension of ACH Credit Transfer webhook events won’t impact your workflows. If your integration depends on these events (for example, a plugin or app installed on your Stripe account might be listening for them), contact us.
Changes with the Billing API
Note
Skip this section if you don’t integrate with the Stripe API for Billing.
The Invoice objects created as part of your Billing API integration start referencing customer_
(the payment method type of Bank Transfers) instead of ach_
.
If you create Invoice and Subscription objects by explicitly including ach_
in the payment_settings.payment_method_types array parameter, your integration still functions properly and you can continue to pass ach_
as part of your request. However, Stripe adjusts your request, and the Invoice
and Subscription
objects you created list customer_
instead of ach_
:
Here’s the finalized Invoice
and PaymentIntent
objects:
{ "id": "{{INVOICE_ID}}", "object": "invoice", "payment_settings": { "payment_method_types": [ "ach_credit_transfer", "card", "customer_balance" ] }, "payment_intent": { "object": "payment_intent", "id": "{{PAYMENT_INTENT_ID}}", "payment_method_types": [ "ach_credit_transfer", "customer_balance" ] } }
Stripe also updates historical Subscription
objects in your account that you created with ach_
included in the payment_settings.payment_method_types array parameter. The payment_
array of your existing Subscription
objects updates to include customer_
instead of ach_
.
If your API integration relies on ach_
being present in any of the following API response fields, contact us because the automatic migration might disrupt your integration:
- The Invoice object’s payment_settings.payment_method_types
- The Subscription object’s payment_settings.payment_method_types
- The Payment Intent object’s payment_method_types
The ACH Credit Transfer Source
objects detach from your customers. This means that if you depend on the Customer.default_source field being present, you might find that it starts returning as null
instead of the src_
ID of the ACH Credit Transfer source previously attached to the customer.
Opt out
To exclude your account from the automatic migration, contact us. We’ll provide you with a deadline to manually migrate your account to Bank Transfers. You won’t be able to continue using the deprecated ACH Credit Transfer product.