Skip to main content
This page is the single source for every error the Checkout API — POST /api/v1/checkout/sessions, GET /api/v1/checkout/sessions/{id}, and the cancel endpoint — can return. A card decline is not an error on this API — it’s a normal 201/200 response with a failed session status. See Payment outcomes for that path.

Problem format

The Checkout API returns errors as RFC 9457 application/problem+json bodies:
TL;DR: Branch on code or type (they carry the same information) — never on title or detail. Every entry below is grouped by cause, with a stable anchor, HTTP status, retry rule, and — for 429 — the rate-limit body field.
  • code is the stable dotted identifier (for example session:invalid_state) — the value the tables below list, and the value error.code mirrors.
  • type is a derived tag URI: urn:radiumone:checkout: followed by code with every : and _ replaced by - (so session:invalid_state → urn:radiumone:checkout:session-invalid-state). A handful of codes are already full URNs from a different domain (for example urn:radiumone:auth:outlet-binding-violation) — code and type are identical for those. The one exception in the other direction is the catch-all 500 (internal:server_error): its type is the generic about:blank, not a derived URN.
  • title is a short label, not a stable identifier — many error paths share the generic title "RadiumOne error". Don’t branch on it.
  • detail is human-readable and can change, and may echo part of your request (for example the offending URL) — don’t parse it.
  • details carries typed extras for some errors, for example retry_after (seconds) on a 429.
  • error is a deprecated {code, message} mirror of code/detail, kept for backward compatibility. Prefer the top-level fields.

Authentication and authorization

Missing, malformed, or mismatched credentials on any of the three operations.

Validation

The request body failed a field rule or a cross-field check.

Session state and idempotency

Session lookup, cancellation conflicts, and create-time idempotency. See Session lifecycle for the full state model behind these.

Configuration and availability

Your merchant configuration or the gateway itself is unreachable.
gateway:request_failed and gateway:unavailable both mean “no session was created, and it’s safe to retry the same create call” — they differ in cause (a genuine upstream failure vs. a breaker deliberately short-circuiting). Branch on code/type, not the HTTP status alone.

Rate limits and server errors

Next steps

Payment outcomes

Declines, expiry, and cancellation — not errors on this API.

Redirect and signature errors

Signature verification and return-URL signal reference.

Handle failures

Ten common failure scenarios, each with the exact signal and what to do.

Test your integration

Exercise these paths in sandbox before you go live.
Last modified on September 15, 2026