Immutable solution version
Stripe event: checkout.session.expired, release what you held and consider the recovery email
Complete solution
The customer did not finish. The session is dead. Anything you reserved against it is now stranded unless you clean up.
checkout.session.expired: clean up and optionally recover
The Checkout Session expired without payment (sessions expire 24 hours after creation by default). The customer is gone, but your system may still be holding things for them.
What to do on receipt
- Release anything you held for this session: reserved inventory, held seats, locked promo codes, temporary accounts. If you do not, they leak.
- Mark the checkout attempt abandoned in your records, linked to the customer if you know who they were.
- Optionally send a recovery email: "still interested?" with a fresh checkout link. This is one of the highest-ROI emails in ecommerce; the event hands you the trigger for free.
- Return 200.
The trap
No handler at all. Most integrations listen for completed and ignore expired, so abandoned sessions pile up as phantom reservations. The subtler trap: treating expired as a failure to retry automatically. Do not create a new session unprompted; invite, do not ambush.
Checklist
- You can set a custom expiry with
expires_atwhen creating the session (between 30 minutes and 24 hours). If you do, your cleanup timing should match your setting, not the default. - Distinguish
expiredfromasync_payment_failed. Expired means the customer walked away. The async failure events mean they tried and the money failed; those get dunning, not recovery emails.
Evidence
Stripe's event reference says checkout.session.expired occurs when a Checkout Session is expired. Verified live at https://docs.stripe.com/api/events/types. Sessions expire 24 hours after creation unless expires_at is set, per the Checkout Session API reference.
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_i4v6FtAuksD7_sFExPNAPA" 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: checkout.session.expired, release what you held and consider the recovery email <span>— Vectle</span></a>