Stripe failed payment alert in Slack
The payment_intent.payment_failed event is involuntary churn in progress. Here's how to turn it into a real-time, CRITICAL Slack alert and what to do next.
The payment_intent.payment_failed event is involuntary churn in progress. Here's how to turn it into a real-time, CRITICAL Slack alert and what to do next.
A Stripe failed payment alert in Slack is a message posted the moment a customer's payment attempt is declined. ChargeBell listens for Stripe's payment_intent.payment_failed event and turns it into a plain-English alert — the amount, the customer, and the decline reason — in the channel your team already watches. Because a failed payment is money actively leaving, ChargeBell marks it CRITICAL: it bypasses quiet hours and can @channel.
Stripe describes payment_intent.payment_failed as firing when "a PaymentIntent has failed the attempt to create a payment method or a payment." The event's data.object is the PaymentIntent. Crucially, a failed attempt is not a dead charge: per Stripe's lifecycle docs, when an attempt fails (for example, a card decline) the PaymentIntent's status returns to requires_payment_method so the payment can be retried. Treat the alert as a recoverable failure that needs action, not a permanently lost sale.
For subscription and recurring billing, the parallel event is invoice.payment_failed, which Stripe fires "whenever an invoice payment attempt fails, due to either a declined payment, including soft decline, or to the lack of a stored payment method." Subscription businesses usually want both — see invoice.payment_failed alerts for the recurring-billing side.
A failed payment isn't a support ticket — it's revenue silently leaking. Involuntary churn (customers lost to failed or declined payments rather than an active decision to cancel) is estimated at 20–40% of all churn for subscription businesses. Much of it is recoverable, which is exactly why speed matters.
20–40%
of all subscription churn is involuntary (est.)
2–3%
of subscribers have a card expire each month (est.)
41% vs 27%
reminder open rate within 24h vs after 30 days
Speed of follow-up measurably improves recovery. Reminders sent within 24 hours see roughly a 41% open rate versus about 27% after 30 days, and front-loaded, multi-channel outreach in the first 72 hours can cut involuntary churn by up to 34% versus email alone. A daily report is too slow for that window — you need the signal in real time.
Most alerts should respect quiet hours — you don't need a 3 a.m. ping about a routine sale. A failed payment is different. ChargeBell classifies the payment failed alert as CRITICAL, which means it bypasses quiet hours and can add an @channel prefix so someone sees it. This is a ChargeBell design choice for money-leaving events, not a Stripe feature: the same treatment applies to disputes.
Not every failure is auto-recoverable
Stripe Smart Retries only auto-retries soft declines. Hard declines like expired_card, lost_card, or stolen_card can't be retried until the customer adds a new payment method — so a human needs to reach out. The alert is how they find out in time.
Raw webhook JSON is useless in Slack. A good alert answers "who failed, how much, why, and do I need to act?" at a glance. ChargeBell surfaces the decline reason and whether Smart Retries can handle it, so the channel knows whether to wait or reach out.
⚠️ Payment failed — $149.00 from acme@example.com
Reason: card_declined (insufficient_funds — soft decline)
Stripe Smart Retries will retry automatically · no action needed yet
⚠️ @channel Payment failed — action needed — $499.00/mo (Pro)
Reason: expired_card (hard decline — Smart Retries can't recover this)
Involuntary churn in progress · reach out to update the card
Connect Stripe
One-click, read-only OAuth. ChargeBell can see payment events and can never move money or change anything.
Connect Slack and pick a channel
Add the app and choose where failed payments should post — a channel like #billing or #founders works well.
Enable the payment failed alert
It's on by default and classified CRITICAL, so it bypasses quiet hours. Turn on the @channel prefix if you want it to page the room.
Send a test alert
Confirm the message looks right before your next real decline. You'll get your first alert before your coffee cools.
Stripe already does a lot of the recovery work for you — treat ChargeBell as the real-time signal layer on top of it, not a replacement.
insufficient_funds or generic decline, wait — the alert says "no action needed yet."expired_card, lost_card, stolen_card, and similar codes, retries can't succeed until a new card is added. Reach out fast — front-loaded, multi-channel follow-up in the first 72 hours is where recovery is won.Why the alert still matters
Stripe's built-in recovery (Smart Retries plus emails) recovers only an estimated 25–35% of involuntary failures automatically. The other two-thirds — especially hard declines — is exactly where a real-time Slack alert plus human follow-up wins.
Want the full playbook? See how to send failed payment alerts to Slack and how to build a payment incident workflow in Slack.
Key takeaways
payment_intent.payment_failed fires on a failed attempt; the PaymentIntent returns to requires_payment_method and can be retried.Connect Stripe and Slack, enable the CRITICAL payment failed alert, and send a test. Free plan, no card needed.
payment_intent.payment_failed. It fires when a PaymentIntent fails its attempt to create a payment method or process a payment — for example, a card decline. The PaymentIntent then returns to requires_payment_method so the payment can be retried. For subscriptions, the parallel event is invoice.payment_failed.
Yes. ChargeBell classifies the payment failed alert as CRITICAL, so it bypasses quiet hours and can add an @channel prefix. Unlike a routine sale, a failed payment is money actively leaving, and speed of response measurably improves recovery.
No. Stripe Smart Retries automatically retries soft declines (its default policy is up to 8 tries over 2 weeks), so you can wait on those. Hard declines like expired_card can't be recovered until the customer adds a new card, so those need a human to reach out.
Stripe's built-in Smart Retries and emails recover only an estimated 25–35% of involuntary failures automatically. A real-time Slack alert plus human follow-up captures the rest — especially hard declines. ChargeBell is the signal layer on top of Stripe's automation, not a replacement.
No. ChargeBell connects with official read-only OAuth. It can see payment events to build alerts, but it can never retry a payment, move money, or change anything in your Stripe account. Stripe stays the source of truth.