Partially capturing or canceling payments no longer creates a Refund
The following flows no longer result in a Refund object created and linked to the payment: This change might break your integration in the following scenarios:
Partially capturing or canceling payments no longer creates a Refund: from its source to your code
docs.stripe.comquote checked
behaviour change
Your codeby hand
Nemotron fixes
In its own wordsmatches the page ✓
| [Partially capturing or canceling payments no longer creates a Refund](https://docs.stripe.com/changelog/basil/2025-03-31/remove-refund-from-partial-capture-and-payment-cancellation-flow.md) | Payments | Breaking | api |
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.
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.