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
Versioning
Changelog
    Overview
    Basil
    Acacia
    Previous versions
Upgrade your API version
Upgrade your SDK version
Developer tools
SDKs
API
Testing
Workbench
Event Destinations
Workflows
Stripe CLI
Stripe Shell
Developers Dashboard
Agent toolkit
Stripe health alertsBuilding with LLMsStripe for Visual Studio CodeFile uploads
Security
Security
Extend Stripe
Stripe Apps
Stripe Connectors
Partners
Partner ecosystem
Partner certification
HomeDeveloper toolsChangelogBasil2025-03-31.basil

Adds support for multiple (partial) payments on invoicesBreaking 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 Payment Intent and Charge objects.
  • 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
cURL
curl -G https://api.stripe.com/v1/invoices/{INVOICE_ID} \ -u "
sk_test_BQokikJOvBiI2HlWgH4olfQ2
:"
\ -d "expand[]"=payments

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
cURL
curl -G https://api.stripe.com/v1/invoice_payments \ -u "
sk_test_BQokikJOvBiI2HlWgH4olfQ2
:"
\ -d "payment[type]"=payment_intent \ -d "payment[payment_intent]"={PAYMENT_INTENT_ID}

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.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
cURL
curl -G https://api.stripe.com/v1/invoices/{INVOICE_ID} \ -u "
sk_test_BQokikJOvBiI2HlWgH4olfQ2
:"
\ -d "expand[]"=confirmation_secret

Changes

ChangeResource
Added
InvoicePayment
Endpoints ChangeResource
retrievelistAdded
InvoicePayment
ParametersChangeResources or endpoints
chargepayment_intenttransfer_datapaidapplication_fee_amountpaid_out_of_bandRemoved
Invoice
refundsAdded
CreditNoteCreditNote#createCreditNote#preview_lines
 + 1 more
CreditNote#preview
refundRemoved
CreditNoteCreditNote#createCreditNote#preview_lines
 + 1 more
CreditNote#preview
amount_overpaidpaymentsconfirmation_secretAdded
Invoice
invoiceRemoved
PaymentIntentCharge
ValueChangeEnums
invoice.overpaidAdded
WebhookEndpoint#create.enabled_eventsWebhookEndpoint#update.enabled_eventsEvent.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
  3. Upgrade the API version used for webhook endpoints.
  4. Test your integration against the new version.
  5. If you use Connect, test your Connect integration.
  6. In Workbench, perform the upgrade. You can roll back the version for 72 hours.

Learn more about Stripe API upgrades.

Related changes

  • Replaces top-level price fields with improved price modeling on Invoice Items and Invoice Line Items
  • Replaces top-level tax-related properties with improved tax modeling on Invoices, Invoice Line Items, and Credit Note Line Items
  • Adds jurisdiction level and taxability reason to manual tax amounts on invoices
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