1. Identify which transition has not happened
A draft invoice is not an open invoice with a failed card payment. Stripe documents draft-to-open as finalization, and open-to-paid as payment; a failed payment attempt leaves an open invoice open. An invoice that has not been finalized cannot collect payment.[3] Start the investigation with the invoice’s current status rather than a customer’s report that nothing was charged.
Recommended triage records are the invoice ID, current status, creation time, automatic-collection configuration and relevant event deliveries. If the invoice is already open, this article’s draft-delay branch is no longer the primary diagnosis. If it remains draft, asking the customer to replace their card may address the wrong stage of the workflow.
2. Read the webhook timing rule accurately
With automatic collection enabled, Stripe says it waits one hour after a successful response to invoice.created from all listening webhooks before attempting payment. If it does not receive a successful response within 72 hours, it attempts to finalize and send the invoice. The documentation also points to configurable longer grace periods.[3] These are documented workflow conditions, not a promise that every invoice will be charged one hour after creation.
The same page says the behavior applies to all endpoints defined on the account, including a Connect application or another third-party service struggling to handle incoming webhooks.[3] Inspect every relevant delivery, not just the endpoint your team most recently deployed. A successful response from your own service does not establish that all listening endpoints have acknowledged the event.
3. Separate a delivery problem from an intentional hold
Before changing anything, establish whether automatic collection is enabled and whether the invoice is intentionally being held for review. Stripe describes manual finalization through the Dashboard or the finalize endpoint, and invoice.finalized as the event emitted when finalization occurs.[3] The presence of a manual action does not mean the operator should use it before checking the reason for the draft state.
As a recommended operational split, send failing event deliveries to the integration owner, deliberate invoice holds to the billing owner and unexplained state mismatches to a joint investigation. Preserve delivery timestamps and response details. Avoid claiming a card decline unless there is evidence of a payment attempt; draft status alone does not provide that evidence.
4. Repair delivery without assuming immediate collection
In live mode, Stripe retries an improperly handled webhook notification for up to three days with exponential backoff; in a sandbox, the page describes three retries over a few hours. During that time it does not attempt to charge unless it receives a successful response, and it sends an email about the failing webhook.[3] Testing in a sandbox is therefore not a faithful stopwatch for the live retry schedule.
Recommended recovery is to inspect the failed delivery, correct the endpoint problem, verify successful acknowledgement and then re-read the invoice state. Keep a customer-facing message factual: the invoice is awaiting billing processing, rather than a guaranteed charge time. The cited document does not supply a universal recovery SLA for every combination of grace period, endpoint and account configuration.
5. Check the consequences before manual finalization
Finalization makes the invoice payable, assigns an invoice number, creates payment-related objects and makes certain properties immutable. Stripe specifically warns that most amount- and customer-related details cannot be changed afterward.[3] Before a manual intervention, have the billing owner review customer details, line items and the intended amount rather than using finalize as a harmless refresh button.
For automatic tax, Stripe states that the tax rate is determined at invoice finalization, not when the draft was first created.[4] A delay that crosses a rate-change date can therefore matter to the amount. This article does not determine the correct tax treatment for any jurisdiction; consult your tax owner where required. Do not promise that a draft preview is the legally final tax outcome.
6. Confirm billing state and communication separately
The workflow documentation distinguishes finalization from email delivery. It describes default sending for collection_method=send_invoice, but lists exceptions such as automatic charging, disabled automatic collection or disabled Email finalized invoices to customers.[3] A finalized invoice does not by itself prove the customer was emailed, and an email is not proof of payment.
Recommended closeout requires a current invoice status, evidence that the blocked delivery was repaired, the chosen billing action and a separate check of customer communication. Test a failing invoice.created endpoint, a successful acknowledgement, an intentional hold and a manual finalization on safe test data. No live Stripe account was tested here; this guide provides a source-based diagnostic path, not measured incident recovery times.
Sources and dates
Official Stripe documentation in English. No publication or update date is stated; retrieved and checked on 2026-09-21. The retrieval date is not a source publication date. This is editorial research, not a PayIn feature claim, account eligibility check, or legal advice.
- [3] Status transitions and finalization · Checked 2026-09-21; source date not stated.
- [4] Automatically collect tax on invoices · Checked 2026-09-21; source date not stated.