The charge.refunded event fires whenever a charge is refunded, including partial refunds. Here's how to turn it into a clean Slack alert with the amount, reason, and customer.
Updated July 6, 2026·6 min read
Written and reviewed by the ChargeBell product team
The team that builds and maintains ChargeBell's Stripe and Slack connections. Provider claims are checked against primary documentation. About our editorial process.
A Stripe refund alert in Slack is a message posted the moment you refund a customer. ChargeBell listens for Stripe's charge.refunded event and turns it into a plain-English refund_sent alert (↩️ with the amount, the reason, and who got refunded) in the channel your finance or support team already watches. No Dashboard checks, no email threads.
What charge.refunded means
charge.refunded is the Stripe event that fires whenever a charge is refunded. Stripe's docs are explicit: it fires including partial refunds. That's the nuance most notification setups get wrong: a single charge can trigger charge.refunded more than once, because you can issue several partial refunds against it as long as the total refunded never exceeds the original amount. That's why a good alert shows the amount of *this* refund, not the whole charge.
ChargeBell keys its refund alert off charge.refunded specifically and maps it to the refund_sent alert type. It's easy to confuse with related events, so here's the distinction: refund.created fires when a refund is created, refund.updated tracks status changes on a refund, and charge.refund.updated covers updates on selected payment methods. For the "a refund just went out" signal, charge.refunded is the one you want.
Partial refunds fire it too
Because charge.refunded fires on partial refunds, ChargeBell shows the amount of the individual refund (amount_refunded), not the full charge amount. A $300 charge refunded $120 shows $120.
Why a Stripe refund alert in Slack is worth it
A refund is money leaving the business, so more than one team usually cares. Finance needs visibility for reconciliation; support and ops often need to close the loop with the customer. A real-time Slack ping replaces manual Dashboard checks and "did we refund that?" email threads by surfacing the amount, reason, and customer to the right channel instantly.
Reconciliation: finance sees money out the moment it happens, not at month-end.
Customer follow-up: support knows a refund landed and can close the ticket.
Risk signal. A fraudulent or duplicate reason is a flag worth a second look.
Shared awareness: no one has to open Stripe to know a refund went through.
What a good refund alert includes
Raw webhook JSON isn't useful in Slack. A good refund alert answers "how much, to whom, and why?" at a glance. ChargeBell pulls the refund amount, the humanized reason, and the customer name or email straight from the payload, plus a button to open the charge in Stripe.
#finance
↩️
ChargeBellApp
↩️ Refund sent: $49.00
to Lena at Fernworks
Reason: requested by customer
#support
↩️
ChargeBellApp
↩️ Refund sent: $120.00
to marcus@acmecorp.io
Reason: duplicate · partial refund of a $300.00 charge
Fields ChargeBell can include
Refund amount (this refund, so partial refunds read correctly) and currency
The refund reason: requested by customer, duplicate, fraudulent, or expired uncaptured charge
Customer name or email, when Stripe provides it
A "View in Stripe" button to jump to the charge
Route refunds to finance or support
The refund reason is the hook for where the alert should go. A fraudulent or duplicate refund is a signal for finance or risk; a requested_by_customer refund is usually a support matter. With ChargeBell's per-alert channel routing, you can send refund_sent to #finance, #support, or both, instead of being stuck with a single-channel automation. Not sure where each alert belongs? See which Stripe alerts go to finance, support, and founders.
One detail worth knowing
A refund returns funds to the original payment method (you can't redirect it elsewhere), and Stripe's original processing fees aren't returned to you. The customer typically sees the credit in about 5–10 business days, depending on their bank.
How to set up a Stripe refund alert in Slack
1
Connect Stripe
One-click, read-only OAuth. ChargeBell can see the refund event but can never move money or issue refunds itself.
2
Enable the Refund sent alert
It's on by default. The ↩️ refund_sent alert maps directly to Stripe's charge.refunded event.
3
Route it to finance or support
Pick the Slack channel each refund should post to. Send fraud and duplicates to #finance, customer requests to #support.
4
Send a test alert
Confirm the amount, reason, and customer look right before the next real refund goes out.
charge.refunded. It fires whenever a charge is refunded, including partial refunds, so a single charge can trigger it more than once. ChargeBell listens for it and posts a plain-English refund alert to Slack.
Does the alert show partial refunds correctly?
Yes. ChargeBell shows the amount of the individual refund (Stripe's amount_refunded), not the whole charge, so a $120 partial refund of a $300 charge reads as $120, not $300.
Can I route refunds to finance and support separately?
Yes. With per-alert channel routing you can send the refund_sent alert to #finance, #support, or both. The refund reason (fraudulent, duplicate, requested by customer) helps you decide which channel each one belongs in.
What's the difference between charge.refunded and refund.updated?
charge.refunded fires when a charge is refunded. refund.updated tracks later status changes on the refund itself (for example, a failed refund). ChargeBell's refund_sent alert is keyed off charge.refunded: the "a refund just went out" signal.
Does ChargeBell need write access to Stripe?
No. ChargeBell connects with official read-only OAuth. It can see the refund event to build the alert, but it can never move money or issue, edit, or cancel refunds in your Stripe account.
Primary sources
Product behavior, event definitions, and comparison details were checked against provider documentation and official pricing pages.