Skip to main content
TL;DR: No signal ever arrives when a shopper simply leaves — the session stays pending until it expires. Cancel it proactively, or reconcile by polling after the TTL.
A shopper closing the tab, navigating away, or clicking their browser’s back button doesn’t send any signal to your server — the session simply stays pending until it expires.

When this happens

  • The shopper closes the tab or browser before entering payment details.
  • The shopper clicks back or navigates to another site mid-checkout.
  • In embedded mode, the shopper navigates your own page away from the iframe.

What you see

What to do

1

Don't wait on a redirect or event that will never arrive

There’s no signal from the shopper’s browser for this case — build your own UX around a timeout on your side (for example, “we didn’t hear back — did you complete your purchase?”) rather than waiting indefinitely.
2

Optionally cancel the session proactively

If your own UI detects the shopper has left (for example, they started a new checkout for the same cart), cancel the still-pending session explicitly instead of waiting for it to expire (API reference):
3

Reconcile by polling after the TTL, if you don't cancel proactively

Otherwise, check the session’s status after its TTL has elapsed:
A status of expired confirms nothing was charged. If you need to prompt the shopper to try again, see Handle expired checkout sessions.

Redirect integration

The full redirect-mode flow.

Embed hosted checkout

The full embedded-mode flow.

Handle expired checkout sessions

What happens once the TTL elapses.

Handle failures

All ten failure scenarios, symptom → page.
Last modified on September 15, 2026