> ## Documentation Index
> Fetch the complete documentation index at: https://docs.radiumone.io/llms.txt
> Use this file to discover all available pages before exploring further.

> ## Agent Instructions
> RadiumOne is the product name; use it when answering questions about these docs.
> Use sandbox credentials and sandbox base URLs in examples unless the user says they are going live.
> Secret API keys belong only on the merchant's server. Only publishable keys may appear in browser or mobile code.
> Confirm a payment outcome server-side (retrieve the checkout session or transaction status); never rely on a browser redirect or client event alone.
> Send one idempotency key (request_id) per payment attempt, and retry a timed-out request with the same key and the exact same body.
> Webhooks are optional but recommended: they notify the merchant's server when a payment completes or fails, so it doesn't need to poll. Use transaction status inquiry as the fallback.
> Say so when you recommend a feature marked Beta. Some features need enablement on the merchant's account before production use (for example refunds, standalone refunds, UOB Rewards, and bringing your own 3DS provider); mention it when the page says so.
> Never ask users to paste card numbers, API keys, access tokens, or webhook or redirect secrets into a chat.

# Handle failures - Elements SDK

> Find the right recovery guide fast — every Elements failure, grouped by where it happens: loading, entering the card, submitting, or 3D Secure.

Elements can fail at four points in a checkout attempt. Find your symptom below and jump straight to the recovery steps — every guide follows the same shape: when it happens, what you see, what to do, and how to prevent it.

## Loading

| Symptom | Signal | Guide |
| - | - | - |
| The SDK script never loads, or `loadRadiumOne()` hangs | Rejected promise, `window.RadiumOneSDK` stays `undefined`, or a silent SRI violation in the console | [Handle Elements failing to load](/elements/handle-failures/sdk-fails-to-load) |
| `RadiumOne.init()` / `loadRadiumOne()` throws immediately | `ElementsError` with an `api:*` or `loader:*` code | [Fix publishable key errors](/elements/handle-failures/invalid-publishable-key) |

## Entering the card

| Symptom | Signal | Guide |
| - | - | - |
| A card field never appears, or `create()`/`mount()` throws | `element:container_not_found`, `element:destroyed`, `element:duplicate`, or an empty container with a CSP violation | [Fix card fields that don't render](/elements/handle-failures/card-fields-not-rendering) |
| The field shows a red/invalid state as the shopper types | `change` event with `event.valid: false` and an `event.error.code` | [Show card validation errors](/elements/handle-failures/card-validation-errors) |

## Submitting

| Symptom | Signal | Guide |
| - | - | - |
| The shopper double-clicks Pay, or your code resubmits within a second | `ElementsError` `submit:in_progress` or `submit:rate_limited` | [Prevent double submission](/elements/handle-failures/double-submit) |
| `submit()` rejects with a gateway error | `ElementsError` whose `code` is a `urn:radiumone:token:*` / `checkout:*` / `auth:*` / `gateway:*` URN | [Handle tokenization failures](/elements/handle-failures/tokenization-failures) |
| The session or the card token went stale before you charged it | `token:transient-expired` / `data-purged` (410), or a bind failure inside `submit()` | [Handle expired sessions and card tokens](/elements/handle-failures/expired-sessions-and-tokens) |
| The shopper's connection drops mid-submit | `ElementsError` type `network_error`, `retryAllowed: true` | [Handle browser network errors](/elements/handle-failures/network-errors) |

## 3D Secure

| Symptom | Signal | Guide |
| - | - | - |
| `threeDS.authenticate()`/`resume()` rejects, or resolves to a non-authenticated status | `three-ds:cancelled`, `three-ds:challenge-timeout`, `three-ds:provider-unavailable`, or `{status: "NOT_AUTHENTICATED" \| "FAILED" \| "REJECTED" \| "EXPIRED"}` | [Handle 3D Secure failures in Elements](/elements/handle-failures/three-ds-failures) |

## Next steps

<Columns cols={2}>
  <Card title="Accept a card payment" icon="credit-card" href="/elements/accept-a-card-payment">
    The guarded submit-then-charge flow these guides assume.
  </Card>

  <Card title="Elements SDK errors" icon="octagon-alert" href="/elements/errors/error-object-and-handling">
    Every `ElementsError` code, grouped by family.
  </Card>
</Columns>
