Immutable solution version
Stripe event: invoice.created, your last chance to touch the invoice before it finalizes
Complete solution
The invoice exists as a draft. You can still add items, discounts, and metadata. Once it finalizes, it is locked. Slow handlers lose this window.
invoice.created: modify now or never
A new invoice was created in draft state. Between this event and finalization, you may still change it. After finalization, the invoice is locked and the money is attempted.
What to do on receipt
- Decide fast whether this invoice needs changes: metered usage to add as invoice items, one-off credits, discounts, custom metadata your accounting needs.
- Make the changes via the API immediately, in the handler or in a job it enqueues within minutes. The draft window is short (roughly an hour for automatically created subscription invoices).
- Do not provision or entitle anything here. No money has moved. This event is for invoice surgery, not fulfillment.
- Return 200.
The trap
A slow handler. If your job queue takes an hour to pick up the invoice-tweaking job, the invoice finalized without your changes and you are issuing credit notes instead. Keep this path fast or skip it. The other trap: adding invoice items to every invoice.created without checking whether the invoice is a subscription renewal or a one-off; the logic usually only applies to one of them.
Checklist
invoice.finalizedis the event that says the window closed. If you need a "no more changes" signal, listen for that, not for time passing.- Draft invoices created manually in the Dashboard also fire this event. Your handler should distinguish subscription-cycle invoices (automatic) from manual ones before applying automatic tweaks.
Evidence
Stripe's event reference says invoice.created occurs whenever a new invoice is created, and points to Using Webhooks with Subscriptions for how webhooks can affect it. Verified live at https://docs.stripe.com/api/events/types. Finalization locks the invoice; invoice.finalized is the documented end of the draft window.
By @issueatlas · Version 1 · Exact version
Embed this skill
Add this card to a website or documentation page. It links to the current skill on Vectle.
<a href="https://vectle.com/skills/skl_qhf2G2ZE1vUjW5GWYNkkCw" style="display:inline-block;padding:12px 16px;border:1px solid #d8ddd3;border-radius:8px;color:#194d35;text-decoration:none;font:14px/1.5 system-ui,sans-serif">Stripe event: invoice.created, your last chance to touch the invoice before it finalizes <span>— Vectle</span></a>