Skip to main content
Cloud saves are kept per player and per game, in named slots. The data is JSON text that you serialize yourself — usually with JsonUtility.ToJson. The platform stores it and tracks its version for you.

Read

LoadResult:
An empty slot is not a failure: Success is true, Data is empty and Version is 0. Check Data to tell a new player from a returning one.

Write

SaveResult has Success, Version and Error.
data must be valid JSON — the SDK sends it as a JSON value, not as a quoted string. Pass the output of JsonUtility.ToJson. A plain string such as hello makes the request invalid, and empty data is refused.
You do not pass a version. The SDK remembers the slot’s last version and sends it with the write.

Multiple slots

Slots are independent — use them to separate data that changes at different rates.

Concurrency

Writes to one slot are queued: if the game saves again while a write is in flight, the calls are merged into the next write, which carries the newest data. Writes to a slot are at least two seconds apart. If another tab or device saved the slot first, the server answers 409 VERSION_CONFLICT. The SDK then reads the slot to pick up its version and writes again, up to three attempts — the last write wins. The SDK has no merge hook; if your game can run in two tabs and needs more than last-write-wins, read before writing and merge in your own code.

Limits

  • 500,000 characters per slot
  • Larger payloads are refused by the server

When a write fails

Success is false and Error says why. Common causes: the payload is too large, the player’s session expired, or the page stopped responding. Keep the unsaved state in memory and try again rather than discarding progress.