Stripe | Financial Infrastructure to Grow Your Revenue

Stripe | Financial Infrastructure to Grow Your Revenue

4466 articles

Adds support for multiple (partial) payments on invoices


Breaking changes

Adds support for multiple (partial) payments on invoices Breaking changes

What’s new

We’re introducing support for multiple (partial) payments on invoices and credit notes. Invoices also track over-payments and can track out of band payments now. In addition, we’re adding a confirmation_secret field on the Invoice object to enhance support for using the Payment Element.

Why is this a breaking change?

  • Removed the payment _ intent , charge , paid , and paid _ out _ of _ band fields from the Invoice object.
  • Removed the invoice field from the PaymentIntent and Charge objects.
  • Removed the application _ fee _ amount and transfer _ data fields from the Invoice object. For payments made on Stripe, these fields are now accessible through the underlying PaymentIntent by expanding payments. data. payment. payment _ intent on the Invoice object.
  • Deprecated the refund field on the Credit Note object and replaced it with a refunds array.
  • The amount _ paid field on the Invoice object now reflects out of band payments.

Impact

We introduced the Invoice Payment object to represent the connection between payments and invoices and removed previous invoice and payment pointers on relevant objects. Make sure that you update your integration to no longer assume that a single invoice must be paid by a single payment, and use the new Invoice Payment object to understand the connection between payments and invoices.

Inspect the invoice.payments array for payment information

You can inspect invoice.payments when interacting with the Invoice object by expanding the payments property:

Command Line

Select a language

cURL

Stripe CLI

Ruby

Python

PHP

Java

Node.js

Go

.NET

No results

The invoice.payments array provides a list of all the payments associated with the invoice and their respective allocation and payment status.

Use the new Invoice Payment endpoints for payments and invoice connection

To understand the connection between a Payment Intent and Invoice object, you can use the List Invoice Payment endpoint:

Command Line

Select a language

cURL

Stripe CLI

Ruby

Python

PHP

Java

Node.js

Go

.NET

No results

Use confirmation_secret for Payment Element integrations

For Payment Element integrations, especially Subscription integrations, that previously relied on expanding invoice.payment_intent.client_secret or latest_invoice.payments.data.payment.payment_intent.client_secret, you can now use the new invoice.confirmation_secret.client_secret field on the Invoice object by expanding confirmation_secret:

Command Line

Select a language

cURL

Stripe CLI

Ruby

Python

PHP

Java

Node.js

Go

.NET

No results

Access application_fee_amount and transfer_data through PaymentIntents

With the removal of the application_fee_amount and transfer_data fields from the Invoice object, you can now access these fields for payments made on Stripe through the underlying PaymentIntent. Expand payments.data.payment.payment_intent when retrieving the invoice:

Command Line

Select a language

cURL

Stripe CLI

Ruby

Python

PHP

Java

Node.js

Go

.NET

No results

You can then access invoice.payments.data[i].payment.payment_intent.application_fee_amount and invoice.payments.data[i].payment.payment_intent.transfer_data from the expanded PaymentIntent object. These fields are only available for payments made on Stripe when the payment type is payment_intent.

Identify invoices with out-of-band payments

With the removal of the paid_out_of_band field, you can now identify invoices with out-of-band payments using the invoice.payments property.

For API versions that include the amount_paid_off_stripe property, you can now retrieve the invoice with expand[]=amount_paid_off_stripe and check whether the value is greater than 0. This value is the total amount paid on the invoice outside of Stripe, so it can identify invoices with any out-of-band payment without summing payment records yourself:

Command Line

Select a language

cURL

Stripe CLI

Ruby

Python

PHP

Java

Node.js

Go

.NET

No results

If amount_paid_off_stripe is greater than 0, the invoice was at least partially paid out of band. If amount_paid_off_stripe equals amount_paid, the full paid amount was paid outside of Stripe.

If you’re using an API version that doesn’t include amount_paid_off_stripe, check whether an invoice is fully paid out of band by verifying the invoice status is paid, the amount_due is greater than 0, and the sum of payments of type PaymentIntent in the invoice.payments array equals 0.

To check if an invoice is partially paid out of band without amount_paid_off_stripe, verify the amount_due is greater than 0, and the sum of payments of type PaymentIntent in the invoice.payments array is less than amount_paid.

Changes

ChangeResource
AddedInvoicePayment
EndpointsChangeResource
retrieve listAddedInvoicePayment
ParametersChangeResources or endpoints
charge payment_intent transfer_data paid application_fee_amount paid_out_of_bandRemovedInvoice
refundsAddedCreditNote CreditNote#create CreditNote#preview_lines + 1 more CreditNote#preview
refundRemovedCreditNote CreditNote#create CreditNote#preview_lines + 1 more CreditNote#preview
amount_overpaid payments confirmation_secretAddedInvoice
invoiceRemovedPaymentIntent Charge
ValueChangeEnums
invoice. overpaidAddedWebhookEndpoint#create. enabled_events WebhookEndpoint#update. enabled_events Event. type

Upgrade

  1. View your current API version in Workbench.
  2. If you use an SDK, upgrade to the corresponding SDK version for this API version.
  • If you don’t use an SDK, update your API requests to include Stripe-Version: 2025-03-31. basil
  1. Upgrade the API version used for webhook endpoints .
  2. Test your integration against the new version.
  3. If you use Connect, test your Connect integration .
  4. In Workbench, perform the upgrade . You can roll back the version for 72 hours.

Learn more about Stripe API upgrades.

Last verified 2026-09-24

Is this helpful?