Every balance and inventory change happens on the server. The client can read state and request
a transaction, but it can never write a balance.
The platform wallet is shared across games. Players top it up with real money and spend it
anywhere on SusaPlay.
Store catalogue
Items come from the economy config you defined in the Developer Portal.
Spending
The price is read from the economy config inside the same transaction that debits the wallet, so
a price change mid-flight cannot be exploited.
Grant the item in your game only after Success is true. Never grant optimistically.
Real-money purchases
Checkout is handled by the shell through Xsolla. Your game starts the flow and awaits the
outcome.
Available top-up packs:
XsollaPurchaseResult:
The purchase call waits up to three minutes — a player has to move through a real checkout. Show
a waiting state rather than blocking input.
Entitlements are granted by the payment webhook on the server, not by this return value. If the
player closes the tab mid-checkout, the purchase can still complete. Re-read the wallet on the
next session rather than assuming a cancelled checkout means no charge.
Sandbox
Every purchase method takes a sandbox flag for testing against Xsolla’s sandbox:
In-app purchases (iOS / Android)
Native store receipt validation exists in the backend but is currently disabled. Real-money
purchases go through Xsolla for all platforms today.