503 or 500 with no business meaning behind it — a dependency was down, or something failed unexpectedly on RadiumOne’s side.
TL;DR —
503/500 on a create-type request behaves like a timeout: retry with the same idempotency key, with backoff — never a new one.When this happens
503 urn:radiumone:gateway:service-unavailable— a downstream service RadiumOne depends on is unreachable.503 urn:radiumone:gateway:vault-unavailable— the encryption-key service backing card tokenization is unavailable. RadiumOne returns this generic form deliberately, without leaking which key or vault path failed.500 urn:radiumone:gateway:internal-error— an unexpected failure that isn’t one of the above.
What you see
What to do
1
Check for a retry signal first
If the error body carries
retry_allowed, or the response has a Retry-After header, honor it directly — see Problem format and retries: retry rules.2
Otherwise, branch on URN and retry_allowed, never on the HTTP code alone
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).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.3
Retry with backoff, using the same key
Retry a purchase/authorize/refund with the same
request_id, or a capture/void with the same operation_id. Add jittered backoff between attempts rather than retrying immediately.4
Fall back to timeout handling if retries don't resolve it
If the outcome still isn’t clear after a retry, follow Handle timeouts and unknown outcomes — wait for the confirming webhook (recommended), or check status now if you don’t use webhooks or need an answer sooner, rather than continuing to retry indefinitely.
Related
Problem format and retries
The full retry-rules reference.
Handle timeouts and unknown outcomes
The idempotent-retry pattern this page reuses.