Refund

A Stripe refund sends money from a successful payment back to the customer's original payment method. Learn refund events, timing, and what a refund costs you.

Updated October 1, 2026

A refund is money you choose to send back to a customer after a payment succeeded. In Stripe it always goes to the payment method the customer used. You can't send it to a different card or bank account. A refund can cover the whole payment or part of it, which is a partial refund. You can issue several refunds against one charge as long as the total never exceeds the original amount.

How Stripe refunds work

You create a refund in the Dashboard from the payment's overflow menu, or with the Refunds API by passing the charge ID or the PaymentIntent ID. Refunding a PaymentIntent refunds its underlying charge. Each refund is its own Refund object.

  • status is pending, requires_action, succeeded, failed, or canceled.
  • reason is optional and can be duplicate, fraudulent, or requested_by_customer. Stripe sets a fourth reason, expired_uncaptured_charge, on its own.

Several events describe the same refund:

  • charge.refunded fires when a charge is refunded, including partial refunds, so one charge can trigger it more than once.
  • refund.created fires when the refund object is created. Stripe recommends listening for it at a minimum.
  • refund.updated fires on later changes, such as a trace reference number becoming available.
  • refund.failed fires in the rare case the customer's bank or card issuer can't accept the money.

On the charge, amount_refunded holds the total refunded so far. refunded only turns true once the charge is fully refunded.

What a Stripe refund costs you

Stripe doesn't return the processing fee from the original payment. Refunding a $100 payment costs you the $100 plus the fee you already paid. Refunds come out of your available Stripe balance, not pending funds. If the available balance can't cover a card refund, Stripe holds the refund as pending until it can. Refunds on other payment methods fail instead. A heavy refund day shrinks your next payout, and in some regions Stripe may debit your bank account to cover a negative balance.

How long a Stripe refund takes

A refund usually shows up on the customer's statement as a credit 5 to 10 business days later, depending on their bank. A refund issued soon after the original charge may appear as a reversal instead. The original charge drops off the statement and no separate credit appears. Those two cases explain most "I never got my refund" emails.

If the customer still can't find it, give them the refund's reference number. For most card refunds that's an ARN, shown in the Dashboard. It can take up to 7 business days to become available, and the customer's bank can use it to trace the money.

Refunds and disputes

A refund is voluntary and a chargeback is not. Card networks count the disputes you receive, not the ones you win, so refunding an unhappy customer before they call their bank protects your dispute rate and avoids the dispute fee. The timing also works the other way. Once a customer has opened a dispute, don't refund as well. Stripe can fail a pending refund on a disputed charge with charge_for_pending_refund_disputed and recommends accepting or challenging the dispute instead, so the customer isn't paid twice.

What to do when a refund goes out

  1. Support confirms the refund matches a ticket and tells the customer when to expect it.
  2. Finance records it in the right period and expects a smaller next payout.
  3. Founders or operations look at the reason. Several requested_by_customer refunds on one product often point to a bug, a confusing checkout, or a pricing mistake. A fraudulent or duplicate refund deserves a look at how that payment got through.
  4. Engineering handles refund.failed. When a refund fails, the money returns to your Stripe balance and you need another way to repay the customer.

Refund alerts in ChargeBell

ChargeBell listens for charge.refunded and posts a plain-English refund alert to Slack with the amount of that refund, the reason, the customer's name or email when Stripe provides it, and a button to open the charge in Stripe. A $120 partial refund of a $300 charge reads as $120, not $300. Route it to #finance, #support, or both. The refund alert page shows example messages, and how to send Stripe refund alerts to Slack covers setup. ChargeBell's Stripe connection is read-only, so it reports refunds but can never issue one.

Get alerted in Slack

Stripe events: charge.refunded, refund.created, refund.updated, refund.failed

# finance

ChargeBellAPP

↩️ Refund sent: $49.00

to Lena at Fernworks

Reason: requested by customer

Related terms