Sign in
An image of the Stripe logo
Create account
Sign in
Home
Payments
Business operations
Financial services
Developer tools
No-code
All products
Home
Payments
Business operations
Home
Payments
Business operations
Financial services
Developer tools
Overview
Online payments
Products and prices
Invoicing
    Overview
    How invoicing works
    Get started
    No-code quickstart guide
    Payment methods
    Invoicing resources
    Customers
    Products and prices
    Taxes
    Manage invoices
    Use the Dashboard
    Integrate with the API
    Customize invoices
    Edit invoices
    Send customer emails
    Hosted Invoice Page
    Invoicing and Connect
    Automated collections
    Automatic reconciliation
    Automatic collection
    Automatic charging
    Global invoicing
    Set up invoices in Europe
    Set up invoices in Japan
    Multi-currency customers
    India e-Mandates
    Customize the IBAN country
Subscriptions
Quotes
In-person payments
Multiparty payments
After the payment
Add payment methods
Payment Links
Stripe Checkout
Stripe Elements
About the APIs
Regulation support
Implementation guides
Testing
Invoicing
·
HomePaymentsInvoicing

Automatic reconciliation
Invoicing Plus

Let Stripe handle the cash reconciliation for credit transfer payment methods.
Sources versus payment methods

This page covers the Sources-based implementation of credit transfers. We recently released the customer balance payment method, which also supports invoice payment with bank transfers. For more information on using the customer balance payment method with invoices, see Bank transfer.

Get started

To start using Invoicing features, log in to the Dashboard and select a Billing plan.

​​Businesses often use credit transfer payments for large deals or new business relationships. Credit transfer payments can generate a lot of manual work for your team. Stripe facilitates this process by accepting transfers that pay open invoices.

For each of your customers, Stripe auto-generates a US virtual bank account number that can be paid in USD with ACH credit or wires. When your customer sees an invoice with this virtual bank account, they can send payment to it. ​​Stripe automatically reconciles the payment with the virtual bank account and the invoice. Stripe then marks the invoice as paid.

Transfers versus debits

Using automatic reconciliation means that you don’t need to expose your sensitive bank account details to users or manually reconcile open invoices with your bank. With auto-reconciliation for invoices, Stripe can:

  • Match incoming payments with invoice amounts.
  • Manage overpayment or underpayment, when the amount paid doesn’t match the invoice.
  • Reduce the number of API calls required to transfer funds into Stripe.
  • Manage payment retries on open invoices.

Pay an invoice

If a customer doesn’t have an ach_credit_transfer subhash, Stripe creates one for every invoice. All invoices include instructions on where to send payment. Also, each customer has a unique payment address that’s shared across their invoices. With the ach_credit_transfer subhash, customers can transfer funds through either the US ACH system or domestic wire, and include an invoice number in the memo field.

​​ACH credit transfers only support USD.

As soon as a customer makes a transfer, Stripe matches the payment to an invoice by checking for an invoice number in the memo field of the transfer. We fulfill any invoices that we find a match for. If we can’t find a match, we fulfill the oldest outstanding invoice of the same amount. When an invoice is fulfilled, an invoice.paid event occurs (you can receive this event by using webhooks).

You can inspect the status of any ACH credit transfer by viewing the list of payment methods for the customer in the Dashboard. You can also see the status by viewing a customer’s sources in the API:

Command Line
curl https://api.stripe.com/v1/customers/cus_9jWC3097MQwYwF/sources \ -u
sk_test_4eC39HqLyjWDarjtT1zdp7dc
:

Stripe returns a list of sources attached to that customer. The source type for an ACH credit transfer has a value of ach_credit_transfer. In the following response example, the ACH credit transfer receiver is awaiting payment from the customer:

