Stripe | Financial Infrastructure to Grow Your Revenue

Stripe | Financial Infrastructure to Grow Your Revenue

4466 articles

Partially capturing or canceling payments no longer creates a Refund


Breaking changes

Partially capturing or canceling payments no longer creates a Refund Breaking 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
canceledAddedReview. closed_reason
expiredAddedPaymentIntent. 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
  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?