# Accept partial payments for invoices Learn how to capture partial payments made on an invoice. Most *invoices* (Invoices are statements of amounts owed by a customer. They track the status of payments from draft through paid or otherwise finalized. Subscriptions automatically generate invoices, or you can manually create a one-off invoice) are paid with a single payment. For larger invoices, you can accept multiple, smaller payments. You can use both the Dashboard and the API to accept partial payments. ## Capture partial payments #### Dashboard Before you can charge a customer from the Dashboard, make sure they have a saved payment method. 1. In the Dashboard, go to **Billing** > [Invoices](https://dashboard.stripe.com/invoices). 1. Select an invoice with an `open` status. 1. On the invoice details page, click **Charge customer**. 1. In the **Charge customer for invoice** window, update the **Amount**. You can charge any amount less than or equal to the total of the remaining balance on the invoice. 1. Click **Charge customer**. #### API When you finalise an [invoice](https://docs.stripe.com/api/invoices.md), Stripe creates a default payment that you can use to pay the invoice in full. You can’t directly edit the PaymentIntent that’s associated with the default payment. To support partial payments, you can create and attach a separate PaymentIntent to your invoice. Create a *PaymentIntent* (The Payment Intents API tracks the lifecycle of a customer checkout flow and triggers additional authentication steps when required by regulatory mandates, custom Radar fraud rules, or redirect-based payment methods) for the amount you want to pay against the invoice. The PaymentIntent must have the same `currency` and `customer` as the invoice, but you can specify any `amount` up to the [amount remaining](https://docs.stripe.com/api/invoices/object.md#invoice_object-amount_remaining) on the invoice. After you create the PaymentIntent, return the `client_secret` to the front end to complete payment: ```curl curl https://api.stripe.com/v1/payment_intents \ -u "<>:" \ -d amount=1000 \ -d currency=usd \ -d "customer={{CUSTOMER_ID}}" \ -d "automatic_payment_methods[enabled]=true" ``` Stripe creates an `InvoicePayment` when you attach a payment to an invoice. You can find all of an invoice’s payments by expanding the [payments](https://docs.stripe.com/api/invoices/object.md#invoice_object-payments) field. Attach the PaymentIntent to the invoice: ```curl curl https://api.stripe.com/v1/invoices/{{INVOICE_ID}}/attach_payment \ -u "<>:" \ -d "payment_intent={{PAYMENTINTENT_ID}}" ``` Learn more about using the Invoicing API to [collect payment details and complete the payment](https://docs.stripe.com/invoicing/integration.md). ### Payment lifecycle Every payment attempt that your customer makes is stored in the invoice’s [payments](https://docs.stripe.com/api/invoices/object.md#invoice_object-payments) list. The basic lifecycle looks like this: 1. Create a PaymentIntent. 1. Attach the PaymentIntent to the invoice. 1. The API automatically adds an InvoicePayment to the invoice’s `payments` list. 1. Confirm the PaymentIntent. 1. If the payment succeeds, Stripe updates the invoice’s `amount_paid` and `amount_remaining`. 1. When the invoice is fully paid, Stripe updates the `status` to `paid`. Attaching a `succeeded` PaymentIntent to an invoice updates the invoice immediately. Otherwise, Stripe waits for the payment to succeed before updating the invoice. ## Partial payments for subscription invoices For invoices that Stripe sends automatically after finalisation, you can accept partial payments for [active subscriptions](https://docs.stripe.com/billing/invoices/subscription.md). If you use the API, the [collection_method](https://docs.stripe.com/api/invoices/object.md#invoice_object-collection_method) is set to `send_invoice`. Partial payments aren’t supported for subscription invoices that are [charged automatically](https://docs.stripe.com/invoicing/automatic-charging.md). If you use the API, the `collection_method` is set to `charge_automatically`. The [subscription lifecycle](https://docs.stripe.com/billing/subscriptions/overview.md#subscription-lifecycle) is mostly the same for subscription invoices with partial payments. However, invoices are considered paid only when they’re fully paid. If you use the API, this means `amount_remaining` is `0` and `status=paid`. ## Invoice payment statuses Each invoice payment has a [status](https://docs.stripe.com/api/invoices/object.md#invoice_object-payments-data-status) you can use to determine whether a payment has succeeded without having to fetch the associated PaymentIntent. Some statuses also restrict the actions you can take: - When an invoice has `open` or `paid` payments, you can’t void or [edit](https://docs.stripe.com/invoicing/invoice-edits.md) the invoice. - When an invoice has `open` payments, you can’t mark it uncollectible. If a payment fully pays the invoice, the status moves to `paid`. The status for subscription invoices won’t change after a payment is applied. For any payment on an invoice, other than the default PaymentIntent created automatically by the invoice, you can change the payment status from `open` to `canceled` by [cancelling](https://docs.stripe.com/api/payment_intents/cancel.md) its associated PaymentIntent. ## Track partially paid invoices You can check the status of invoices with partial payments on the [Invoices](https://dashboard.stripe.com/invoices) page in the Dashboard. Add the **Amount remaining** column to display the remaining amount on the invoice. After your customer partially pays an invoice, they see the remaining amount on the invoice and a `partially paid` status in their customer portal. You can take one of the following actions on an invoice with a `partially paid` status: - Send the invoice to a customer for payment. - Change [some elements of the invoice](https://docs.stripe.com/invoicing/invoice-edits.md). To make more substantive changes, create a new invoice and void the old one. - Change the invoice status to `paid` or `uncollectible`. For any invoice payments that aren’t made by the due date, the `overdue` status takes precedence. If you use the API, view the `amount_due` and `payments` fields for invoice status details. ## Prevent invoice overpayment If an invoice has multiple `open` payments, it’s possible to inadvertently overpay the invoice. You can avoid overpayment by cancelling payments that you don’t need. When an overpayment happens, Stripe automatically credits the excess funds to the customer’s [credit balance](https://docs.stripe.com/invoicing/customer/balance.md). The balance transactions for these credits have an `invoice_overpaid` [type](https://docs.stripe.com/api/customer_balance_transactions/object.md#customer_balance_transaction_object-type). Your integration can listen to the [invoice.overpaid](https://docs.stripe.com/api/events/types.md#event_types-invoice.overpaid) webhook to handle overpayments using a custom integration. For example, to refund an overpayment: 1. Listen for the `invoice.overpaid` [webhook](https://docs.stripe.com/webhooks.md). 1. Use the [amount_overpaid](https://docs.stripe.com/api/invoices/object.md#invoice_object-amount_overpaid) field to determine the refund amount. 1. Retrieve the customer’s [invoice_credit_balance](https://docs.stripe.com/api/customers/object.md#customer_object-invoice_credit_balance). If the customer’s balance is less than the refund amount, the overpayment isn’t refunded because it might be applied to another invoice. 1. Adjust the customer’s balance and subtract the overpayment credit. 1. Create a refund. ## Issue a credit note When you issue a credit note, Stripe attempts to reduce the invoice’s `amount_remaining` based on the credit note’s `amount`. If the credit note amount is greater than the invoice’s remaining amount, you must refund the excess to your customer. You can [preview](https://docs.stripe.com/api/credit_notes/preview.md) a credit note to determine how much to refund to your customer. The `pre_payment_amount` tells you how much you’ll use to reduce the invoice’s `amount_remaining`, and the `post_payment_amount` tells you how much to refund to your customer. Learn more about [how credit notes work](https://docs.stripe.com/invoicing/dashboard/credit-notes.md). ## Refunds When you create a credit note with a `refund_amount`, Stripe attempts to refund the invoice’s most recent payment. If you already issued a refund for that payment, or the refund amount exceeds the payment amount, the refund fails. To create a credit note in this situation, create the refunds separately and link them to the credit note using the [refunds](https://docs.stripe.com/api/credit_notes/create.md#create_credit_note-refunds) parameter. Invoices with a `refunded` status require no action on your part. ## Limitations Be aware of the following limitations when using partial payments: - The [Stripe Connector for NetSuite](https://docs.stripe.com/use-stripe-apps/netsuite/overview.md) doesn’t support partial payments. - Your customers can’t pay a partial amount on the [Hosted Invoice Page](https://docs.stripe.com/invoicing/hosted-invoice-page.md).