Steamworks Documentation
ICloudService Interface
Provides access to a Steam user's Steam Cloud files. This is mostly intended to enable cross-platform saves for your game. The Steam version of the game can use the Steamworks Cloud features (either the ISteamRemoteStorage API, or Steam Auto-Cloud). Non-Steam versions can use this WebAPI to access the files and upload new versions.

Your game will need to obtain permission from the user to access their Steam Cloud files. This can be done via OAuth. Note that you will most likely want to request both read_cloud and write_cloud permissions.

Enumerating Files

Requires read_cloud OAuth access.
GET https://api.steampowered.com/ICloudService/EnumerateFiles/v1/
NameTypeRequiredDescription
access_tokenstringOAuth access token for the user
appiduint32Your App ID
extended_detailsboolInclude details such as download links for the files
countuint32Max number of file to enumerate (default 500)
start_indexuint32Beginning file index to enumerate (default 0)

Enumerate the user's Steam Cloud files for your game. Begin with a "start_index" of zero, and iterate if necessary if the user has more than "count" files.

The response has two fields:
NameTypeDescription
filessee belowA list of file details
total_filesuint32The total number of files the user has in Steam Cloud for your app.

The files list contains this data:
NameTypeDescription
appiduint32same app id
ugciduint64unique file ID
filenamestringthe file name
timestampuint64epoch time when the file was last modified
file_sizeuint64size of the file in bytes
urlstringa URL which can be used to download the file
steamid_creatoruint64SteamID of the user
flagsuint64Steam internal use only
platforms_to_syncuint32List of platforms for which this file is valid. See Uploading Files for the list of possible values.
file_shastringHex string (40 digits) representing the SHA1 digest of the file.

Downloading Files


To download a file, simple make a GET request to the URL returned by EnumerateFiles above.

Uploading Files

Requires write_cloud OAuth access.

Uploading is done via a two-part API. You'll first call BeginHTTPUpload to get details on where to upload the file, then when that is complete, call CommitHTTPUpload.

POST https://api.steampowered.com/ICloudService/BeginHTTPUpload/v1
NameTypeRequiredDescription
access_tokenstringOAuth access token for the user
appiduint32Your App ID
file_sizeboolsize of the file in bytes
filenameuint32the file name
file_shastringHex string (40 digits) representing the SHA1 digest of the file.
platforms_to_syncuint32List of platforms for which this file is valid. Possible values: All, Windows, MacOS, linux, Android, iPhoneOS, Switch. Case-insensitive.

Call this API to initiate uploading a new file (or new version of an existing file) to Steam Cloud for the user. New versions of existing files will overwrite the existing version.

Note that for list parameters, such as "platforms_to_sync", the syntax is as follows:
&platforms_to_sync[0]=macos&platforms_to_sync[1]=windows

The response data:
NameTypeDescription
ugciduint64unique file id (not needed)
timestampuint64epoch timestamp for this change
url_hoststringHost FQDN you will upload the file to
url_pathstringpath for request
use_httpsboolset to true if you must use HTTP to perform the upload (generally always true)
http_headerssee belowlist of HTTP headers you must set on the subsequent PUT request

The "http_headers" list contains this data:
NameTypeDescription
namestringthe header name
valuestringthe header value

To upload the file, make a PUT request to https://<url_host>/<url_path>/, where each of the above specified HTTP headers has the specified value. On success you may receive a 200 OK, 201 Created, or 204 No Content response, depending on the storage provider.

When that completes (whether a success or a failure), call:

POST https://api.steampowered.com/ICloudService/CommitHTTPUpload/v1
NameTypeRequiredDescription
access_tokenstringOAuth access token for the user
appiduint32Your App ID
transfer_succeededbooltrue if the PUT request succeeded
filenameuint32the file name
file_shauint32Hex string (40 digits) representing the SHA1 digest of the file.

The response to this API currently has a single field, "file_committed", which will be true if Steam was able to fully commit the change. If false, then the upload has failed -- a new file was not recorded, and if it was an update to an existing file, the existing file still exists and will be returned by future Enumerate/Download requests.

Deleting Files

Requires write_cloud OAuth access.
POST https://api.steampowered.com/ICloudService/Delete/v1/
NameTypeRequiredDescription
access_tokenstringOAuth access token for the user
appiduint32Your App ID
filenameboolfilename of the file to delete

This API will delete the specified file from the user's Steam Cloud. Deleting files is permanent; no prior versions of the file are retained. There's no body data in the response from this API.