TL;DR: A gateway outage never charges anything. Retry the create call if no session exists yet, or retry on the same session if the shopper was already paying — either way, nothing was charged.
When this happens
- At session create: a protective breaker is open for gateway reads, or the gateway itself returns a server error while creating the session.
- At the hosted page, while the shopper is paying: the gateway is unreachable partway through the charge attempt.
What you see
These are deliberately different outcomes. Charge attempts are never gated behind the availability breaker — refusing a charge because of an unrelated read-path hiccup would cost you a sale for negligible protection, since the gateway itself already dedupes by
request_id. A charge-time outage instead comes from the gateway call genuinely failing to connect, and the session is released, not failed, so the shopper doesn’t lose their place.What to do
1
Branch on where the failure happened
If your create call returned an error, no session exists — see the next step. If the shopper is on the hosted page and sees a retry message (or you receive
CHECKOUT_ERROR), skip to the step after.2
Retry the create call
Nothing was created, so it’s safe to call create again with the same body (API reference). If the error included
retry_after_ms, wait at least that long first:3
Confirm the session is back to pending, then let the shopper retry
For a charge-time outage, confirm the session’s state before assuming it’s safe to retry (API reference):A
status of pending confirms no charge happened and the shopper can try paying again on the same session. Retrying on the same session reuses that session’s payment key, so even an accidental double-retry can’t create two charges.4
Never fulfil on the outage signal itself
Neither the retry message nor
CHECKOUT_ERROR is proof of anything beyond “the attempt didn’t go through” — they’re not decline or success signals. Confirm the eventual outcome the same way as any other attempt: webhook or authenticated GET.Related
API errors
gateway:unavailable and gateway:request_failed, with retry rules.Embedded checkout events
The full
CHECKOUT_ERROR payload shape.Confirm payment when the redirect never arrives
A shopper-side connectivity gap, not a gateway outage.
Handle failures
All ten failure scenarios, symptom → page.