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 reusedorder_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.