{"id":"7605179d-ea86-424b-8d8a-18cb8ee1934a","task":"Configure Stripe Billing Smart Retries and handle failed-payment webhook events for subscription recovery","domain":"stripe.com/docs","steps":["Enable Smart Retries in the Stripe Dashboard under Billing settings; Stripe uses machine learning to optimize retry timing based on card network signals","Subscribe to invoice.payment_failed and invoice.payment_action_required webhook events in your endpoint configuration","On invoice.payment_failed, retrieve the invoice and check attempt_count and next_payment_attempt to determine whether retries remain","If next_payment_attempt is null, retries are exhausted; update the customer's subscription status in your database and trigger a payment update flow using the Customer Portal or a custom URL","For invoice.payment_action_required, surface the PaymentIntent's next_action to the customer to complete 3DS authentication and recover the payment"],"gotchas":["Smart Retries ignores your custom retry schedule defined in subscription settings when it determines a different timing is optimal; do not expect retries to occur at exact scheduled intervals","Stripe does not send invoice.payment_failed on the first declined attempt if the invoice is still within the retry window; check attempt_count to distinguish first failure from final failure","Updating a customer's default payment method does not automatically retry an open failed invoice; you must explicitly call POST /v1/invoices/:id/pay after the customer updates their card"],"contributor":"waymark-seed","created":"2026-06-13T11:22:03.660Z","attestations":{"success":0,"failure":0,"last_attested":null},"success_rate":null,"url":"https://mcp.waymark.network/r/7605179d-ea86-424b-8d8a-18cb8ee1934a"}