Stripe invoice payment failed alert in Slack
When a subscription charge fails, Stripe fires invoice.payment_failed. ChargeBell surfaces that declined charge in Slack — marked CRITICAL — so you can act before the customer silently churns.
When a subscription charge fails, Stripe fires invoice.payment_failed. ChargeBell surfaces that declined charge in Slack — marked CRITICAL — so you can act before the customer silently churns.
A Stripe invoice payment failed alert in Slack tells your team the moment a subscription or invoice charge is declined. Stripe fires invoice.payment_failed when it can't collect on an invoice, and the underlying charge attempt also raises payment_intent.payment_failed. ChargeBell's Payment Failed alert keys off payment_intent.payment_failed — so when Stripe raises that charge-level event for an invoice or subscription attempt, the decline lands in Slack in plain English, marked CRITICAL.
invoice.payment_failed fires when Stripe attempts a payment on an invoice and it doesn't go through — the customer's default payment method was declined. It applies to recurring subscription renewals, the first invoice on a new subscription, and any auto-collected invoice. On the first failure a subscription becomes incomplete (by default the customer has about 23 hours to fix the payment method before it becomes incomplete_expired). On a renewal failure the subscription moves to past_due while Stripe keeps retrying.
How ChargeBell surfaces it (the honest version)
ChargeBell does not subscribe to invoice.payment_failed directly. It listens for payment_intent.payment_failed — the charge-level event that carries the decline code and message — which Stripe raises for the underlying charge attempt on an invoice or subscription. So when a renewal is declined and Stripe emits that charge-level event, the failure lands in Slack with the reason attached, marked CRITICAL.
Stripe already retries the charge — but nobody on your team knows it failed. Failed charges are revenue actively leaking, which is why ChargeBell marks this alert CRITICAL: it bypasses quiet hours and can add an @channel prefix. The window to act is finite. Industry estimates put involuntary (failed-payment) churn at roughly 20–40% of total SaaS churn, with a good dunning sequence recovering 30–70% of failed charges — but only if someone sees the failure in time to reach out.
past_due is worth a same-day human response.insufficient_funds and card_declined call for very different follow-ups.invoice.payment_failed fires on each retry attempt during dunning, not just once. Stripe's Smart Retries pick the retry times for failed charges, and you configure how many attempts run over what window in your Dashboard settings. Once retries are exhausted, the subscription's terminal state follows those settings: canceled, unpaid, or left past_due. In other words, there's a countdown from the first decline, and the alert is what starts your clock.
Raw webhook JSON isn't useful in Slack. A good failed-payment alert answers "who, how much, and why?" at a glance. Because ChargeBell reads the charge-level event, it can show the decline reason — the human message like "Your card has insufficient funds" — alongside the customer, so the team knows exactly how to respond.
⚠️ CRITICAL — Payment failed — $499.00 from Acme Corp
Reason: insufficient_funds · subscription renewal declined
billing@acmecorp.com · Stripe will retry automatically
Route failed payments to a channel where someone will act — like #billing or #founders. Because this alert is critical, it comes through even during quiet hours, and you can turn on the @channel prefix so it's impossible to miss. See how to monitor Stripe subscriptions in Slack for pairing this with the rest of your subscription alerts.
See the CRITICAL alert in Slack
ChargeBell posts the declined charge — amount, customer, and reason — the moment it happens, bypassing quiet hours.
Open the customer or invoice in Stripe
Click through to the customer in your Stripe Dashboard to check the subscription status and payment method.
Reach out or update the payment method
Send a dunning email or ask the customer to update their card. ChargeBell is read-only, so the fix happens in Stripe.
Let Smart Retries or a manual retry confirm the charge
When the charge finally goes through, ChargeBell can send a payment recovered alert so you know it's resolved.
New to failed-payment alerts? Start with how to send failed payment alerts to Slack for the full setup and the options beyond a single alert.
| Criterion | ChargeBell | Raw Stripe webhook |
|---|---|---|
| Catches failed subscription charges | ||
| Plain-English Slack message | ||
| Shows the decline reason | You parse it yourself | |
| Bypasses quiet hours as critical | ||
| Code required | None | Build and host a handler |
Key takeaways
invoice.payment_failed means a subscription or invoice charge was declined — and it fires on every dunning retry.payment_intent.payment_failed (not invoice.payment_failed directly), marked CRITICAL, with the decline reason attached.Connect Stripe and Slack, pick a channel, and send a test alert. Free plan, no card needed.
invoice.payment_failed. Stripe fires it when it can't collect on an invoice — a renewal, a first subscription invoice, or any auto-collected invoice. The underlying charge attempt also raises payment_intent.payment_failed, which carries the decline reason — and that's the event ChargeBell listens for.
Not directly. ChargeBell's Payment Failed alert fires on payment_intent.payment_failed — the charge-level event Stripe raises for the underlying charge attempt on an invoice or subscription. When Stripe emits that event for a declined renewal, it reaches Slack with the decline reason attached, marked CRITICAL.
Yes, when Stripe provides it. Because ChargeBell reads the charge-level event, it can show the decline reason — like insufficient_funds or card_declined — so your team knows how to follow up instead of guessing.
Yes. Failed payments are marked CRITICAL, so the alert comes through even during quiet hours, and you can turn on an @channel prefix so nobody misses it.
No. ChargeBell connects with official read-only OAuth. It can see payment events to build alerts, but it can never move money, retry a charge, or change anything in your Stripe account — that stays with you in Stripe.