Skip to main content
POST
cURL

Authorizations

X-Api-Key
string
header
required

Your secret key (r1sk_...). A publishable key is rejected with 400 urn:radiumone:checkout:wrong-key-type.

Body

application/json
amount
integer
required

Amount in the currency's minor units. Minimum 50. No enforced maximum — the payment gateway rejects an excessively large amount with 422 gateway:request_rejected.

Required range: x >= 50
currency
enum<string>
required

ISO 4217 currency code, one of the 18 listed here. Case-insensitive on input (upper-cased before storage/comparison); also must be enabled for your merchant account.

Available options:
SGD,
USD,
EUR,
GBP,
JPY,
AUD,
HKD,
CNY,
MYR,
THB,
IDR,
PHP,
VND,
KRW,
INR,
TWD,
CAD,
NZD
Required string length: 3
order_reference
string
required

Your idempotency key for this session, trimmed of leading/trailing whitespace before the 1–128 length check applies.

Required string length: 1 - 128
success_url
string
required

Redirect target on success. Must be an absolute https:// URL, or plain http://localhost for local development — any other scheme, or a URL that doesn't parse, is rejected with 400 validation:invalid_input. The host is also checked against allowed_domains (exact match or a subdomain of a configured domain); any host is accepted when you haven't configured an allow-list. Use {CHECKOUT_ID} as a literal placeholder if you want the session ID back in the URL — only the first occurrence is substituted. Up to 2048 characters.

Maximum string length: 2048
cancel_url
string
required

Redirect target on cancel/decline. Same URL and host-check rules as success_url. {CHECKOUT_ID} is not substituted in this URL. Up to 2048 characters.

Maximum string length: 2048
description
string
Maximum string length: 256
mode
enum<string>

How the shopper pays. redirect (default): send the shopper to checkout_url. embed: load checkout_url in an iframe — see Embed hosted checkout.

Available options:
redirect,
embed
ttl_minutes
integer

Session TTL in minutes (5–60). Omit to use your environment's default — 10 minutes in production, 25 minutes in sandbox; always set this explicitly rather than relying on the default, since it also bounds the order_reference idempotency window.

Required range: 5 <= x <= 60
locale
enum<string>

Preferred shopper locale, one of the 9 accepted codes (case-sensitive, lowercase). Only en and zh currently render a fully localized page; other accepted codes fall back to English unless the shopper's browser language is en/zh. An unrecognized value is rejected; a non-string value defaults to en.

Available options:
en,
zh,
ja,
ko,
th,
id,
ms,
vi,
fil
metadata
object

Your own key/value data, as a JSON object. Serialized as compact JSON, it can be at most 4096 UTF-16 code units, limit included — most characters (including Chinese and Thai) count as 1 unit, emoji as 2. A larger object is rejected with 400 urn:radiumone:checkout:validation-invalid-input.

branding_profile_id
string

Id of a branding profile set up for your merchant, to style this payment page. Letters, digits, _, and -, up to 64 characters (profile IDs are UUIDs, and differ between sandbox and production). An ID that doesn't exist, was deleted, or belongs to another merchant falls back to your default profile; with no default profile, the standard RadiumOne look applies. See Branding.

Maximum string length: 64
Pattern: ^[A-Za-z0-9_-]+$
branding
object

Per-session branding override. Each field you send replaces that field of the resolved branding profile (branding_profile_id, or your default profile) for this checkout only. Fields you omit keep the profile value, and an empty object is the same as omitting branding. Same validation rules as a saved profile. An unknown field or an invalid value returns 400 validation:invalid_input naming the field. See Branding.

state
string

Opaque value round-tripped on the redirect back to you. Not included in the redirect signature — verify it separately from sig.

Maximum string length: 512
billing_details
object

Cardholder name, email, phone, and billing address — shown to the shopper on the pay page and used for 3-D Secure. Every field is optional; an invalid sub-field is dropped rather than rejected, so omit a field entirely rather than sending an empty string. See Customize checkout.

customer
any
deprecated

Removed. Sending this field, with any value, including null, returns 400 validation:invalid_input. Use billing_details instead.

outlet_id
string<uuid>

Outlet to charge under — only for multi-outlet merchants. Omit to use your key's bound outlet, or your account default. A malformed value returns 400 validation:invalid_input; a well-formed value that isn't your outlet, or isn't bound to your key, returns 422.

line_items
object[]

Itemized breakdown shown to the shopper. When sent, Σ(quantity × unit_amount) + Σ(adjustments[].amount) must equal amount, or the request is rejected.

adjustments
object[]

Tax, shipping, discount, and fee rows applied on top of the line-item subtotal. Requires a non-empty line_items — an adjustments-only payload is rejected.

Response

Session created.

status
string
data
object
Last modified on September 15, 2026