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

Partially capturing or canceling payments no longer creates a RefundBreaking changes

What’s new

The following flows no longer result in a Refund object created and linked to the payment:

  • Partial capture
  • Payment cancellation (both manual and automated)

Why is this a breaking change?

This change might break your integration in the following scenarios:

  • If your integration expects a partial capture or payment cancellation to create a refund object.
  • If your integration expects a partial capture to create two balance transactions.

For more details about possible effects on your integration, see the following breakdown.

Impact

This change affects your integration if you depend on the Refund object or any related fields for capture reversals or for payment cancellation. Removal of the Refund object affects the following fields or objects.

Refund object

  • A Refund object representing the cancellation or capture reversal will no longer be created.
  • It won’t be returned when calling to get all refunds associated with the payment intent or charge.
  • It won’t be present in any webhook events.
  • It won’t be present on the Charge object in any API response.
  • It won’t be visible on the Dashboard.

PaymentIntent Object

  • A new cancellation_reason value called expired will be introduced. This new value represents payments canceled because of authorization expiration. It replaces the formerly used value of automatic.

Charge object

  • amount_captured will be 0 instead of nil in payment cancellation flows.
  • amount_refunded will no longer be updated by these actions.
  • refunded will no longer be true for payment cancellation flows.

Balance transactions

  • There will only be a single balance transaction for partial captures. There will no longer be a balance transaction representing the amount and fees reversed.
  • The balance transaction representing the capture will show the amount captured instead of the amount authorized for the related payment.

Webhooks

  • We’ll no longer send charge.refunded and charge.refund.updated events.
  • We’ll still send charge.expired, charge.captured, and payment_intent.canceled events for their respective flows.

Radar payment review

  • If applicable, a Radar payment review will be closed upon payment cancellation with the reason canceled instead of refunded.

Changes

ValuesChangeEnums
canceledAdded
Review.closed_reason
expiredAdded
PaymentIntent.cancellation_reason

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

  • Updates the Vault and Forward API to return a 402 status code for upstream request timeouts
  • Removes manual capture method for Interac cards
  • Payment Methods won’t allow modifying fields for Naver Pay after the object is first created
  • Adds support for Klarna in the Hosted Invoice Page
  • Adds ability to configure saved payment methods for one-time payments on the Hosted Invoice Page
  • Adds support for saving and reusing Naver Pay payment methods
  • Adds support for the Billie local payment method
  • Adds support for the Satispay local payment method
  • Makes the client parameter optional for WeChat Pay until confirmation
  • Adds support for the New Zealand BECS Direct Debit local payment method
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