Stripe checkout sessions expire after 24 hours—here’s why

Self Checkout at Costco.jpg

The newsletter for newsletter operators

Daily field notes on deliverability, AI tools, hosting, and monetisation. No "top 10 plugins" filler — real tools, real numbers, real failures.

If you’ve ever sent someone a Stripe checkout link and had them come back a day later saying it doesn’t work, you’ve run into session expiration. Stripe Checkout sessions expire exactly 24 hours after creation, and there’s no setting to extend that window.

This isn’t a bug. It’s a deliberate design choice that affects how you structure payment flows, follow-up sequences, and cart abandonment recovery. Here’s what the 24-hour limit actually does, when it becomes a problem, and how to work around it.

What happens when a checkout session expires

When you create a Stripe Checkout session via API or no-code tool, Stripe generates a unique URL. That URL is valid for 24 hours from the moment of creation—not from the moment someone opens it.

After 24 hours, the link returns a “This Checkout Session has expired” error. The customer can’t complete payment. You don’t get notified. The session just stops working.

This matters most when you’re pre-generating checkout links in automated emails, Slack messages, or scheduled posts. If someone receives your email at 9 a.m. Monday and clicks at 10 a.m. Tuesday, the link is dead.

Stripe’s expiration clock starts when the session is created, not when the email is opened or the link is clicked. That’s the key mistake: assuming the 24-hour window begins when the customer engages.

Why Stripe enforces the 24-hour limit

Stripe’s documentation doesn’t spell out the reasoning, but the expiration window serves two purposes: fraud mitigation and inventory accuracy.

Payment sessions that stay open indefinitely create opportunities for replay attacks and price manipulation. If a checkout session for a $49 product remains valid for weeks, someone could exploit outdated pricing or coupon codes long after you’ve changed them.

The 24-hour window also keeps your checkout flow aligned with real-time inventory, seat availability, or limited-time offers. If you’re selling a cohort-based course with 50 spots, a session created when 10 spots remain shouldn’t stay valid when the cohort fills two days later.

For subscription products and digital goods with no inventory constraints, the expiration feels arbitrary. But Stripe’s Checkout API handles everything from physical products to event tickets, so the 24-hour rule applies universally.

When expiration breaks your workflow

The 24-hour limit causes problems in three common scenarios.

Pre-scheduled email sequences. If you’re running a five-day email course that ends with a checkout link, and you generate all five sessions at once, the link in email five is already expired by the time it sends. You need to generate each session just before its corresponding email goes out.

Abandoned cart recovery. Standard cart abandonment flows wait 24–72 hours before sending a reminder. If you generate the checkout session when someone first adds a product to their cart, the recovery email will contain a dead link. You’ll need to regenerate the session when the reminder triggers.

Public checkout links in evergreen content. Embedding a Stripe Checkout URL in a blog post, help doc, or pinned social media post doesn’t work. The link dies within a day. You’ll need to use Stripe Payment Links (which don’t expire) or dynamically generate sessions when someone clicks.

How to work around session expiration

The cleanest solution is to generate checkout sessions on-demand, right when the customer needs them.

If you’re using Zapier, delay the “Create Checkout Session” action until immediately before the email sends. Don’t create all sessions upfront. In a drip sequence, each email should trigger its own session creation step.

For abandoned cart emails, store the product details (price ID, quantity, customer email) instead of the checkout URL. When the reminder triggers 48 hours later, generate a fresh session using those stored details.

If you need a persistent checkout link—something you can post publicly or reuse across emails—use Stripe Payment Links instead of Checkout sessions. Payment Links don’t expire and support the same features (custom fields, tax calculation, subscription billing). The trade-off: you lose some advanced customisation options available in the Checkout API, like dynamic pricing or complex line-item logic.

For high-touch sales where you’re sending invoices manually, Stripe Invoices are a better fit than Checkout. Invoices stay open until you close them or they’re 90 days past due, and customers can pay directly from the invoice page without a session.

One non-obvious detail: Stripe’s expires_at parameter lets you set a shorter expiration window (as brief as 30 minutes), but you can’t extend it past 24 hours. If you’re running flash sales or time-sensitive offers, setting expires_at to match your sale deadline keeps pricing consistent and adds urgency. Just make sure your customers know the link has a ticking clock.

If you’re building payment flows for courses, memberships, or digital products and need help choosing between Checkout sessions, Payment Links, and invoice-based billing, subscribe to One Two Three Send—we break down one tool decision like this every week.

The newsletter for newsletter operators

Daily field notes on deliverability, AI tools, hosting, and monetisation. No "top 10 plugins" filler — real tools, real numbers, real failures.

Other newsletters you might like

Love Castles

Apart from the fascinating and rich history of castles, people love to visit them for their majestic beauty. From the imposing stone walls to the beautiful architecture, there is something captivating about these grand structures.

Subscribe

Love London

A newsletter for Londoners who want to rediscover their own city. Travellers planning their first or fifth visit. Anglophiles who fell in love with London through literature, film, or a rainy afternoon on the South Bank.

Subscribe

Love South Africa

South Africa as a travel destination. The Rainbow nation full of wonderful gems to visit. Going on Safari in the Kruger National Park, visiting the beautiful beaches of Cape Town, indulge in the South African culture and heritage.

Subscribe

My Local Dublin

The Dublin you don't see from a tour bus — local stories, hidden gems, food, events and the best of the city, by locals for locals.

Subscribe

Newsletters via the One Two Three Send network.  ·  Want your newsletter featured here? Click here