{ "object": "list", "data": [ { "id": "src_19Q3AILlRB0eXbMt81RVDnM9", "object": "source", "amount": null, "client_secret": "src_client_secret_Z0zPIgnR0BVafiMLaJcxI3HS", "created": 1481585102, "currency": "usd", "customer": "cus_9jWC3097MQwYwF", "flow": "receiver", "livemode": false, "metadata": {}, "owner": { "address": null, "email": "jenny.rosen@example.com", "name": null, "phone": null, "verified_address": null,

Occasionally, customers might want to use payment methods outside of Stripe, such as paper checks. In these situations, Stripe allows you to keep track of your invoice’s payment status. After you receive an invoice payment from a customer outside of Stripe, you can manually mark their invoice as paid:

Command Line
curl https://api.stripe.com/v1/invoices/in_18jwqyLlRB0eXbMtrUQ97YBw/pay \ -u
sk_test_4eC39HqLyjWDarjtT1zdp7dc
: \ -d paid_out_of_band=true

Handle exceptions

If your customer pays an amount that doesn’t match an invoice amount, the funds aren’t charged and remain in the Source​ object. If you want to use these funds to fulfill your invoice, you have a few options:

  • Overpayment—If a user sends more funds than the invoice requests, Stripe automatically marks the invoice as paid, using the funds that match the open invoice. The remaining funds stay in the Source receiver. You can manually apply these funds to an invoice. If you have multiple matching open invoices, Stripe applies the funds to the oldest invoice.
  • Underpayment—In your Subscription and emails settings, you can specify rules around underpayment in the Partial payments section. You can specify that within a certain margin of error, Stripe auto-reconciles invoices and credits the difference.

A typical scenario for underpayment might be that a customer’s bank takes funds from the total amount sent. For example, ​​if the customer sends 100 USD to pay their 100 USD invoice, the customer’s bank might take 20 USD, which leaves you with 80 USD. If this difference (which is usually within 20 USD) is acceptable, you can ​​minimize manual effort by specifying this margin ahead of time.

For any other exceptions:

  • ​If the receiver has enough money to pay your invoice, you can claim those funds in the Dashboard by clicking the Charge customer button on the invoice, or by calling the Pay invoice endpoint and specifying the ACH credit transfer object as the source.
  • ​​If the funds to pay the invoice are insufficient and you don’t forgive the difference, you can ask your customer to send the remaining amount. You can also void the old invoice, open a new one for the lesser amount, and immediately click Charge customer on it.

If your customer has an ACH credit transfer source with sufficient funds, or a credit card or bank account on file, you can use those sources to pay the invoice by calling the Pay invoice endpoint with the source you want to use.

Refund payments

You can refund ACH credit transfer and check payments through either the Dashboard or the API. However, the customer must specify the account to return the funds to. Stripe automatically contacts the customer at the email address provided. As soon as the customer provides us with their account information, we process the refund automatically.

The initial status of the refund is pending. If the refund fails, ​​you’ll receive the charge.refund.updated​ event, and the status of the refund transitions to failed. This means that ​​we couldn’t process the refund, and you must return the funds to your customer outside of Stripe. This is a rare occurrence, which can happen if the refund is sent to an account that has been frozen. Refunds that have been completed have a succeeded status.

Test payment

If ​​you’re in test mode, you can simulate transferring money into the receiver by updating the owner email on the source to amount_XXXX@any_domain.com, where XXXX is the amount of money you want to simulate transferring. ​​The payment won’t be associated with the invoice unless Stripe has frozen the invoice from editing. This happens either one hour after webhooks have been delivered, or when you’ve sent the customer an email for the invoice. In the Dashboard, you can immediately send an email by clicking the invoice’s Send invoice button.

Command Line
curl https://api.stripe.com/v1/sources/src_19Q3AILlRB0eXbMt81RVDnM9 \ -u
sk_test_4eC39HqLyjWDarjtT1zdp7dc
: \ -d "owner[email]"="amount_1000@example.com"

A few moments after the update request, you can retrieve the receiver parameter:

Command Line
curl https://api.stripe.com/v1/sources/src_19Q3AILlRB0eXbMt81RVDnM9 \ -u
sk_test_4eC39HqLyjWDarjtT1zdp7dc
:

If the update request succeeded, the receiver attribute shows the funds:

{ "object": "list", "data": [ { "id": "src_19Q3AILlRB0eXbMt81RVDnM9", "object": "source", "amount": null, "client_secret": "src_client_secret_Z0zPIgnR0BVafiMLaJcxI3HS", "created": 1481585102, "currency": "usd", "customer": "cus_4fdAW5ftNQow1a", "flow": "receiver", "livemode": false, "metadata": {}, "owner": { "address": null, "email": "amount_1000@test.com", "name": null, "phone": null, "verified_address": null,

In this instance, the customer’s open invoice (of the same amount) transitions to paid. It has a corresponding payment object that displays the details of the payment.

Was this page helpful?
Need help? Contact Support.
Watch our developer tutorials.
Check out our product changelog.
Questions? Contact Sales.
Powered by Markdoc
You can unsubscribe at any time. Read our privacy policy.
On this page
Pay an invoice
Handle exceptions
Refund payments
Test payment
Stripe Shell
Test mode
Welcome to the Stripe Shell! Stripe Shell is a browser-based shell with the Stripe CLI pre-installed. Login to your Stripe account and press Control + Backtick on your keyboard to start managing your Stripe resources in test mode. - View supported Stripe commands: - Find webhook events: - Listen for webhook events: - Call Stripe APIs: stripe [api resource] [operation] (e.g. )
The Stripe Shell is best experienced on desktop.
$