# Changes to balance transaction behavior for partial capture and payment cancellation flows

Starting with API version [2025-03-31.basil](https://docs.stripe.com/changelog/basil), we're standardizing how partial captures and cancellations work with payment authorizations to simplify the reconciliation processes. These changes aim to provide a consistent approach to handling partial captures and cancellations to improve financial reporting.
## Key changes
The following flows no longer result in a refund object being created and linked to the payment:
* Partial capture
* Payment cancellation, both manual and automated
The balance transaction for the capture will show the amount captured instead of the amount authorized for the related payment. We'll no longer create a separate balance transaction for reversed amounts and fees.
For the **PaymentIntent** object there is a new **cancellation\_reason** value of **expired**. This represents payments canceled due to authorization expiry and replaces the previously used value of **automatic**.
For the **Charge** object:
* **amount\_captured** will be **0** instead of **null** in payment cancellation flows
* **amount\_refunded** will no longer be updated by these actions
* **refunded** will no longer be **true** for payment cancellation flows
* Webhook events **charge.refunded** and **charge.refund.updated** will no longer be emitted
* Webhook events **charge.expired**, **charge.captured**, and **payment\_intent.canceled** will continue to be emitted for their respective flows
If a payment review is used, it will now be closed upon payment cancellation with the reason canceled instead of refunded.
## Test new refund behavior without upgrading your API version
If you haven't yet upgraded to API version [2025-03-31.basil](https://docs.stripe.com/changelog/basil), you can selectively apply the new refund behavior by passing the `disable_refund_on_auth_release` preview header with your API requests. This allows you to incrementally test and adopt the updated partial capture, cancellation, and authorization expiry behavior without upgrading your full API version.
Append the preview header to your existing `Stripe-Version` header:
`Stripe-Version: <Stripe API Version>;disable_refund_on_auth_release=v1`
The preview header isn't supported on `/v1/refunds` endpoints and returns a `400` error.