Skip to main content
Ten scenarios cover everything that can go wrong in a hosted-checkout integration, from creating the session through to confirming the result. Find what you’re seeing below, or browse by when it happened.

Creating the session

While the shopper pays

After checkout

Every scenario above resolves the same way: confirm the outcome with a webhook or an authenticated GET, never from a redirect or postMessage event alone. See Verify the payment result for the full decision table.

Preventing duplicate charges

Several of the scenarios above — session retries, races, and reused order_reference values — are really the same underlying risk: a shopper (or your own retry logic) ends up paying twice for one order.

Prevent duplicate payments

How order_reference deduplication works, its time limit, and how to guard your own order state against a double charge.

Next steps

API errors

The full Checkout API error reference and retry rules.

Payment outcomes

Declined, failed, expired, and cancelled — not errors.

Verify the payment result

Confirm the outcome server-side before fulfilling.
Last modified on September 15, 2026