Test cards
RadiumOne hasn’t published a verified sandbox test-card list yet. Until then,
contact support for test-card numbers for the scenario
you need, and use only the numbers support gives you — never a real card, and
never a number you find elsewhere.
- Hosted checkout
- Elements
- 3D Secure
- Webhooks
- UOB Rewards
Use Redirect to hosted checkout or
Embed hosted checkout with a test
card from the table above.
See Handle failures for
the full catalog — expired sessions, missed redirects, invalid signatures,
and more.
Payments API
These scenarios apply wherever you call the Payments API directly: purchase, authorize, capture, void, referenced refund, and standalone refunds.Purchase and authorize
Capture
Void
Refund
Refunds — referenced and standalone alike — are disabled by default and need enablement for your sandbox outlet’s acquirer channel before either of these succeeds; see Refunds require enablement.Void while the settlement batch is OPEN. Refund once it’s CLOSED. You can’t do either the other way around:
- Voiding a transaction whose batch has already closed returns
409 urn:radiumone:tx:void-on-non-open-batch. - Refunding a transaction whose batch is still open returns
409 urn:radiumone:tx:refund-on-open-batch.
GET /v1/transactions/{id}/status or a settlement.* webhook if you’re unsure which state you’re in. See Resolve void and refund conflicts if you hit either error.Standalone refunds
Once your sandbox outlet has standalone refunds enabled, issue an open refund against a test card token directly — see Standalone refunds. Without enablement, expect409 urn:radiumone:routing:operation-disabled.
Idempotent replay
Body mismatch
Timeouts and retries
Simulate a client-side timeout (shorten your own HTTP client’s timeout). Confirm your integration:- Retries the same
request_id/operation_idrather than minting a new one, or - Calls
GET /v1/transactions/{id}/statusto resolve the outcome without creating anything new — see Check a transaction’s status.
PENDING handling
PENDING means the outcome isn’t known yet — most often after a processor timeout. Don’t assume success or failure. Recover it one of two ways:
- Wait for a webhook (
payment.*,authorization.*,refund.*— see Webhook event types). - Call
GET /v1/transactions/{id}/statusfor a live inquiry against the acquirer.
id yet — a client-side timeout before the first response arrived — replay the same request with the same request_id and body. The replay returns the stored transaction and its id, whatever status it’s reached. Never re-submit with a new idempotency key just because the first attempt is slow — that risks a second charge for the same order.
Declined is still a 2xx
Confirm your code branches ondata.status, never on the HTTP status code
alone — a decline is 201 (or 200 for capture/void/referenced refund)
with status: "DECLINED" in the body, not an error response.
Any 2xx response is a result you must branch on status — never on response_code (that’s the verbatim host/acquirer code; useful for support tickets, not for your app logic).
Failure scenarios
See Handle failures for the full catalog — timeouts, automatic reversals, capture/void/refund conflicts, and operations unavailable for your outlet.Errors
See Problem format and retries for the response shape and retry rules, and Decline codes for how declines surface and what to tell the shopper.Sandbox limits
Sandbox environment setup, hosts, and key types are covered in Sandbox and API keys — this page only covers the payment scenarios to test.Next steps
Go-live checklist
Work through this once every scenario above passes.
Problem format and retries
Response shape, retry rules, rate limits, and links to the full URN catalog.