43 events · 13 tied to payment recovery

Stripe webhook events

Every Stripe webhook event that matters for billing and subscriptions, what it means, when it fires, and what to do with it, with the failed-payment recovery events called out.

43 events

invoice.payment_failedRecovery

An invoice payment attempt failed, usually a declined card on a subscription renewal.

invoice.payment_succeededRecovery

An invoice was paid successfully.

invoice.paid

An invoice was paid, by charge, credit, or manual payment.

invoice.payment_action_requiredRecovery

The payment needs customer authentication (3D Secure / SCA) before it can complete.

invoice.created

A draft invoice was created for a subscription or one-off billing.

invoice.finalized

An invoice was finalized and is ready to be paid.

invoice.upcoming

A preview of an invoice that will be created soon. This event has no invoice ID.

invoice.marked_uncollectible

An invoice was marked uncollectible after recovery attempts were exhausted.

invoice.voided

An invoice was voided and will no longer be paid.

invoice.updated

An invoice changed (amount, status, metadata, or payment details).

customer.subscription.created

A new subscription was created for a customer.

customer.subscription.updated

A subscription changed: plan, quantity, status, or billing details.

customer.subscription.deletedRecovery

A subscription was canceled, voluntarily or after failed payments.

customer.subscription.trial_will_endRecovery

A free trial is about to end and convert to a paid subscription.

customer.subscription.paused

A subscription was paused and is not currently billing.

customer.subscription.resumed

A paused subscription resumed billing.

customer.subscription.pending_update_applied

A pending change to a subscription was applied after a successful payment.

customer.subscription.pending_update_expired

A pending subscription change expired because payment was not completed.

customer.created

A new customer object was created.

customer.updated

A customer object changed.

customer.deleted

A customer was deleted in Stripe.

customer.source.expiringRecovery

A card on file is expiring at the end of the month.

payment_method.attachedRecovery

A payment method was attached to a customer.

payment_method.detached

A payment method was removed from a customer.

payment_method.updated

A saved payment method was updated.

payment_method.automatically_updatedRecovery

A card's details were automatically updated by the card networks (account updater).

charge.succeeded

A charge succeeded.

charge.failedRecovery

A charge attempt failed.

charge.refunded

A charge was fully or partially refunded.

charge.dispute.createdRecovery

A customer disputed a charge (a chargeback).

charge.dispute.closed

A dispute was resolved, won or lost.

charge.refund.updated

A refund's status changed.

payment_intent.succeeded

A PaymentIntent completed successfully.

payment_intent.payment_failedRecovery

A PaymentIntent failed to complete.

payment_intent.requires_actionRecovery

A PaymentIntent needs additional steps, usually 3D Secure authentication.

payment_intent.created

A PaymentIntent was created.

payment_intent.canceled

A PaymentIntent was canceled.

checkout.session.completed

A Checkout session completed successfully.

checkout.session.expired

A Checkout session expired before completion.

checkout.session.async_payment_failedRecovery

A delayed payment method on a Checkout session failed.

payout.created

A payout to your bank account was created.

payout.paid

A payout was deposited to your bank account.

payout.failed

A payout to your bank account failed.

For recovery

The events that drive failed-payment recovery

If you are building dunning yourself, four events do most of the work: invoice.payment_failed (start the sequence), invoice.payment_succeeded (stop it), payment_method.attached (retry on card update), and customer.source.expiring (pre-dunning).

Wiring those up correctly, with retries, branded emails, a card update page, and stop-on-success, is exactly what SubRevival does in a 5-minute OAuth connection. See the recovery playbook.

Skip the webhook plumbing

SubRevival handles the failed-payment events for you, no webhook endpoint to build or maintain. Connect Stripe via OAuth and recovery runs automatically. $19/mo flat.