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_failedRecoveryAn invoice payment attempt failed, usually a declined card on a subscription renewal.
invoice.payment_succeededRecoveryAn invoice was paid successfully.
invoice.paidAn invoice was paid, by charge, credit, or manual payment.
invoice.payment_action_requiredRecoveryThe payment needs customer authentication (3D Secure / SCA) before it can complete.
invoice.createdA draft invoice was created for a subscription or one-off billing.
invoice.finalizedAn invoice was finalized and is ready to be paid.
invoice.upcomingA preview of an invoice that will be created soon. This event has no invoice ID.
invoice.marked_uncollectibleAn invoice was marked uncollectible after recovery attempts were exhausted.
invoice.voidedAn invoice was voided and will no longer be paid.
invoice.updatedAn invoice changed (amount, status, metadata, or payment details).
customer.subscription.createdA new subscription was created for a customer.
customer.subscription.updatedA subscription changed: plan, quantity, status, or billing details.
customer.subscription.deletedRecoveryA subscription was canceled, voluntarily or after failed payments.
customer.subscription.trial_will_endRecoveryA free trial is about to end and convert to a paid subscription.
customer.subscription.pausedA subscription was paused and is not currently billing.
customer.subscription.resumedA paused subscription resumed billing.
customer.subscription.pending_update_appliedA pending change to a subscription was applied after a successful payment.
customer.subscription.pending_update_expiredA pending subscription change expired because payment was not completed.
customer.createdA new customer object was created.
customer.updatedA customer object changed.
customer.deletedA customer was deleted in Stripe.
customer.source.expiringRecoveryA card on file is expiring at the end of the month.
payment_method.attachedRecoveryA payment method was attached to a customer.
payment_method.detachedA payment method was removed from a customer.
payment_method.updatedA saved payment method was updated.
payment_method.automatically_updatedRecoveryA card's details were automatically updated by the card networks (account updater).
charge.succeededA charge succeeded.
charge.failedRecoveryA charge attempt failed.
charge.refundedA charge was fully or partially refunded.
charge.dispute.createdRecoveryA customer disputed a charge (a chargeback).
charge.dispute.closedA dispute was resolved, won or lost.
charge.refund.updatedA refund's status changed.
payment_intent.succeededA PaymentIntent completed successfully.
payment_intent.payment_failedRecoveryA PaymentIntent failed to complete.
payment_intent.requires_actionRecoveryA PaymentIntent needs additional steps, usually 3D Secure authentication.
payment_intent.createdA PaymentIntent was created.
payment_intent.canceledA PaymentIntent was canceled.
checkout.session.completedA Checkout session completed successfully.
checkout.session.expiredA Checkout session expired before completion.
checkout.session.async_payment_failedRecoveryA delayed payment method on a Checkout session failed.
payout.createdA payout to your bank account was created.
payout.paidA payout was deposited to your bank account.
payout.failedA 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.