cURL
#!/usr/bin/env bash
# Merchant-initiated cancel (X-Api-Key, not CSRF/customer-driven). Idempotent
# while pending; 409 if already processing or terminal.
set -euo pipefail
CHECKOUT_BASE="${RADIUMONE_CHECKOUT_BASE:-https://checkout-sandbox.radiumone.io}"
: "${RADIUMONE_SECRET_KEY:?set RADIUMONE_SECRET_KEY to your r1sk_* secret key}"
: "${RADIUMONE_CHECKOUT_ID:?set RADIUMONE_CHECKOUT_ID to the session to cancel}"
curl -sS -X POST "$CHECKOUT_BASE/api/v1/checkout/sessions/$RADIUMONE_CHECKOUT_ID/cancel" \
-H "X-Api-Key: $RADIUMONE_SECRET_KEY"#!/usr/bin/env python3
"""Merchant-initiated cancel (X-Api-Key, not CSRF/customer-driven). Idempotent
while pending; 409 if already processing or terminal.
"""
import json
import os
import requests
CHECKOUT_BASE = os.environ.get("RADIUMONE_CHECKOUT_BASE", "https://checkout-sandbox.radiumone.io")
def cancel_checkout_session() -> dict:
checkout_id = os.environ["RADIUMONE_CHECKOUT_ID"]
resp = requests.post(
f"{CHECKOUT_BASE}/api/v1/checkout/sessions/{checkout_id}/cancel",
headers={"X-Api-Key": os.environ.get("RADIUMONE_SECRET_KEY", "")},
timeout=30,
)
payload = resp.json()
if not resp.ok:
# 409 session:invalid_state if already processing/terminal.
code = payload.get("code") or payload.get("type")
raise RuntimeError(f"checkout session cancel failed: {code} ({resp.status_code})")
return payload
if __name__ == "__main__":
print(json.dumps(cancel_checkout_session(), indent=2))
{
"status": "ok",
"data": {
"checkout_id": "chk_3f9a1c2e5b7d4a608e1f2c3b4d5e6f70",
"status": "cancelled"
}
}Cancel a session - Hosted checkout
Cancel a pending checkout session before the shopper pays — for example, when the order changes or the shopper leaves.
POST
/
api
/
v1
/
checkout
/
sessions
/
{id}
/
cancel
cURL
#!/usr/bin/env bash
# Merchant-initiated cancel (X-Api-Key, not CSRF/customer-driven). Idempotent
# while pending; 409 if already processing or terminal.
set -euo pipefail
CHECKOUT_BASE="${RADIUMONE_CHECKOUT_BASE:-https://checkout-sandbox.radiumone.io}"
: "${RADIUMONE_SECRET_KEY:?set RADIUMONE_SECRET_KEY to your r1sk_* secret key}"
: "${RADIUMONE_CHECKOUT_ID:?set RADIUMONE_CHECKOUT_ID to the session to cancel}"
curl -sS -X POST "$CHECKOUT_BASE/api/v1/checkout/sessions/$RADIUMONE_CHECKOUT_ID/cancel" \
-H "X-Api-Key: $RADIUMONE_SECRET_KEY"#!/usr/bin/env python3
"""Merchant-initiated cancel (X-Api-Key, not CSRF/customer-driven). Idempotent
while pending; 409 if already processing or terminal.
"""
import json
import os
import requests
CHECKOUT_BASE = os.environ.get("RADIUMONE_CHECKOUT_BASE", "https://checkout-sandbox.radiumone.io")
def cancel_checkout_session() -> dict:
checkout_id = os.environ["RADIUMONE_CHECKOUT_ID"]
resp = requests.post(
f"{CHECKOUT_BASE}/api/v1/checkout/sessions/{checkout_id}/cancel",
headers={"X-Api-Key": os.environ.get("RADIUMONE_SECRET_KEY", "")},
timeout=30,
)
payload = resp.json()
if not resp.ok:
# 409 session:invalid_state if already processing/terminal.
code = payload.get("code") or payload.get("type")
raise RuntimeError(f"checkout session cancel failed: {code} ({resp.status_code})")
return payload
if __name__ == "__main__":
print(json.dumps(cancel_checkout_session(), indent=2))
{
"status": "ok",
"data": {
"checkout_id": "chk_3f9a1c2e5b7d4a608e1f2c3b4d5e6f70",
"status": "cancelled"
}
}Last modified on September 15, 2026