Intro - steam 1.4.4

May 16, 2023

MIT License

A python module for interacting with various parts of Steam.

Supports Python 2.7+ and 3.4+.

Features

  • SteamClient - communication with the steam network based on gevent
  • CDNClient - access to Steam content depots
  • WebAuth - authentication for access to store.steampowered.com and steamcommunity.com
  • WebAPI - simple API for Steam’s Web API with automatic population of interfaces
  • SteamAuthenticator - enable/disable/manage two factor authentication for Steam accounts
  • SteamID - convert between the various ID representations with ease
  • Master Server Query Protocol - query masters servers directly or via SteamClient

Checkout the User guide for examples, or the API Reference for details.

For questions, issues, or general curiosity, visit the repo at https://github.com/ValvePython/steam.

Like using the command line? Try steamctl tool

Quick install

For system specific details, see Installation Details.

Install latest version from PYPI:

# with SteamClient dependecies
pip install -U steam[client]

# without (only when using parts that do no rely on gevent, and protobufs)
pip install -U steam

Install the current dev version from github:

# cutting edge from master
pip install git+https://github.com/ValvePython/steam#egg=steam

# specific version tag (e.g. v1.0.0)
pip install git+https://github.com/ValvePython/steam@v1.0.0#egg=steam[client]
# without SteamClient extras
pip install git+https://github.com/ValvePython/steam@v1.0.0#egg=steam

Intro - steam 1.4.4

May 16, 2023

MIT License

A python module for interacting with various parts of Steam.

Supports Python 2.7+ and 3.4+.

Features

  • SteamClient - communication with the steam network based on gevent
  • CDNClient - access to Steam content depots
  • WebAuth - authentication for access to store.steampowered.com and steamcommunity.com
  • WebAPI - simple API for Steam’s Web API with automatic population of interfaces
  • SteamAuthenticator - enable/disable/manage two factor authentication for Steam accounts
  • SteamID - convert between the various ID representations with ease
  • Master Server Query Protocol - query masters servers directly or via SteamClient

Checkout the User guide for examples, or the API Reference for details.

For questions, issues, or general curiosity, visit the repo at https://github.com/ValvePython/steam.

Like using the command line? Try steamctl tool

Quick install

For system specific details, see Installation Details.

Install latest version from PYPI:

# with SteamClient dependecies
pip install -U steam[client]

# without (only when using parts that do no rely on gevent, and protobufs)
pip install -U steam

Install the current dev version from github:

# cutting edge from master
pip install git+https://github.com/ValvePython/steam#egg=steam

# specific version tag (e.g. v1.0.0)
pip install git+https://github.com/ValvePython/steam@v1.0.0#egg=steam[client]
# without SteamClient extras
pip install git+https://github.com/ValvePython/steam@v1.0.0#egg=steam

Table of Contents

Installation Details

Linux

Steps assume that python and pip are already installed.

  1. Install dependencies (see sections below)
  2. Run pip install steam

Note

Consider using virtualenv in order to keep you system packages untouched.

Windows

Cygwin
  1. Download cygwin installer from https://cygwin.com/install.html
  2. During the setup select these additional packages
    • python3
    • python3-setuptools
  1. Install pip
    • Open cygwin terminal
    • Run easy_install-3.4 pip
  1. Run pip install steam

Note

Consider using virtualenv in order to keep you system packages untouched.

Note

Installation may take a while as a number of dependecies will be compiled

Native Python
  1. Download & install python 3.5 from https://www.python.org/downloads/windows/

Note

Installing for all users will require administrator rights

  1. Then from cmd run pip install steam

User guide

Welcome to the quick start section. The aim here is to give you a very quick overview of the functionality available in the steam module.

SteamID

SteamID can be used to convert the universal steam id to its’ various representations.

Note

SteamID is immutable as it inherits from int.

Converting between representations
>>> from steam.steamid import SteamID

>>> SteamID()
SteamID(id=0, type='Invalid', universe='Invalid', instance=0)

>>> SteamID(12345)  # accountid
>>> SteamID('12345')
>>> SteamID('STEAM_1:1:6172')  # steam2
SteamID(id=12345, type='Individual', universe='Public', instance=1)

>>> SteamID(103582791429521412)  # steam64
>>> SteamID('103582791429521412')
>>> SteamID('[g:1:4]')  # steam3
SteamID(id=4, type='Clan', universe='Public', instance=0)
>>> group = SteamID('[g:1:4]')
>>> group.id  # accountid
4
>>> group.as_32  # accountid
4
>>> group.as_64
103582791429521412
>>> int(group)
103582791429521412
>>> str(group)
'103582791429521412'
>>> group.as_steam2 # only works for 'Individual' accounts
'STEAM_1:0:2'
>>> group.as_steam3
'[g:1:4]'
>>> group.community_url
'https://steamcommunity.com/gid/103582791429521412'
Resolving community urls to SteamID

The steam.steamid submodule provides function to resolve community urls. Here are some examples:

>>> SteamID.from_url('https://steamcommunity.com/id/drunkenf00l')
>>> steam.steamid.from_url('https://steamcommunity.com/id/drunkenf00l')
SteamID(id=8193745, type='Individual', universe='Public', instance=1)

>>> steam.steamid.steam64_from_url('http://steamcommunity.com/profiles/76561197968459473')
'76561197968459473'

WebAPI

WebAPI is a thin Wrapper around Steam Web API. Requires API Key. Upon initialization the instance will fetch all available interfaces and populate the namespace.

Obtaining a key

Any steam user can get a key by visiting http://steamcommunity.com/dev/apikey. The only requirement is that the user has verified their email. Then the key can be used on the public WebAPI. See steam.webapi.APIHost

Note

Interface availability depends on the key. Unless the schema is loaded manually.

Calling an endpoint
>>> from steam.webapi import WebAPI
>>> api = WebAPI(key="<your api key>")

# instance.<interface>.<method>
>>> api.ISteamWebAPIUtil.GetServerInfo()
>>> api.call('ISteamWebAPIUtil.GetServerInfo')
{u'servertimestring': u'Sun Jul 05 22:37:25 2015', u'servertime': 1436161045}

>>> api.ISteamUser.ResolveVanityURL(vanityurl="valve", url_type=2)
>>> api.call('ISteamUser.ResolveVanityURL', vanityurl="valve", url_type=2)
{u'response': {u'steamid': u'103582791429521412', u'success': 1}}

# call a specific version of the method
>>> api.ISteamUser.ResolveVanityURL_v1(vanityurl="valve", url_type=2)
>>> api.call('ISteamUser.ResolveVanityURL_v1', vanityurl="valve", url_type=2)

It’s not necessary to provide the key when calling any interface method. key, format, raw, http_timeout parameters can be specified on WebAPI to affect all method calls, or when calling a specific method. Some methods have parameters which need to be a list. Trying to call nonexistent method will raise an AttributeError.

Supported formats by web api are: json (default), vdf, xml The response will be deserialized using the appropriate module unless raw is True.

WebAPI documentation
>>> api.ISteamUser.ResolveVanityURL.__doc__  # method doc
"""
ResolveVanityURL (v0001)

  Parameters:
    key                       string   required
      - access key
    url_type                  int32    optional
      - The type of vanity URL. 1 (default): Individual profile, 2: Group, 3: Official game group
    vanityurl                 string   required
      - The vanity URL to get a SteamID for

"""

# or calling doc() will print it
>>> api.ISteamUser.ResolveVanityURL.doc()  # method doc
>>> api.ISteamUser.doc()  # interface and all methods
>>> api.doc()  # all available interfaces

For a more complete list of all available interfaces and methods visit: https://steamapi.xpaw.me/

SteamClient

gevent based implementation for interacting with the Steam network. The library comes with some Steam client features implemented, see client for more details.

Warning

SteamClient no longer applies gevent monkey patches by default. See steam.monkey for details how make stdlib gevent cooperative.

CLI example

In this example, the user will be prompted for credential and once logged in will the account name. After that we logout.

from steam.client import SteamClient
from steam.enums.emsg import EMsg

client = SteamClient()

@client.on(EMsg.ClientVACBanStatus)
def print_vac_status(msg):
    print("Number of VAC Bans: %s" % msg.body.numBans)

client.cli_login()

print("Logged on as: %s" % client.user.name)
print("Community profile: %s" % client.steam_id.community_url)
print("Last logon: %s" % client.user.last_logon)
print("Last logoff: %s" % client.user.last_logoff)
print("Number of friends: %d" % len(client.friends))

client.logout()

You can find more examples at https://github.com/ValvePython/steam/tree/master/recipes

Sending a message

Example of sending a protobuf message and handling the response. send_message_and_wait() will send a message and block until the specified event.

from steam.enums import EResult
from steam.core.msg import MsgProto
from steam.enums.emsg import EMsg

message = MsgProto(EMsg.ClientAddFriend)
message.body.steamid_to_add = 76561197960265728

resp = client.send_message_and_wait(message, EMsg.ClientAddFriendResponse)

if resp.eresult == EResult.OK:
    print "Send a friend request to %s (%d)" % (repr(resp.body.persona_name_added),
                                               resp.body.steam_id_added,
                                               )
else:
    print "Error: %s" % EResult(resp.eresult)

Alternatively, a callback can be registered to handle the response event every time.

@client.on(EMsg.ClientAddFriendResponse)
def handle_add_response(msg):
    pass
# OR
client.on(EMsg.ClientAddFriendResponse, handle_add_response)
Logging

It is often useful to see the message that are coming in and going on. Here is how to enable debug logging to the console.

import logging
logging.basicConfig(format='[%(asctime)s] %(levelname)s %(name)s: %(message)s', level=logging.DEBUG)

For more complicated logging configurations, consult the python documentation.

By default the SteamClient will not log the contents of messages. To enable that simply set SteamClient.verbose_debug to True on your SteamClient instance.

client = SteamClient()
client.verbose_debug = True

When there are multiple instances, they will all log under the same logger name. We can override the default logger instances with new one and give it a different name.

client1 = SteamClient()
client2 = SteamClient()

client1._LOG = logging.getLogger("SC#1")
client2._LOG = logging.getLogger("SC#2")

Web Authentication

There are currently two paths for gaining access to steam websites. Either using WebAuth, or via a SteamClient.get_web_session() instance.

session = client.get_web_session()  # returns requests.Session
session.get('https://store.steampowered.com')

For more details about WebAuth, see steam.webauth

API Reference

client

Implementation of Steam client based on gevent

Warning

steam.client no longer patches stdlib to make it gevent cooperative. This provides flexibility if you want to use SteamClient with async or other modules. If you want to monkey patch anyway use steam.monkey.patch_minimal()

Note

Additional features are located in separate submodules. All functionality from builtins is inherited by default.

Note

Optional features are available as mixins. This allows the client to remain light yet flexible.

class steam.client.SteamClient

Bases: steam.core.cm.CMClient, steam.client.builtins.BuiltinBase

EVENT_AUTH_CODE_REQUIRED = 'auth_code_required'

When either email or 2FA code is needed for login

EVENT_CHANNEL_SECURED = 'channel_secured'
EVENT_CHAT_MESSAGE = 'chat_message'
EVENT_CONNECTED = 'connected'
EVENT_DISCONNECTED = 'disconnected'
EVENT_EMSG = 0
EVENT_ERROR = 'error'
EVENT_LOGGED_ON = 'logged_on'

After successful login

EVENT_NEW_LOGIN_KEY = 'new_login_key'

After a new login key is accepted

EVENT_RECONNECT = 'reconnect'
PROTOCOL_TCP = 0
PROTOCOL_UDP = 1
anonymous_login()

Login as anonymous user

Returns:logon result, see CMsgClientLogonResponse.eresult
Return type:EResult
auto_discovery = True
cell_id = 0
change_status(**kwargs)

Set name, persona state, flags

Note

Changing persona state will also change persona_state

Parameters:
  • persona_state (EPersonaState) – persona state (Online/Offline/Away/etc)
  • player_name (str) – profile name
  • persona_state_flags (EPersonaStateFlag) – persona state flags
channel_hmac = None
channel_key = None
channel_secured = False
chat_mode = 2

chat mode (0=old chat, 2=new chat)

cli_login(username='', password='')

Generates CLI prompts to complete the login process

Parameters:
  • username (str) – optionally provide username
  • password (str) – optionally provide password
Returns:

logon result, see CMsgClientLogonResponse.eresult

Return type:

EResult

Example console output after calling cli_login()

In [5]: client.cli_login()
Steam username: myusername
Password:
Steam is down. Keep retrying? [y/n]: y
Invalid password for 'myusername'. Enter password:
Enter email code: 123
Incorrect code. Enter email code: K6VKF
Out[5]: <EResult.OK: 1>
cm_servers = None
connect(*args, **kwargs)

Attempt to establish connection, see CMClient.connect()

connected = False
count_listeners(event)

Returns a count of how many listeners are registered registed for a specific event

Parameters:event – event identifier
Returns:number of listeners
Return type:int
credential_location = None

location for sentry

current_games_played = []
current_jobid = 0
current_server_addr = None
disconnect(*args, **kwargs)

Close connection, see CMClient.disconnect()

emit(event, *args)

Emit event with some arguments

Parameters:
  • event (any type) – event identifier
  • args – any or no arguments
games_played(app_ids)

Set the apps being played by the user

Parameters:app_ids (list) – a list of application ids

These app ids will be recorded in current_games_played.

get_access_tokens(app_ids=[], package_ids=[])

Get access tokens

Parameters:
  • app_ids (list) – list of app ids
  • package_ids (list) – list of package ids
Returns:

dict with apps and packages containing their access tokens, see example below

Return type:

dict, None

{'apps':     {123: 8888888886, ...},
 'packages': {456: 6666666666, ...}
}
get_app_ticket(app_id)

Get app ownership ticket

Parameters:app_id (int) – app id
Returns:CMsgClientGetAppOwnershipTicketResponse
Return type:proto message
get_cdn_auth_token(depot_id, hostname)

Get CDN authentication token

Note

This token is no longer needed for access to CDN files

Parameters:
  • depot_id (int) – depot id
  • hostname (str) – cdn hostname
Returns:

CMsgClientGetCDNAuthTokenResponse

Return type:

proto message

get_changes_since(change_number, app_changes=True, package_changes=False)

Get changes since a change number

Parameters:
  • change_number (int) – change number to use as stating point
  • app_changes (bool) – whether to inclued app changes
  • package_changes (bool) – whether to inclued package changes
Returns:

CMsgClientPICSChangesSinceResponse

Return type:

proto message instance, or None on timeout

get_depot_key(app_id, depot_id)

Get depot decryption key

Parameters:
  • app_id (int) – app id
  • depot_id (int) – depot id
Returns:

CMsgClientGetDepotDecryptionKeyResponse

Return type:

proto message

get_encrypted_app_ticket(app_id, userdata)

Gets the encrypted app ticket :param app_id: app id :type app_id: int :param userdata: userdata :type userdata: bytes :return: EncryptedAppTicket <https://github.com/ValvePython/steam/blob/39627fe883feeed2206016bacd92cf0e4580ead6/protobufs/encrypted_app_ticket.proto>_ :rtype: proto message

get_leaderboard(app_id, name)

New in version 0.8.2.

Find a leaderboard

Parameters:
  • app_id (int) – application id
  • name (str) – leaderboard name
Returns:

leaderboard instance

Return type:

SteamLeaderboard

Raises:

LookupError on message timeout or error

get_player_count(app_id, timeout=5)

Get numbers of players for app id

Parameters:app_id (int) – app id
Returns:number of players
Return type:int, EResult
get_product_info(apps=[], packages=[], meta_data_only=False, raw=False, auto_access_tokens=True, timeout=15)

Get product info for apps and packages

Parameters:
  • apps (list) – items in the list should be either just app_id, or dict
  • packages (list) – items in the list should be either just package_id, or dict
  • meta_data_only (bool) – only meta data will be returned in the reponse (e.g. change number, missing_token, sha1)
  • raw (bool) – Data buffer for each app is returned as bytes in its’ original form. Apps buffer is text VDF, and package buffer is binary VDF
  • auto_access_token (bool) – automatically request and fill access tokens
Returns:

dict with apps and packages containing their info, see example below

Return type:

dict, None

{'apps':     {570: {...}, ...},
 'packages': {123: {...}, ...}
}

Access token is needed to access full information for certain apps, and also package info. Each app and package has its’ own access token. If a token is required then _missing_token=True in the response.

App access tokens are obtained by calling get_access_tokens(), and are returned only when the account has a license for the specified app. Example code:

result = client.get_product_info(apps=[123])

if result['apps'][123]['_missing_token']:
    tokens = client.get_access_token(apps=[123])

    result = client.get_product_info(apps=[{'appid': 123,
                                            'access_token': tokens['apps'][123]
                                            }])

Note

It is best to just request access token for all apps, before sending a product info request.

Package tokens are located in the account license list. See licenses

result = client.get_product_info(packages=[{'packageid': 123,
                                            'access_token': client.licenses[123].access_token,
                                            }])
get_sentry(username)

Returns contents of sentry file for the given username

Note

returns None if credential_location is not set, or file is not found/inaccessible

Parameters:username (str) – username
Returns:sentry file contents, or None
Return type:bytes, None
get_user(steam_id, fetch_persona_state=True)

Get SteamUser instance for steam id

Parameters:
  • steam_id (int, SteamID) – steam id
  • fetch_persona_state (bool) – whether to request person state when necessary
Returns:

SteamUser instance

Return type:

SteamUser

get_web_session(language='english')

Get a requests.Session that is ready for use

See get_web_session_cookies()

Note

Auth cookies will only be send to (help|store).steampowered.com and steamcommunity.com domains

Note

The session is valid only while SteamClient instance is logged on.

Parameters:language (str) – localization language for steam pages
Returns:authenticated Session ready for use
Return type:requests.Session, None
get_web_session_cookies()

Get web authentication cookies via WebAPI’s AuthenticateUser

Note

The cookies are valid only while SteamClient instance is logged on.

Returns:dict with authentication cookies
Return type:dict, None
idle()

Yeild in the current greenlet and let other greenlets run

licenses = None
logged_on = None

indicates logged on status. Listen to logged_on when change to True

login(username, password='', login_key=None, auth_code=None, two_factor_code=None, login_id=None)

Login as a specific user

Parameters:
  • username (str) – username
  • password (str) – password
  • login_key (str) – login key, instead of password
  • auth_code (str) – email authentication code
  • two_factor_code (str) – 2FA authentication code
  • login_id (int) – number used for identifying logon session
Returns:

logon result, see CMsgClientLogonResponse.eresult

Return type:

EResult

Note

Failure to login will result in the server dropping the connection, error event is fired

auth_code_required event is fired when 2FA or Email code is needed. Here is example code of how to handle the situation.

@steamclient.on(steamclient.EVENT_AUTH_CODE_REQUIRED)
def auth_code_prompt(is_2fa, code_mismatch):
    if is_2fa:
        code = input("Enter 2FA Code: ")
        steamclient.login(username, password, two_factor_code=code)
    else:
        code = input("Enter Email Code: ")
        steamclient.login(username, password, auth_code=code)

Codes are required every time a user logins if sentry is not setup. See set_credential_location()

login_key = None

can be used for subsequent logins (no 2FA code will be required)

logout()

Logout from steam. Doesn’t nothing if not logged on.

Note

The server will drop the connection immediatelly upon logout.

on(event, callback=None, once=False)

Registers a callback for the specified event

Parameters:
  • event – event name
  • callback – callback function

Can be as function decorator if only event param is specified.

@instaceOfSomeClass.on("some event")
def handle_event():
    pass

instaceOfSomeClass.on("some event", handle_event)

To listen for any event, use None as event identifier.

once(event, callback=None)

Register a callback, but call it exactly one time

See eventemitter.EventEmitter.on()

persona_state = 1
reconnect(maxdelay=30, retry=0)

Implements explonential backoff delay before attempting to connect. It is otherwise identical to calling CMClient.connect(). The delay is reset upon a successful login.

Parameters:
Returns:

successful connection

Return type:

bool

register_product_key(key)

Register/Redeem a CD-Key

Parameters:key (str) – CD-Key
Returns:format (eresult, result_details, receipt_info)
Return type:tuple

Example receipt_info:

{'BasePrice': 0,
  'CurrencyCode': 0,
  'ErrorHeadline': '',
  'ErrorLinkText': '',
  'ErrorLinkURL': '',
  'ErrorString': '',
  'LineItemCount': 1,
  'PaymentMethod': 1,
  'PurchaseStatus': 1,
  'ResultDetail': 0,
  'Shipping': 0,
  'Tax': 0,
  'TotalDiscount': 0,
  'TransactionID': UINT_64(111111111111111111),
  'TransactionTime': 1473000000,
  'lineitems': {'0': {'ItemDescription': 'Half-Life 3',
    'TransactionID': UINT_64(11111111111111111),
    'packageid': 1234}},
  'packageid': -1}
relogin()

Login without needing credentials, essentially remember password. The login_key is acquired after successful login and it will be automatically acknowledged. Listen for the new_login_key event. After that the client can relogin using this method.

Note

Only works when relogin_available is True.

if client.relogin_available: client.relogin()
else:
    client.login(user, pass)
Returns:login result
Return type:EResult
relogin_available

True when the client has the nessesary data for relogin()

remove_all_listeners(event=None)

Removes all registered callbacks, or all registered callbacks for a specific event

Parameters:event – event identifier
remove_listener(event, callback)

Removes callback for the specified event

Parameters:
request_free_license(app_ids)

Request license for free app(s)

Parameters:app_ids (list) – list of app ids
Returns:format (EResult, result_details, receipt_info)
Return type:tuple
request_persona_state(steam_ids, state_flags=863)

Request persona state data

Parameters:
run_forever()

Transfer control the gevent event loop

This is useful when the application is setup and ment to run for a long time

send(message, body_params=None)

Send a message to CM

Parameters:
  • message (Msg, MsgProto) – a message instance
  • body_params (dict) – a dict with params to the body (only MsgProto)
send_job(message, body_params=None)

Send a message as a job

Note

Not all messages are jobs, you’ll have to find out which are which

Parameters:
  • message (Msg, MsgProto) – a message instance
  • body_params (dict) – a dict with params to the body (only MsgProto)
Returns:

jobid event identifier

Return type:

str

To catch the response just listen for the jobid event.

jobid = steamclient.send_job(my_message)

resp = steamclient.wait_event(jobid, timeout=15)
if resp:
    (message,) = resp
send_job_and_wait(message, body_params=None, timeout=None, raises=False)

Send a message as a job and wait for the response.

Note

Not all messages are jobs, you’ll have to find out which are which

Parameters:
  • message (Msg, MsgProto) – a message instance
  • body_params (dict) – a dict with params to the body (only MsgProto)
  • timeout (int) – (optional) seconds to wait
  • raises (bool) – (optional) On timeout if False return None, else raise gevent.Timeout
Returns:

response proto message

Return type:

Msg, MsgProto

Raises:

gevent.Timeout

send_message_and_wait(message, response_emsg, body_params=None, timeout=None, raises=False)

Send a message to CM and wait for a defined answer.

Parameters:
  • message (Msg, MsgProto) – a message instance
  • response_emsg (EMsg,:class:int) – emsg to wait for
  • body_params (dict) – a dict with params to the body (only MsgProto)
  • timeout (int) – (optional) seconds to wait
  • raises (bool) – (optional) On timeout if False return None, else raise gevent.Timeout
Returns:

response proto message

Return type:

Msg, MsgProto

Raises:

gevent.Timeout

send_um(method_name, params=None)

Send service method request

Parameters:
  • method_name (str) – method name (e.g. Player.GetGameBadgeLevels#1)
  • params (dict) – message parameters
Returns:

job_id identifier

Return type:

str

Listen for jobid on this object to catch the response.

send_um_and_wait(method_name, params=None, timeout=10, raises=False)

Send service method request and wait for response

Parameters:
  • method_name (str) – method name (e.g. Player.GetGameBadgeLevels#1)
  • params (dict) – message parameters
  • timeout (int) – (optional) seconds to wait
  • raises (bool) – (optional) On timeout if False return None, else raise gevent.Timeout
Returns:

response message

Return type:

proto message instance

Raises:

gevent.Timeout

session_id = None
set_credential_location(path)

Sets folder location for sentry files

Needs to be set explicitly for sentries to be created.

set_ui_mode(uimode)

Set UI mode. Show little icon next to name in friend list. (e.g phone, controller, other)

Parameters:uimode (EClientUIMode) – UI mode integer

These app ids will be recorded in current_games_played.

sleep(seconds)

Yeild and sleep N seconds. Allows other greenlets to run

steam_id = SteamID(id=0, type='Invalid', universe='Invalid', instance=0)
store_sentry(username, sentry_bytes)

Store sentry bytes under a username

Parameters:username (str) – username
Returns:Whenver the operation succeed
Return type:bool
user = None
username = None

username when logged on

verbose_debug = False
wait_event(event, timeout=None, raises=False)

Blocks until an event and returns the results

Parameters:
  • event – event identifier
  • timeout (int) – (optional)(default:None) seconds to wait
  • raises (bool) – (optional)(default:False) On timeout if False return None, else raise gevent.Timeout
Returns:

returns event arguments in tuple

Return type:

None, or tuple

Raises:

gevent.Timeout

Handling timeout

args = ee.wait_event('my event', timeout=5)
if args is None:
    print "Timeout!"
wait_msg(event, timeout=None, raises=None)

Wait for a message, similiar to wait_event()

Parameters:
  • event (EMsg or str) – event id
  • timeout (int) – seconds to wait before timeout
  • raises (bool) – On timeout when False returns None, else raise gevent.Timeout
Returns:

returns a message or None

Return type:

None, or proto message

Raises:

gevent.Timeout

steam.client.random() → x in the interval [0, 1).
builtins

All high level features of steam.client.SteamClient are implemented here in separate submodules.

Apps
class steam.client.builtins.apps.Apps(*args, **kwargs)

Bases: object

licenses = None

dict Accounts’ package licenses

get_player_count(app_id, timeout=5)

Get numbers of players for app id

Parameters:app_id (int) – app id
Returns:number of players
Return type:int, EResult
get_product_info(apps=[], packages=[], meta_data_only=False, raw=False, auto_access_tokens=True, timeout=15)

Get product info for apps and packages

Parameters:
  • apps (list) – items in the list should be either just app_id, or dict
  • packages (list) – items in the list should be either just package_id, or dict
  • meta_data_only (bool) – only meta data will be returned in the reponse (e.g. change number, missing_token, sha1)
  • raw (bool) – Data buffer for each app is returned as bytes in its’ original form. Apps buffer is text VDF, and package buffer is binary VDF
  • auto_access_token (bool) – automatically request and fill access tokens
Returns:

dict with apps and packages containing their info, see example below

Return type:

dict, None

{'apps':     {570: {...}, ...},
 'packages': {123: {...}, ...}
}

Access token is needed to access full information for certain apps, and also package info. Each app and package has its’ own access token. If a token is required then _missing_token=True in the response.

App access tokens are obtained by calling get_access_tokens(), and are returned only when the account has a license for the specified app. Example code:

result = client.get_product_info(apps=[123])

if result['apps'][123]['_missing_token']:
    tokens = client.get_access_token(apps=[123])

    result = client.get_product_info(apps=[{'appid': 123,
                                            'access_token': tokens['apps'][123]
                                            }])

Note

It is best to just request access token for all apps, before sending a product info request.

Package tokens are located in the account license list. See licenses

result = client.get_product_info(packages=[{'packageid': 123,
                                            'access_token': client.licenses[123].access_token,
                                            }])
get_changes_since(change_number, app_changes=True, package_changes=False)

Get changes since a change number

Parameters:
  • change_number (int) – change number to use as stating point
  • app_changes (bool) – whether to inclued app changes
  • package_changes (bool) – whether to inclued package changes
Returns:

CMsgClientPICSChangesSinceResponse

Return type:

proto message instance, or None on timeout

get_app_ticket(app_id)

Get app ownership ticket

Parameters:app_id (int) – app id
Returns:CMsgClientGetAppOwnershipTicketResponse
Return type:proto message
get_encrypted_app_ticket(app_id, userdata)

Gets the encrypted app ticket :param app_id: app id :type app_id: int :param userdata: userdata :type userdata: bytes :return: EncryptedAppTicket <https://github.com/ValvePython/steam/blob/39627fe883feeed2206016bacd92cf0e4580ead6/protobufs/encrypted_app_ticket.proto>_ :rtype: proto message

get_depot_key(app_id, depot_id)

Get depot decryption key

Parameters:
  • app_id (int) – app id
  • depot_id (int) – depot id
Returns:

CMsgClientGetDepotDecryptionKeyResponse

Return type:

proto message

get_cdn_auth_token(depot_id, hostname)

Get CDN authentication token

Note

This token is no longer needed for access to CDN files

Parameters:
  • depot_id (int) – depot id
  • hostname (str) – cdn hostname
Returns:

CMsgClientGetCDNAuthTokenResponse

Return type:

proto message

get_access_tokens(app_ids=[], package_ids=[])

Get access tokens

Parameters:
  • app_ids (list) – list of app ids
  • package_ids (list) – list of package ids
Returns:

dict with apps and packages containing their access tokens, see example below

Return type:

dict, None

{'apps':     {123: 8888888886, ...},
 'packages': {456: 6666666666, ...}
}
register_product_key(key)

Register/Redeem a CD-Key

Parameters:key (str) – CD-Key
Returns:format (eresult, result_details, receipt_info)
Return type:tuple

Example receipt_info:

{'BasePrice': 0,
  'CurrencyCode': 0,
  'ErrorHeadline': '',
  'ErrorLinkText': '',
  'ErrorLinkURL': '',
  'ErrorString': '',
  'LineItemCount': 1,
  'PaymentMethod': 1,
  'PurchaseStatus': 1,
  'ResultDetail': 0,
  'Shipping': 0,
  'Tax': 0,
  'TotalDiscount': 0,
  'TransactionID': UINT_64(111111111111111111),
  'TransactionTime': 1473000000,
  'lineitems': {'0': {'ItemDescription': 'Half-Life 3',
    'TransactionID': UINT_64(11111111111111111),
    'packageid': 1234}},
  'packageid': -1}
request_free_license(app_ids)

Request license for free app(s)

Parameters:app_ids (list) – list of app ids
Returns:format (EResult, result_details, receipt_info)
Return type:tuple
User
class steam.client.builtins.user.User(*args, **kwargs)

Bases: object

EVENT_CHAT_MESSAGE = 'chat_message'

On new private chat message

Parameters:
  • user (SteamUser) – steam user
  • message (str) – message text
persona_state = 1

current persona state

user = None

SteamUser instance once logged on

current_games_played = []

list of app ids currently being played

change_status(**kwargs)

Set name, persona state, flags

Note

Changing persona state will also change persona_state

Parameters:
  • persona_state (EPersonaState) – persona state (Online/Offline/Away/etc)
  • player_name (str) – profile name
  • persona_state_flags (EPersonaStateFlag) – persona state flags
request_persona_state(steam_ids, state_flags=863)

Request persona state data

Parameters:
get_user(steam_id, fetch_persona_state=True)

Get SteamUser instance for steam id

Parameters:
  • steam_id (int, SteamID) – steam id
  • fetch_persona_state (bool) – whether to request person state when necessary
Returns:

SteamUser instance

Return type:

SteamUser

games_played(app_ids)

Set the apps being played by the user

Parameters:app_ids (list) – a list of application ids

These app ids will be recorded in current_games_played.

set_ui_mode(uimode)

Set UI mode. Show little icon next to name in friend list. (e.g phone, controller, other)

Parameters:uimode (EClientUIMode) – UI mode integer

These app ids will be recorded in current_games_played.

Web

Web related features

class steam.client.builtins.web.Web(*args, **kwargs)

Bases: object

get_web_session_cookies()

Get web authentication cookies via WebAPI’s AuthenticateUser

Note

The cookies are valid only while SteamClient instance is logged on.

Returns:dict with authentication cookies
Return type:dict, None
get_web_session(language='english')

Get a requests.Session that is ready for use

See get_web_session_cookies()

Note

Auth cookies will only be send to (help|store).steampowered.com and steamcommunity.com domains

Note

The session is valid only while SteamClient instance is logged on.

Parameters:language (str) – localization language for steam pages
Returns:authenticated Session ready for use
Return type:requests.Session, None
Unified Messages

Methods to call service methods, also known as unified messages

Example code:

# the easy way
response = client.send_um_and_wait('Player.GetGameBadgeLevels#1', {
    'property': 1,
    'something': 'value',
    })

print(response.body)

# the other way
jobid = client.send_um('Player.GetGameBadgeLevels#1', {'something': 1})
response = client.wait_event(jobid)

The backend might error out, but we still get response. Here is how to check for error:

if response.header.eresult != EResult.OK:
    print(response.header.error_message)
class steam.client.builtins.unified_messages.UnifiedMessages(*args, **kwargs)

Bases: object

send_um(method_name, params=None)

Send service method request

Parameters:
  • method_name (str) – method name (e.g. Player.GetGameBadgeLevels#1)
  • params (dict) – message parameters
Returns:

job_id identifier

Return type:

str

Listen for jobid on this object to catch the response.

send_um_and_wait(method_name, params=None, timeout=10, raises=False)

Send service method request and wait for response

Parameters:
  • method_name (str) – method name (e.g. Player.GetGameBadgeLevels#1)
  • params (dict) – message parameters
  • timeout (int) – (optional) seconds to wait
  • raises (bool) – (optional) On timeout if False return None, else raise gevent.Timeout
Returns:

response message

Return type:

proto message instance

Raises:

gevent.Timeout

Leaderboards

Reading the leaderboards with SteamLeaderboard is as easy as iterating over a list.

class steam.client.builtins.leaderboards.Leaderboards(*args, **kwargs)

Bases: object

get_leaderboard(app_id, name)

New in version 0.8.2.

Find a leaderboard

Parameters:
  • app_id (int) – application id
  • name (str) – leaderboard name
Returns:

leaderboard instance

Return type:

SteamLeaderboard

Raises:

LookupError on message timeout or error

class steam.client.builtins.leaderboards.SteamLeaderboard(steam, app_id, name, data=None)

Bases: object

New in version 0.8.2.

Steam leaderboard object. Generated via Leaderboards.get_leaderboard() Works more or less like a list to access entries.

Note

Each slice will produce a message to steam. Steam and protobufs might not like large slices. Avoid accessing individual entries by index and instead use iteration or well sized slices.

Example usage:

lb = client.get_leaderboard(...)

for entry in lb[:100]:  # top 100
    print entry
class ELeaderboardDataRequest

Bases: steam.enums.base.SteamIntEnum

An enumeration.

Friends = 2
Global = 0
GlobalAroundUser = 1
Users = 3
class ELeaderboardSortMethod

Bases: steam.enums.base.SteamIntEnum

An enumeration.

Ascending = 1
Descending = 2
NONE = 0
class ELeaderboardDisplayType

Bases: steam.enums.base.SteamIntEnum

An enumeration.

NONE = 0
Numeric = 1
TimeMilliSeconds = 3
TimeSeconds = 2
name = ''

leaderboard name

id = 0

leaderboard id

entry_count = 0
data_request = 0

steam.enums.common.ELeaderboardDataRequest

app_id = 0
sort_method = 0

steam.enums.common.ELeaderboardSortMethod

display_type = 0

steam.enums.common.ELeaderboardDisplayType

get_entries(start=0, end=0, data_request=None, steam_ids=None)

Get leaderboard entries.

Parameters:
Returns:

a list of entries, see CMsgClientLBSGetLBEntriesResponse

Return type:

list

Raises:

LookupError on message timeout or error

get_iter(times, seconds, chunk_size=2000)

Make a iterator over the entries

See steam.util.throttle.ConstantRateLimit for times and seconds parameters.

Parameters:chunk_size (int) – number of entries per request
Returns:generator object
Return type:generator

The iterator essentially buffers chuck_size number of entries, and ensures we are not sending messages too fast. For example, the __iter__ method on this class uses get_iter(1, 1, 2000)

Game Servers

Listing and information about game servers through Steam

Filters

Note

Multiple filters can be joined to together (Eg. \app\730\white\1\empty\1)

Filter code What it does
\nor\[x] A special filter, specifies that servers matching any of the following [x] conditions should not be returned
\nand\[x] A special filter, specifies that servers matching all of the following [x] conditions should not be returned
\dedicated\1 Servers running dedicated
\secure\1 Servers using anti-cheat technology (VAC, but potentially others as well)
\gamedir\[mod] Servers running the specified modification (ex. cstrike)
\map\[map] Servers running the specified map (ex. cs_italy)
\linux\1 Servers running on a Linux platform
\password\0 Servers that are not password protected
\empty\1 Servers that are not empty
\full\1 Servers that are not full
\proxy\1 Servers that are spectator proxies
\appid\[appid] Servers that are running game [appid]
\napp\[appid] Servers that are NOT running game [appid] (This was introduced to block Left 4 Dead games from the Steam Server Browser)
\noplayers\1 Servers that are empty
\white\1 Servers that are whitelisted
\gametype\[tag,…] Servers with all of the given tag(s) in sv_tags
\gamedata\[tag,…] Servers with all of the given tag(s) in their ‘hidden’ tags (L4D2)
\gamedataor\[tag,…] Servers with any of the given tag(s) in their ‘hidden’ tags (L4D2)
\name_match\[hostname] Servers with their hostname matching [hostname] (can use * as a wildcard)
\version_match\[version] Servers running version [version] (can use * as a wildcard)
\collapse_addr_hash\1 Return only one server for each unique IP address matched
\gameaddr\[ip] Return only servers on the specified IP address (port supported and optional)
class steam.client.builtins.gameservers.GameServers(*args, **kwargs)

Bases: object

gameservers = None

instance of SteamGameServers

class steam.client.builtins.gameservers.SteamGameServers(steam)

Bases: object

query(filter_text, max_servers=10, timeout=30, **kw)

Query game servers

https://developer.valvesoftware.com/wiki/Master_Server_Query_Protocol

Note

When specifying filter_text use raw strings otherwise python won’t treat backslashes as literal characters (e.g. query(r'\appid\730\white\1'))

Parameters:
  • filter_text (str) – filter for servers
  • max_servers (int) – (optional) number of servers to return
  • timeout (int) – (optional) timeout for request in seconds
  • app_id (int) – (optional) app id
  • geo_location_ip (str) – (optional) ip (e.g. ‘1.2.3.4’)
Returns:

list of servers, see below. (None is returned steam doesn’t respond)

Return type:

list, None

Sample response:

[{'auth_players': 0, 'server_ip': '1.2.3.4', 'query_port': 27015},
 {'auth_players': 6, 'server_ip': '1:2:3:4::5', 'query_port': 27016},
 ...
]
get_server_list(filter_text, max_servers=10, timeout=20)

Get list of servers. Works similiarly to query(), but the response has more details.

Parameters:
  • filter_text (str) – filter for servers
  • max_servers (int) – (optional) number of servers to return
  • timeout (int) – (optional) timeout for request in seconds
Returns:

list of servers, see below. (None is returned steam doesn’t respond)

Return type:

list, None

Raises:

SteamError

Sample response:

[{'addr': '1.2.3.4:27067',
  'appid': 730,
  'bots': 0,
  'dedicated': True,
  'gamedir': 'csgo',
  'gameport': 27067,
  'gametype': 'valve_ds,empty,secure',
  'map': 'de_dust2',
  'max_players': 10,
  'name': 'Valve CS:GO Asia Server (srcdsXXX.XXX.XXX)',
  'os': 'l',
  'players': 0,
  'product': 'csgo',
  'region': 5,
  'secure': True,
  'steamid': SteamID(id=3279818759, type='AnonGameServer', universe='Public', instance=7011),
  'version': '1.35.4.0'}
]
get_ips_from_steamids(server_steam_ids, timeout=30)

Resolve IPs from SteamIDs

Parameters:
  • server_steam_ids (list) – a list of steamids
  • timeout (int) – (optional) timeout for request in seconds
Returns:

map of ips to steamids

Return type:

dict

Raises:

SteamError

Sample response:

{SteamID(id=123456, type='AnonGameServer', universe='Public', instance=1234): '1.2.3.4:27060'}
get_steamids_from_ips(server_ips, timeout=30)

Resolve SteamIDs from IPs

Parameters:
  • steam_ids (list) – a list of ips (e.g. ['1.2.3.4:27015',...])
  • timeout (int) – (optional) timeout for request in seconds
Returns:

map of steamids to ips

Return type:

dict

Raises:

SteamError

Sample response:

{'1.2.3.4:27060': SteamID(id=123456, type='AnonGameServer', universe='Public', instance=1234)}
Friends
class steam.client.builtins.friends.Friends(*args, **kwargs)

Bases: object

friends = None

SteamFriendlist instance

class steam.client.builtins.friends.SteamFriendlist(client, logger_name='SteamFriendList')

Bases: eventemitter.EventEmitter

SteamFriendlist is an object that keeps state of user’s friend list. It’s essentially a list of SteamUser. You can iterate over it, check if it contains a particular steam id, or get SteamUser for a steam id.

EVENT_READY = 'ready'

Friend list is ready for use

EVENT_FRIEND_INVITE = 'friend_invite'

New or existing friend invite

Parameters:user (SteamUser) – steam user instance
EVENT_FRIEND_NEW = 'friend_new'

Friendship established (after being accepted, or accepting)

Parameters:user (SteamUser) – steam user instance
EVENT_FRIEND_REMOVED = 'friend_removed'

No longer a friend (removed by either side)

Parameters:user (SteamUser) – steam user instance
EVENT_FRIEND_ADD_RESULT = 'friend_add_result'

Result response after adding a friend

Parameters:
ready = False

indicates whether friend list is ready for use

emit(event, *args)

Emit event with some arguments

Parameters:
  • event (any type) – event identifier
  • args – any or no arguments
add(steamid_or_accountname_or_email)

Add/Accept a steam user to be your friend. When someone sends you an invite, use this method to accept it.

Parameters:steamid_or_accountname_or_email (int, SteamID, SteamUser, str) – steamid, account name, or email

Note

Adding by email doesn’t not work. It’s only mentioned for the sake of completeness.

remove(steamid)

Remove a friend

Parameters:steamid (int, SteamID, SteamUser) – their steamid
block(steamid)

Block Steam user

Parameters:steamid (int, SteamID, SteamUser) – their steamid
Returns:result
Return type:EResult
unblock(steamid)

Unblock Steam user

Parameters:steamid (int, SteamID, SteamUser) – their steamid
Returns:result
Return type:EResult
cdn

The CDNClient class provides a simple API for downloading Steam content from SteamPipe

Initializing CDNClient requires a logged in SteamClient instance

Warning

This module uses requests library, which is not gevent cooperative by default. It is high recommended that you use steam.monkey.patch_minimal(). See example below

Getting depot manifests for an app

>>> mycdn.get_manifests(570)
[<CDNDepotManifest('Dota 2 Content', app_id=570, depot_id=373301, gid=6397590570861788404, creation_time='2019-06-29 16:03:11')>,
 <CDNDepotManifest('Dota 2 Content 2', app_id=570, depot_id=381451, gid=5769691971272474272, creation_time='2019-06-29 00:19:02')>,
 <CDNDepotManifest('Dota 2 Content 3', app_id=570, depot_id=381452, gid=3194393866044592918, creation_time='2019-06-27 00:05:38')>,
 <CDNDepotManifest('Dota 2 Content 4', app_id=570, depot_id=381453, gid=8005824150061180163, creation_time='2019-06-08 07:49:57')>,
 <CDNDepotManifest('Dota 2 Content 5', app_id=570, depot_id=381454, gid=9003299908441378336, creation_time='2019-06-26 18:56:19')>,
 <CDNDepotManifest('Dota 2 Content 6', app_id=570, depot_id=381455, gid=8000458746487720619, creation_time='2019-06-29 00:19:43')>,
 <CDNDepotManifest('Dota 2 Win32', app_id=570, depot_id=373302, gid=3561463682334619841, creation_time='2019-06-29 00:16:28')>,
 <CDNDepotManifest('Dota 2 Win64', app_id=570, depot_id=373303, gid=6464064782313084040, creation_time='2019-06-29 00:16:43')>,
 <CDNDepotManifest('Dota 2 Mac', app_id=570, depot_id=373304, gid=5979018571482579541, creation_time='2019-06-29 00:16:59')>,
 <CDNDepotManifest('Dota 2 English', app_id=570, depot_id=373305, gid=4435851250675935801, creation_time='2015-06-01 20:15:37')>,
 <CDNDepotManifest('Dota 2 Linux', app_id=570, depot_id=373306, gid=4859464855297921815, creation_time='2019-06-29 00:17:25')>,
 <CDNDepotManifest('Dota 2 Korean', app_id=570, depot_id=373308, gid=8598853793233320583, creation_time='2019-03-05 17:16:49')>,
 <CDNDepotManifest('Dota 2 Simplified Chinese', app_id=570, depot_id=373309, gid=6975893321745168138, creation_time='2019-06-25 21:40:37')>,
 <CDNDepotManifest('Dota 2 Russian', app_id=570, depot_id=381456, gid=5425063725991897591, creation_time='2019-03-05 17:19:53')>,
 <CDNDepotManifest('Dota 2 Workshop tools', app_id=570, depot_id=381450, gid=8629205096668418087, creation_time='2019-06-29 16:04:18')>,
 <CDNDepotManifest('Dota 2 OpenGL Windows', app_id=570, depot_id=401531, gid=6502316736107281444, creation_time='2019-06-07 19:04:08')>,
 <CDNDepotManifest('Dota 2 Vulkan Common', app_id=570, depot_id=401535, gid=6405492872419215600, creation_time='2019-06-07 19:04:11')>,
 <CDNDepotManifest('Dota 2 Vulkan Win64', app_id=570, depot_id=401536, gid=3821288251412129608, creation_time='2019-06-25 21:42:29')>,
 <CDNDepotManifest('Dota 2 Vulkan Linux64', app_id=570, depot_id=401537, gid=3144805829218032316, creation_time='2019-06-17 16:54:43')>,
 <CDNDepotManifest('Dota 2 VR', app_id=570, depot_id=313255, gid=706332602567268673, creation_time='2017-10-04 18:52:14')>,
 <CDNDepotManifest('Dota 2 Vulkan Mac', app_id=570, depot_id=401538, gid=2223235822414824351, creation_time='2019-06-11 19:37:19')>]

>>> mycdn.get_manifests(570, filter_func=lambda depot_id, info: 'Dota 2 Content' in info['name'])
[<CDNDepotManifest('Dota 2 Content', app_id=570, depot_id=373301, gid=6397590570861788404, creation_time='2019-06-29 16:03:11')>,
 <CDNDepotManifest('Dota 2 Content 2', app_id=570, depot_id=381451, gid=5769691971272474272, creation_time='2019-06-29 00:19:02')>,
 <CDNDepotManifest('Dota 2 Content 3', app_id=570, depot_id=381452, gid=3194393866044592918, creation_time='2019-06-27 00:05:38')>,
 <CDNDepotManifest('Dota 2 Content 4', app_id=570, depot_id=381453, gid=8005824150061180163, creation_time='2019-06-08 07:49:57')>,
 <CDNDepotManifest('Dota 2 Content 5', app_id=570, depot_id=381454, gid=9003299908441378336, creation_time='2019-06-26 18:56:19')>,
 <CDNDepotManifest('Dota 2 Content 6', app_id=570, depot_id=381455, gid=8000458746487720619, creation_time='2019-06-29 00:19:43')>]

Listing files

>>> file_list = mycdn.iter_files(570)
>>> list(file_list)[:10]
[<CDNDepotFile(570, 373301, 6397590570861788404, 'game\dota_addons\dungeon\particles\test_particle\generic_attack_crit_blur_rope.vpcf_c', 2134)>,
 <CDNDepotFile(570, 373301, 6397590570861788404, 'game\dota_addons\dungeon\materials\blends\mud_brick_normal_psd_5cc4fe8b.vtex_c', 351444)>,
 <CDNDepotFile(570, 373301, 6397590570861788404, 'game\dota_addons\hero_demo\scripts\vscripts\la_spawn_enemy_at_target.lua', 1230)>,
 <CDNDepotFile(570, 373301, 6397590570861788404, 'game\dota_addons\winter_2018\particles\dark_moon\darkmoon_last_hit_effect_damage_flash_b.vpcf_c', 1386)>,
 <CDNDepotFile(570, 373301, 6397590570861788404, 'game\dota_addons\dungeon\scripts\vscripts\abilities\siltbreaker_line_wave.lua', 3305)>,
 <CDNDepotFile(570, 373301, 6397590570861788404, 'game\dota_addons\dungeon\materials\models\heroes\broodmother\broodmother_body_poison.vmat_c', 10888)>,
 <CDNDepotFile(570, 373301, 6397590570861788404, 'game\dota\resource\cursor\workshop\sltv_shaker_cursor_pack\cursor_spell_default.ani', 4362)>,
 <CDNDepotFile(570, 373301, 6397590570861788404, 'game\dota_addons\overthrow\panorama\images\custom_game\team_icons\team_icon_tiger_01_png.vtex_c', 18340)>,
 <CDNDepotFile(570, 373301, 6397590570861788404, 'game\dota\resource\cursor\valve\ti7\cursor_attack_illegal.bmp', 4152)>,
 <CDNDepotFile(570, 373301, 6397590570861788404, 'game\dota_addons\winter_2018\models\creeps\ice_biome\undeadtusk\undead_tuskskeleton01.vmdl_c', 13516)>

Reading a file directly from SteamPipe

>>> file_list = mycdn.iter_files(570, r'game\dota\gameinfo.gi')
>>> myfile = next(file_list)
<CDNDepotFile(570, 373301, 6397590570861788404, 'game\dota\gameinfo.gi', 6808)>
>>> print(myfile.read(80).decode('utf-8'))
"GameInfo"
{
        game            "Dota 2"
        title           "Dota 2"

        gamelogo 1
        type            multiplayer_only
...
class steam.client.cdn.CDNClient(client)

Bases: object

CDNClient allows loading and reading of manifests for Steam apps are used to list and download content

Parameters:client (SteamClient) – logged in SteamClient instance
DepotManifestClass

alias of CDNDepotManifest

app_depots = None

app depot info

beta_passwords = None

beta branch decryption keys

cdn_cmd(command, args)

Run CDN command request

Parameters:
  • command (str) – command name
  • args (str) – args
Returns:

requests response

Return type:

requests.Response

Raises:

SteamError – on error

cell_id = 0

Cell ID to use, initialized from SteamClient instance

check_beta_password(app_id, password)

Check branch beta password to unlock encrypted branches

Parameters:
  • app_id (int) – App ID
  • password (str) – beta password
Returns:

result

Return type:

EResult

clear_cache()

Cleared cached information. Next call on methods with caching will return fresh data

depot_keys = None

depot decryption keys

fetch_content_servers(num_servers=20)

Update CS server list

Parameters:num_servers (int) – numbers of CS server to fetch
get_app_depot_info(app_id)
get_chunk(app_id, depot_id, chunk_id)

Download a single content chunk

Parameters:
  • app_id (int) – App ID
  • depot_id (int) – Depot ID
  • chunk_id (int) – Chunk ID
Returns:

chunk data

Return type:

bytes

Raises:

SteamError – error message

get_content_server(rotate=False)

Get a CS server for content download

Parameters:rotate (bool) – forcefully rotate server list and get a new server
get_depot_key(app_id, depot_id)

Get depot key, which is needed to decrypt files

Parameters:
  • app_id (int) – app id
  • depot_id (int) – depot id
Returns:

returns decryption key

Return type:

bytes

Raises:

SteamError – error message

get_manifest(app_id, depot_id, manifest_gid, decrypt=True, manifest_request_code=0)

Download a manifest file

Parameters:
  • app_id (int) – App ID
  • depot_id (int) – Depot ID
  • manifest_gid (int) – Manifest gid
  • decrypt (bool) – Decrypt manifest filenames
  • manifest_request_code (int) – Manifest request code, authenticates the download
Returns:

manifest instance

Return type:

CDNDepotManifest

get_manifest_for_workshop_item(item_id)

Get the manifest file for a worshop item that is hosted on SteamPipe

Parameters:item_id (int) – Workshop ID
Returns:manifest instance
Return type:CDNDepotManifest
Raises:ManifestError, SteamError
get_manifest_request_code(app_id, depot_id, manifest_gid, branch='public', branch_password_hash=None)

Get manifest request code for authenticating manifest download

Parameters:
  • app_id (int) – App ID
  • depot_id (int) – Depot ID
  • manifest_gid (int) – Manifest gid
  • branch (str) – (optional) branch name
  • branch_password_hash (str) – (optional) branch password hash
Returns:

manifest request code

Return type:

int

get_manifests(app_id, branch='public', password=None, filter_func=None, decrypt=True)

Get a list of CDNDepotManifest for app

Parameters:
  • app_id (int) – App ID
  • branch (str) – branch name
  • password (str) – branch password for locked branches
  • filter_func – Function to filter depots. func(depot_id, depot_info)
Returns:

list of CDNDepotManifest

Return type:

list [CDNDepotManifest]

Raises:

ManifestError, SteamError

gpool = None

task pool

has_license_for_depot(depot_id)

Check if there is license for depot

Parameters:depot_id (int) – depot ID
Returns:True if we have license
Return type:bool
iter_files(app_id, filename_filter=None, branch='public', password=None, filter_func=None)

Like get_manifests() but returns a iterator that goes through all the files in all the manifest.

Parameters:
  • app_id (int) – App ID
  • filename_filter – wildcard filter for file paths
  • branch (str) – branch name
  • password (str) – branch password for locked branches
  • filter_func – Function to filter depots. func(depot_id, depot_info)
Returns:

generator of of CDN files

Return type:

[CDNDepotFile]

licensed_app_ids = None

app_ids that the SteamClient instance has access to

licensed_depot_ids = None

depot_ids that the SteamClient instance has access to

load_licenses()

Read licenses from SteamClient instance, required for determining accessible content

manifests = None

CDNDepotManifest instances

servers = deque([])

CS Server list

steam = None

SteamClient instance

class steam.client.cdn.CDNDepotFile(manifest, file_mapping)

Bases: steam.core.manifest.DepotFile

File-like object proxy for content files located on SteamPipe

Parameters:
  • manifest (CDNDepotManifest) – parrent manifest instance
  • file_mapping (ContentManifestPayload.FileMapping) – file mapping instance from manifest
chunks

File chunks instances

Type:list [ContentManifestPayload.FileMapping.ChunkData]
filename

Filename matching the OS

Type:str
filename_raw

Filename with null terminator and whitespaces removed

Type:str
flags

File flags

Type:EDepotFileFlag
is_directory
Type:bool
is_executable
Type:bool
is_file
Type:bool
Type:bool
linktarget

Link target matching the OS

Type:str
linktarget_raw

Link target with null terminator and whitespaces removed

Type:str
next()
read(length=-1)

Read bytes from the file

Parameters:length (int) – number of bytes to read. Read the whole file if not set
Returns:file data
Return type:bytes
readline()

Read a single line

Returns:single file line
Return type:bytes
readlines()

Get file contents as list of lines

Returns:list of lines
Return type:list [bytes]
seek(offset, whence=0)

Seen file

Parameters:
seekable
Type:bool
size

File size in bytes

Type:int
tell()
Type:int
class steam.client.cdn.CDNDepotManifest(cdn_client, app_id, data)

Bases: steam.core.manifest.DepotManifest

Holds manifest metadata and file list.

Parameters:
  • cdn_client (CDNClient) – CDNClient instance
  • app_id (int) – App ID
  • data (bytes) – serialized manifest data
DepotFileClass

alias of CDNDepotFile

PROTOBUF_ENDOFMANIFEST_MAGIC = 851711403
PROTOBUF_METADATA_MAGIC = 524817086
PROTOBUF_PAYLOAD_MAGIC = 1911953360
PROTOBUF_SIGNATURE_MAGIC = 461486103
creation_time
Type:int
decrypt_filenames(depot_key)

Decrypt all filenames in the manifest

Parameters:depot_key (bytes) – depot key
Raises:RuntimeError
depot_id
Type:int
deserialize(data)

Deserialize a manifest (compressed or uncompressed)

Parameters:data (bytes) – manifest data
filenames_encrypted
Type:bool
gid
Type:int
iter_files(pattern=None)
Parameters:pattern (str) – unix shell wildcard pattern, see fnmatch()
name = None

set only by CDNClient.get_manifests()

serialize(compress=True)

Serialize manifest

Parameters:compress (bytes) – wether the output should be Zip compressed
size_compressed
Type:int
size_original
Type:int
class steam.client.cdn.ContentServer

Bases: object

cell_id = 0
host = None
https = False
load = None
port = None
type = None
vhost = None
weighted_load = None
steam.client.cdn.decrypt_manifest_gid_2(encrypted_gid, password)

Decrypt manifest gid v2 bytes

Parameters:
  • encrypted_gid (bytes) – encrypted gid v2 bytes
  • password (byt) – encryption password
Returns:

manifest gid

Return type:

int

steam.client.cdn.get_content_servers_from_cs(cell_id, host='cs.steamcontent.com', port=80, num_servers=20, session=None)

Get a list of CS servers from a single CS server

Parameters:
  • cell_id (bytes) – location cell id
  • host (str) – CS server host
  • port (int) – server port number
  • num_servers (int) – number of servers to return
  • session (requests.Session) – requests Session instance
Returns:

list of CS servers

Return type:

list [ContentServer]

steam.client.cdn.get_content_servers_from_webapi(cell_id, num_servers=20)

Get a list of CS servers from Steam WebAPI

Parameters:
  • cell_id (bytes) – location cell id
  • num_servers (int) – number of servers to return
Returns:

list of CS servers

Return type:

list [ContentServer]

gc

GameCoordinator is used to proxy messages from/to GC. It takes care of the encapsulation details, but on its own is not enough to communicate with a given GC.

Example implementation of Dota 2 GC client with inheritance.

import myDotaModule
from steam.client import SteamClient
from steam.core.msg import GCMsgHdrProto
from steam.client.gc import GameCoordinator

class ExampleDotaClient(GameCoordinator):
    def __init__(self, steam):
        GameCoordinator.__init__(self, steam, 570)

    def _process_gc_message(self, emsg, header, body):
        if emsg == 4004: # EMsgGCClientWelcome
            message = myDotaModule.gcsdk_gcmessages_pb2.CMsgClientWelcome()
            message.ParseFromString(body)
            print message

    def send_hello(self):
        header = GCMsgHdrProto(4006)  # EMsgGCClientHello
        body = myDotaModule.gcsdk_gcmessages_pb2.CMsgClientHello()
        self.send(header, body.SerializeToString())

client = SteamClient()
dota = ExampleDotaClient(client)

client.login()
client.games_played([570])
dota.send_hello()

The above code assumes that we have a myDotaModule that contains the appropriate protobufs needed to (de)serialize message for communication with GC.

class steam.client.gc.GameCoordinator(steam_client, app_id)

Bases: eventemitter.EventEmitter

GameCoordinator is used to proxy messages from/to GC

Parameters:

Incoming messages are emitted as events using their EMsg as an event identifier.

Parameters:
  • header (steam.core.msg.GCMsgHdr) – message header
  • body (bytes) – raw message body
emit(event, *args)

Emit event with some arguments

Parameters:
  • event (any type) – event identifier
  • args – any or no arguments
send(header, body)

Send a message to GC

Parameters:
  • header (steam.core.msg.GCMsgHdr) – message header
  • body (bytes) – serialized body of the message
user
class steam.client.user.SteamUser(steam_id, steam)

Bases: object

A data model for a Steam user. Holds user persona state, and related actions

Note

This is an internal object that can be obtained by SteamClient.get_user()

relationship = 0

friendship status

steam_id = SteamID(id=0, type='Invalid', universe='Invalid', instance=0)

steam id

get_ps(field_name, wait_pstate=True)

Get property from PersonaState

See full list of available fields_names

last_logon
Return type:datetime, None
last_logoff
Return type:datetime, None
name

Name of the steam user, or None if it’s not available

Return type:str, None
state

Personsa state (e.g. Online, Offline, Away, Busy, etc)

Return type:EPersonaState
rich_presence

Contains Rich Presence key-values

Return type:dict
get_avatar_url(size=2)

Get URL to avatar picture

Parameters:size (int) – possible values are 0, 1, or 2 corresponding to small, medium, large
Returns:url to avatar
Return type:str
send_message(message)

Send chat message to this steam user

Parameters:message (str) – message to send
block()

Block user

unblock()

Unblock user

core

cm
class steam.core.cm.CMClient(protocol=0)

Bases: eventemitter.EventEmitter

CMClient provides a secure message channel to Steam CM servers Can be used as mixing or on it’s own.

Incoming messages are parsed and emitted as events using their steam.enums.emsg.EMsg as event identifier

EVENT_CONNECTED = 'connected'

Connection establed to CM server

EVENT_DISCONNECTED = 'disconnected'

Connection closed

EVENT_RECONNECT = 'reconnect'

Delayed connect

Parameters:delay (int) – delay in seconds
EVENT_CHANNEL_SECURED = 'channel_secured'

After successful completion of encryption handshake

EVENT_ERROR = 'error'

When login is denied

Parameters:eresult (EResult) – reason
EVENT_EMSG = 0

All incoming messages are emitted with their EMsg number.

PROTOCOL_TCP = 0

TCP protocol enum

PROTOCOL_UDP = 1

UDP protocol enum

verbose_debug = False

print message connects in debug

auto_discovery = True

enables automatic CM discovery

current_server_addr = None

(ip, port) tuple

connected = False

True if connected to CM

channel_secured = False

True once secure channel handshake is complete

channel_key = None

channel encryption key

channel_hmac = None

HMAC secret

steam_id = SteamID(id=0, type='Invalid', universe='Invalid', instance=0)

SteamID of the current user

session_id = None

session id when logged in

cell_id = 0

cell id provided by CM

cm_servers = None

a instance of CMServerList

emit(event, *args)

Emit event with some arguments

Parameters:
  • event (any type) – event identifier
  • args – any or no arguments
connect(retry=0, delay=0)

Initiate connection to CM. Blocks until connected unless retry is specified.

Parameters:
  • retry (int) – number of retries before returning. Unlimited when set to None
  • delay (int) – delay in seconds before connection attempt
Returns:

successful connection

Return type:

bool

disconnect()

Close connection

send(message)

Send a message

Parameters:message (steam.core.msg.Msg, steam.core.msg.MsgProto) – a message instance
sleep(seconds)

Yeild and sleep N seconds. Allows other greenlets to run

idle()

Yeild in the current greenlet and let other greenlets run

class steam.core.cm.CMServerList

Bases: object

Managing object for CM servers

Comes with built in list of CM server to bootstrap a connection

To get a server address from the list simply iterate over it

servers = CMServerList()
for server_addr in servers:
    pass

The good servers are returned first, then bad ones. After failing to connect call mark_bad() with the server addr. When connection succeeds break out of the loop.

Good = 1
Bad = 2
last_updated = 0

timestamp of when the list was last updated

cell_id = 0

cell id of the server list

bad_timestamp = 300

how long bad mark lasts in seconds

clear()

Clears the server list

bootstrap_from_dns()

Fetches CM server list from WebAPI and replaces the current one

bootstrap_from_webapi(cell_id=0)

Fetches CM server list from WebAPI and replaces the current one

Parameters:cellid (int) – cell id (0 = global)
Returns:booststrap success
Return type:bool
reset_all()

Reset status for all servers in the list

mark_good(server_addr)

Mark server address as good

Parameters:server_addr (tuple) – (ip, port) tuple
mark_bad(server_addr)

Mark server address as bad, when unable to connect for example

Parameters:server_addr (tuple) – (ip, port) tuple
merge_list(new_list)

Add new CM servers to the list

Parameters:new_list (list) – a list of (ip, port) tuples
connection
class steam.core.connection.Connection

Bases: object

MAGIC = b'VT01'
FMT = '<I4s'
FMT_SIZE = 8
local_address
connect(server_addr)
disconnect()
put_message(message)
class steam.core.connection.TCPConnection

Bases: steam.core.connection.Connection

class steam.core.connection.UDPConnection

Bases: steam.core.connection.Connection

crypto

All function in this module take and return bytes

class steam.core.crypto.UniverseKey

Public keys for Universes

Public = RsaKey(n=157243575616349276747301754768309867177831122156025923746844676060406588352107224217333901959919174986455773957425614730531751228977954133934190386306482548943067736608585548911467384424773932642576067292137056263003121836768211312089498275802694267916711103128551999842076575732754013467986241640244933837449, e=17)
steam.core.crypto.pad(s)
steam.core.crypto.unpad(s)
steam.core.crypto.generate_session_key(hmac_secret=b'')
Parameters:hmac_secret (bytes) – optional HMAC
Returns:(session_key, encrypted_session_key) tuple
Return type:tuple
steam.core.crypto.symmetric_encrypt(message, key)
steam.core.crypto.symmetric_encrypt_ecb(message, key)
steam.core.crypto.symmetric_encrypt_HMAC(message, key, hmac_secret)
steam.core.crypto.symmetric_encrypt_iv(iv, key)
steam.core.crypto.symmetric_encrypt_with_iv(message, key, iv)
steam.core.crypto.symmetric_decrypt(cyphertext, key)
steam.core.crypto.symmetric_decrypt_ecb(cyphertext, key)
steam.core.crypto.symmetric_decrypt_HMAC(cyphertext, key, hmac_secret)
Raises:RuntimeError when HMAC verification fails
steam.core.crypto.symmetric_decrypt_iv(cyphertext, key)
steam.core.crypto.symmetric_decrypt_with_iv(cyphertext, key, iv)
steam.core.crypto.hmac_sha1(secret, data)
steam.core.crypto.sha1_hash(data)
steam.core.crypto.md5_hash(data)
steam.core.crypto.rsa_publickey(mod, exp)
steam.core.crypto.pkcs1v15_encrypt(key, message)
manifest
class steam.core.manifest.DepotFile(manifest, file_mapping)

Bases: object

Depot file

Parameters:
  • manifest (DepotManifest) – depot manifest
  • file_mapping (ContentManifestPayload.FileMapping) – depot file mapping instance
filename_raw

Filename with null terminator and whitespaces removed

Type:str
filename

Filename matching the OS

Type:str
linktarget_raw

Link target with null terminator and whitespaces removed

Type:str
linktarget

Link target matching the OS

Type:str
size

File size in bytes

Type:int
chunks

File chunks instances

Type:list [ContentManifestPayload.FileMapping.ChunkData]
flags

File flags

Type:EDepotFileFlag
is_directory
Type:bool
Type:bool
is_file
Type:bool
is_executable
Type:bool
class steam.core.manifest.DepotManifest(data=None)

Bases: object

Represents depot manifest

Parameters:data (bytes) – manifest data
DepotFileClass

alias of DepotFile

PROTOBUF_PAYLOAD_MAGIC = 1911953360
PROTOBUF_METADATA_MAGIC = 524817086
PROTOBUF_SIGNATURE_MAGIC = 461486103
PROTOBUF_ENDOFMANIFEST_MAGIC = 851711403
depot_id
Type:int
gid
Type:int
creation_time
Type:int
size_original
Type:int
size_compressed
Type:int
filenames_encrypted
Type:bool
decrypt_filenames(depot_key)

Decrypt all filenames in the manifest

Parameters:depot_key (bytes) – depot key
Raises:RuntimeError
deserialize(data)

Deserialize a manifest (compressed or uncompressed)

Parameters:data (bytes) – manifest data
serialize(compress=True)

Serialize manifest

Parameters:compress (bytes) – wether the output should be Zip compressed
iter_files(pattern=None)
Parameters:pattern (str) – unix shell wildcard pattern, see fnmatch()
msg
steam.core.msg.get_cmsg(emsg)

Get protobuf for a given EMsg

Parameters:emsg (steam.enums.emsg.EMsg, int) – EMsg
Returns:protobuf message
class steam.core.msg.Msg(msg, data=None, extended=False, parse=True)

Bases: object

proto = False
body = None

message instance

payload = None

Will contain body payload, if we fail to find correct message class

parse()

Parses payload into body instance

msg
serialize()
steamID
sessionID
class steam.core.msg.MsgProto(msg, data=None, parse=True)

Bases: object

proto = True
body = None

protobuf message instance

payload = None

Will contain body payload, if we fail to find correct proto message

parse()

Parses payload into body instance

msg
serialize()
steamID
sessionID

enums

This module contains various value enumerations.

They are all based on IntEnum, which gives them int properties. They can be compared to int and used in places there int is required. Like for example, protobuf message. They also provide a easy way to resolve a name or value for a specific enum.

>>> EResult.OK
<EResult.OK: 1>
>>> EResult(1)
<EResult.OK: 1>
>>> EResult['OK']
<EResult.OK: 1>
>>> EResult.OK == 1
True

Note

all enums from steam.enum.common can be imported directly from steam.enum

enums.common
class steam.enums.common.EResult

Doc: https://partner.steamgames.com/doc/api/steam_api#EResult

Invalid = 0
OK = 1

success

Fail = 2

generic failure

NoConnection = 3

no/failed network connection

InvalidPassword = 5

password/ticket is invalid

LoggedInElsewhere = 6

same user logged in elsewhere

InvalidProtocolVer = 7

protocol version is incorrect

InvalidParam = 8

a parameter is incorrect

FileNotFound = 9

file was not found

Busy = 10

called method busy - action not taken

InvalidState = 11

called object was in an invalid state

InvalidName = 12

name is invalid

InvalidEmail = 13

email is invalid

DuplicateName = 14

name is not unique

AccessDenied = 15

access is denied

Timeout = 16

operation timed out

Banned = 17

VAC2 banned

AccountNotFound = 18

account not found

InvalidSteamID = 19

steamID is invalid

ServiceUnavailable = 20

The requested service is currently unavailable

NotLoggedOn = 21

The user is not logged on

Pending = 22

Request is pending (may be in process, or waiting on third party)

EncryptionFailure = 23

Encryption or Decryption failed

InsufficientPrivilege = 24

Insufficient privilege

LimitExceeded = 25

Too much of a good thing

Revoked = 26

Access has been revoked (used for revoked guest passes)

Expired = 27

License/Guest pass the user is trying to access is expired

AlreadyRedeemed = 28

Guest pass has already been redeemed by account, cannot be acked again

DuplicateRequest = 29

The request is a duplicate and the action has already occurred in the past, ignored this time

AlreadyOwned = 30

All the games in this guest pass redemption request are already owned by the user

IPNotFound = 31

IP address not found

PersistFailed = 32

failed to write change to the data store

LockingFailed = 33

failed to acquire access lock for this operation

LogonSessionReplaced = 34
ConnectFailed = 35
HandshakeFailed = 36
IOFailure = 37
RemoteDisconnect = 38
ShoppingCartNotFound = 39

failed to find the shopping cart requested

Blocked = 40

a user didn’t allow it

Ignored = 41

target is ignoring sender

NoMatch = 42

nothing matching the request found

AccountDisabled = 43
ServiceReadOnly = 44

this service is not accepting content changes right now

AccountNotFeatured = 45

account doesn’t have value, so this feature isn’t available

AdministratorOK = 46

allowed to take this action, but only because requester is admin

ContentVersion = 47

A Version mismatch in content transmitted within the Steam protocol.

TryAnotherCM = 48

The current CM can’t service the user making a request, user should try another.

PasswordRequiredToKickSession = 49

You are already logged in elsewhere, this cached credential login has failed.

AlreadyLoggedInElsewhere = 50

You are already logged in elsewhere, you must wait

Suspended = 51

Long running operation (content download) suspended/paused

Cancelled = 52

Operation canceled (typically by user: content download)

DataCorruption = 53

Operation canceled because data is ill formed or unrecoverable

DiskFull = 54

Operation canceled - not enough disk space.

RemoteCallFailed = 55

an remote call or IPC call failed

PasswordUnset = 56

Password could not be verified as it’s unset server side

ExternalAccountUnlinked = 57

External account (PSN, Facebook…) is not linked to a Steam account

PSNTicketInvalid = 58

PSN ticket was invalid

ExternalAccountAlreadyLinked = 59

External account (PSN, Facebook…) is already linked to some other account, must explicitly request to replace/delete the link first

RemoteFileConflict = 60

The sync cannot resume due to a conflict between the local and remote files

IllegalPassword = 61

The requested new password is not legal

SameAsPreviousValue = 62

new value is the same as the old one ( secret question and answer )

AccountLogonDenied = 63

account login denied due to 2nd factor authentication failure

CannotUseOldPassword = 64

The requested new password is not legal

InvalidLoginAuthCode = 65

account login denied due to auth code invalid

AccountLogonDeniedNoMail = 66

account login denied due to 2nd factor auth failure - and no mail has been sent

HardwareNotCapableOfIPT = 67
IPTInitError = 68
ParentalControlRestricted = 69

operation failed due to parental control restrictions for current user

FacebookQueryError = 70

Facebook query returned an error

ExpiredLoginAuthCode = 71

account login denied due to auth code expired

IPLoginRestrictionFailed = 72
AccountLockedDown = 73
AccountLogonDeniedVerifiedEmailRequired = 74
NoMatchingURL = 75
BadResponse = 76

parse failure, missing field, etc.

RequirePasswordReEntry = 77

The user cannot complete the action until they re-enter their password

ValueOutOfRange = 78

the value entered is outside the acceptable range

UnexpectedError = 79

something happened that we didn’t expect to ever happen

Disabled = 80

The requested service has been configured to be unavailable

InvalidCEGSubmission = 81

The set of files submitted to the CEG server are not valid !

RestrictedDevice = 82

The device being used is not allowed to perform this action

RegionLocked = 83

The action could not be complete because it is region restricted

RateLimitExceeded = 84

Temporary rate limit exceeded, try again later, different from k_EResultLimitExceeded which may be permanent

AccountLoginDeniedNeedTwoFactor = 85

Need two-factor code to login

ItemDeleted = 86

The thing we’re trying to access has been deleted

AccountLoginDeniedThrottle = 87

login attempt failed, try to throttle response to possible attacker

TwoFactorCodeMismatch = 88

two factor code mismatch

TwoFactorActivationCodeMismatch = 89

activation code for two-factor didn’t match

AccountAssociatedToMultiplePartners = 90

account has been associated with multiple partners

NotModified = 91

data not modified

NoMobileDevice = 92

the account does not have a mobile device associated with it

TimeNotSynced = 93

the time presented is out of range or tolerance

SMSCodeFailed = 94

SMS code failure (no match, none pending, etc.)

AccountLimitExceeded = 95

Too many accounts access this resource

AccountActivityLimitExceeded = 96

Too many changes to this account

PhoneActivityLimitExceeded = 97

Too many changes to this phone

RefundToWallet = 98

Cannot refund to payment method, must use wallet

EmailSendFailure = 99

Cannot send an email

NotSettled = 100

Can’t perform operation till payment has settled

NeedCaptcha = 101

Needs to provide a valid captcha

GSLTDenied = 102

a game server login token owned by this token’s owner has been banned

GSOwnerDenied = 103

game server owner is denied for other reason (account lock, community ban, vac ban, missing phone)

InvalidItemType = 104

the type of thing we were requested to act on is invalid

IPBanned = 105

the ip address has been banned from taking this action

GSLTExpired = 106

this token has expired from disuse; can be reset for use

InsufficientFunds = 107

user doesn’t have enough wallet funds to complete the action

TooManyPending = 108

There are too many of this thing pending already

NoSiteLicensesFound = 109

No site licenses found

WGNetworkSendExceeded = 110

the WG couldn’t send a response because we exceeded max network send size

AccountNotFriends = 111
LimitedUserAccount = 112
CantRemoveItem = 113
AccountHasBeenDeleted = 114
AccountHasAnExistingUserCancelledLicense = 115
class steam.enums.common.EUniverse

Doc: https://partner.steamgames.com/doc/api/steam_api#EUniverse

Invalid = 0
Public = 1
Beta = 2
Internal = 3
Dev = 4
Max = 6
class steam.enums.common.EType

Doc: https://partner.steamgames.com/doc/api/steam_api#EAccountType

Invalid = 0

Used for invalid Steam IDs

Individual = 1

single user account

Multiseat = 2

multiseat (e.g. cybercafe) account

GameServer = 3

game server account

AnonGameServer = 4

anonymous game server account

Pending = 5

pending

ContentServer = 6

content server

Clan = 7

Steam Group (clan)

Chat = 8

Steam group chat or lobby

ConsoleUser = 9

Fake SteamID for local PSN account on PS3 or Live account on 360, etc

AnonUser = 10

Anonymous user account. (Used to create an account or reset a password)

Max = 11
class steam.enums.common.EInstanceFlag

An enumeration.

MMSLobby = 131072
Lobby = 262144
Clan = 524288
class steam.enums.common.EVanityUrlType

An enumeration.

Individual = 1
Group = 2
GameGroup = 3
class steam.enums.common.EServerType

An enumeration.

Other_Util = -2
Other_Client = -3
Other_CServer = -4
Other_CEconBase = -5
Invalid = -1
Shell = 0
GM = 1
BUM = 2
AM = 3
BS = 4
VS = 5
ATS = 6
CM = 7
FBS = 8
BoxMonitor = 9
SS = 10
DRMS = 11
HubOBSOLETE = 12
Console = 13
PICS = 14
Client = 15
contentstats = 16
DP = 17
WG = 18
SM = 19
SLC = 20
UFS = 21
Util = 23
DSS = 24
Community = 24
P2PRelayOBSOLETE = 25
AppInformation = 26
Spare = 27
FTS = 28
SiteLicense = 29
PS = 30
IS = 31
CCS = 32
DFS = 33
LBS = 34
MDS = 35
CS = 36
GC = 37
NS = 38
OGS = 39
WebAPI = 40
UDS = 41
MMS = 42
GMS = 43
KGS = 44
UCM = 45
RM = 46
FS = 47
Econ = 48
Backpack = 49
UGS = 50
StoreFeature = 51
MoneyStats = 52
CRE = 53
UMQ = 54
Workshop = 55
BRP = 56
GCH = 57
MPAS = 58
Trade = 59
Secrets = 60
Logsink = 61
Market = 62
Quest = 63
WDS = 64
ACS = 65
PNP = 66
TaxForm = 67
ExternalMonitor = 68
Parental = 69
PartnerUpload = 70
Partner = 71
ES = 72
DepotWebContent = 73
ExternalConfig = 74
GameNotifications = 75
MarketRepl = 76
MarketSearch = 77
Localization = 78
Steam2Emulator = 79
PublicTest = 80
SolrMgr = 81
BroadcastIngester = 82
BroadcastDirectory = 83
VideoManager = 84
TradeOffer = 85
BroadcastChat = 86
Phone = 87
AccountScore = 88
Support = 89
LogRequest = 90
LogWorker = 91
EmailDelivery = 92
InventoryManagement = 93
Auth = 94
StoreCatalog = 95
HLTVRelay = 96
IDLS = 97
Perf = 98
ItemInventory = 99
Watchdog = 100
AccountHistory = 101
Chat = 102
Shader = 103
AccountHardware = 104
WebRTC = 105
Giveaway = 106
ChatRoom = 107
VoiceChat = 108
QMS = 109
Trust = 110
TimeMachine = 111
VACDBMaster = 112
ContentServerConfig = 113
Minigame = 114
MLTrain = 115
VACTest = 116
TaxService = 117
MLInference = 118
UGSAggregate = 119
TURN = 120
RemoteClient = 121
BroadcastOrigin = 122
BroadcastChannel = 123
SteamAR = 124
China = 125
CrashDump = 126
Max = 127
class steam.enums.common.EOSType

An enumeration.

Unknown = -1
Web = -700
IOSUnknown = -600
IOS1 = -599
IOS2 = -598
IOS3 = -597
IOS4 = -596
IOS5 = -595
IOS6 = -594
IOS6_1 = -593
IOS7 = -592
IOS7_1 = -591
IOS8 = -590
IOS8_1 = -589
IOS8_2 = -588
IOS8_3 = -587
IOS8_4 = -586
IOS9 = -585
IOS9_1 = -584
IOS9_2 = -583
IOS9_3 = -582
IOS10 = -581
IOS10_1 = -580
IOS10_2 = -579
IOS10_3 = -578
IOS11 = -577
IOS11_1 = -576
IOS11_2 = -575
IOS11_3 = -574
IOS11_4 = -573
IOS12 = -572
IOS12_1 = -571
AndroidUnknown = -500
Android6 = -499
Android7 = -498
Android8 = -497
Android9 = -496
UMQ = -400
PS3 = -300
MacOSUnknown = -102
MacOS104 = -101
MacOS105 = -100
MacOS1058 = -99
MacOS106 = -95
MacOS1063 = -94
MacOS1064_slgu = -93
MacOS1067 = -92
MacOS107 = -90
MacOS108 = -89
MacOS109 = -88
MacOS1010 = -87
MacOS1011 = -86
MacOS1012 = -85
Macos1013 = -84
Macos1014 = -83
Macos1015 = -82
MacOSMax = -1
LinuxUnknown = -203
Linux22 = -202
Linux24 = -201
Linux26 = -200
Linux32 = -199
Linux35 = -198
Linux36 = -197
Linux310 = -196
Linux316 = -195
Linux318 = -194
Linux3x = -193
Linux4x = -192
Linux41 = -191
Linux44 = -190
Linux49 = -189
Linux414 = -188
Linux419 = -187
Linux5x = -186
LinuxMax = -101
WinUnknown = 0
Win311 = 1
Win95 = 2
Win98 = 3
WinME = 4
WinNT = 5
Win2000 = 6
WinXP = 7
Win2003 = 8
WinVista = 9
Windows7 = 10
Win2008 = 11
Win2012 = 12
Windows8 = 13
Windows81 = 14
Win2012R2 = 15
Windows10 = 16
Win2016 = 17
WinMAX = 18
Max = 26
class steam.enums.common.EFriendRelationship

An enumeration.

NONE = 0
Blocked = 1
RequestRecipient = 2
Friend = 3
RequestInitiator = 4
Ignored = 5
IgnoredFriend = 6
SuggestedFriend_DEPRECATED = 7
Max = 8
class steam.enums.common.EAccountFlags

An enumeration.

NormalUser = 0
PersonaNameSet = 1
Unbannable = 2
PasswordSet = 4
Support = 8
Admin = 16
Supervisor = 32
AppEditor = 64
HWIDSet = 128
PersonalQASet = 256
VacBeta = 512
Debug = 1024
Disabled = 2048
LimitedUser = 4096
LimitedUserForce = 8192
EmailValidated = 16384
MarketingTreatment = 32768
OGGInviteOptOut = 65536
ForcePasswordChange = 131072
ForceEmailVerification = 262144
LogonExtraSecurity = 524288
LogonExtraSecurityDisabled = 1048576
Steam2MigrationComplete = 2097152
NeedLogs = 4194304
Lockdown = 8388608
MasterAppEditor = 16777216
BannedFromWebAPI = 33554432
ClansOnlyFromFriends = 67108864
GlobalModerator = 134217728
ParentalSettings = 268435456
ThirdPartySupport = 536870912
NeedsSSANextSteamLogon = 1073741824
class steam.enums.common.EFriendFlags

An enumeration.

NONE = 0
Blocked = 1
FriendshipRequested = 2
Immediate = 4
ClanMember = 8
OnGameServer = 16
RequestingFriendship = 128
RequestingInfo = 256
Ignored = 512
IgnoredFriend = 1024
Suggested = 2048
ChatMember = 4096
FlagAll = 65535
class steam.enums.common.EPersonaState

An enumeration.

Offline = 0
Online = 1
Busy = 2
Away = 3
Snooze = 4
LookingToTrade = 5
LookingToPlay = 6
Invisible = 7
Max = 8
class steam.enums.common.EPersonaStateFlag

An enumeration.

HasRichPresence = 1
InJoinableGame = 2
Golden = 4
RemotePlayTogether = 8
ClientTypeWeb = 256
ClientTypeMobile = 512
ClientTypeTenfoot = 1024
ClientTypeVR = 2048
LaunchTypeGamepad = 4096
LaunchTypeCompatTool = 8192
class steam.enums.common.EClientPersonaStateFlag

An enumeration.

Status = 1
PlayerName = 2
QueryPort = 4
SourceID = 8
Presence = 16
Metadata = 32
LastSeen = 64
ClanInfo = 128
GameExtraInfo = 256
GameDataBlob = 512
ClanTag = 1024
Facebook = 2048
RichPresence = 4096
Broadcast = 8192
Watching = 16384
class steam.enums.common.ELeaderboardDataRequest

An enumeration.

Global = 0
GlobalAroundUser = 1
Friends = 2
Users = 3
class steam.enums.common.ELeaderboardSortMethod

An enumeration.

NONE = 0
Ascending = 1
Descending = 2
class steam.enums.common.ELeaderboardDisplayType

An enumeration.

NONE = 0
Numeric = 1
TimeSeconds = 2
TimeMilliSeconds = 3
class steam.enums.common.ELeaderboardUploadScoreMethod

An enumeration.

NONE = 0
KeepBest = 1
ForceUpdate = 2
class steam.enums.common.ETwoFactorTokenType

An enumeration.

NONE = 0
ValveMobileApp = 1
ThirdParty = 2
class steam.enums.common.EChatEntryType

Doc: https://partner.steamgames.com/doc/api/steam_api#EChatEntryType

Invalid = 0
ChatMsg = 1

Normal text message from another user

Typing = 2

Another user is typing (not used in multi-user chat)

InviteGame = 3

Invite from other user into that users current game

Emote = 4

text emote message (deprecated, should be treated as ChatMsg)

LobbyGameStart = 5

lobby game is starting (dead - listen for LobbyGameCreated_t callback instead)

LeftConversation = 6

user has left the conversation ( closed chat window )

Entered = 7

user has entered the conversation (used in multi-user chat and group chat)

WasKicked = 8

user was kicked (data: 64-bit steamid of actor performing the kick)

WasBanned = 9

user was banned (data: 64-bit steamid of actor performing the ban)

Disconnected = 10

user disconnected

HistoricalChat = 11

a chat message from user’s chat history or offilne message

Reserved1 = 12

No longer used

Reserved2 = 13

No longer used

LinkBlocked = 14

a link was removed by the chat filter.

class steam.enums.common.EChatRoomEnterResponse

Doc: https://partner.steamgames.com/doc/api/steam_api#EChatRoomEnterResponse

Success = 1

Success

DoesntExist = 2

Chat doesn’t exist (probably closed)

NotAllowed = 3

General Denied - You don’t have the permissions needed to join the chat

Full = 4

Chat room has reached its maximum size

Error = 5

Unexpected Error

Banned = 6

You are banned from this chat room and may not join

Limited = 7

Joining this chat is not allowed because you are a limited user (no value on account)

ClanDisabled = 8

Attempt to join a clan chat when the clan is locked or disabled

CommunityBan = 9

Attempt to join a chat when the user has a community lock on their account

MemberBlockedYou = 10

Join failed - some member in the chat has blocked you from joining

YouBlockedMember = 11

Join failed - you have blocked some member already in the chat

NoRankingDataLobby = 12

No longer used

NoRankingDataUser = 13

No longer used

RankOutOfRange = 14

No longer used

RatelimitExceeded = 15

Join failed - to many join attempts in a very short period of time

class steam.enums.common.ECurrencyCode

An enumeration.

Invalid = 0
USD = 1
GBP = 2
EUR = 3
CHF = 4
RUB = 5
PLN = 6
BRL = 7
JPY = 8
NOK = 9
IDR = 10
MYR = 11
PHP = 12
SGD = 13
THB = 14
VND = 15
KRW = 16
TRY = 17
UAH = 18
MXN = 19
CAD = 20
AUD = 21
NZD = 22
CNY = 23
INR = 24
CLP = 25
PEN = 26
COP = 27
ZAR = 28
HKD = 29
TWD = 30
SAR = 31
AED = 32
SEK = 33
ARS = 34
ILS = 35
BYN = 36
KZT = 37
KWD = 38
QAR = 39
CRC = 40
UYU = 41
Max = 42
class steam.enums.common.EDepotFileFlag

An enumeration.

UserConfig = 1
VersionedUserConfig = 2
Encrypted = 4
ReadOnly = 8
Hidden = 16
Executable = 32
Directory = 64
CustomExecutable = 128
InstallScript = 256
class steam.enums.common.EProtoAppType

An enumeration.

Invalid = 0
Game = 1
Application = 2
Tool = 4
Demo = 8
Deprected = 16
DLC = 32
Guide = 64
Driver = 128
Config = 256
Hardware = 512
Franchise = 1024
Video = 2048
Plugin = 4096
MusicAlbum = 8192
Series = 16384
Comic = 32768
Beta = 65536
Shortcut = 1073741824
DepotOnly = -2147483648
class steam.enums.common.EPublishedFileInappropriateProvider

An enumeration.

Invalid = 0
Google = 1
Amazon = 2
class steam.enums.common.EPublishedFileInappropriateResult

An enumeration.

NotScanned = 0
VeryUnlikely = 1
Unlikely = 30
Possible = 50
Likely = 75
VeryLikely = 100
class steam.enums.common.EPublishedFileQueryType

An enumeration.

RankedByVote = 0
RankedByPublicationDate = 1
AcceptedForGameRankedByAcceptanceDate = 2
RankedByTrend = 3
FavoritedByFriendsRankedByPublicationDate = 4
CreatedByFriendsRankedByPublicationDate = 5
RankedByNumTimesReported = 6
CreatedByFollowedUsersRankedByPublicationDate = 7
NotYetRated = 8
RankedByTotalUniqueSubscriptions = 9
RankedByTotalVotesAsc = 10
RankedByVotesUp = 11
RankedByTextSearch = 12
RankedByPlaytimeTrend = 13
RankedByTotalPlaytime = 14
RankedByAveragePlaytimeTrend = 15
RankedByLifetimeAveragePlaytime = 16
RankedByPlaytimeSessionsTrend = 17
RankedByLifetimePlaytimeSessions = 18
RankedByInappropriateContentRating = 19
class steam.enums.common.EUserBadge

An enumeration.

Invalid = 0
YearsOfService = 1
Community = 2
Portal2PotatoARG = 3
TreasureHunt = 4
SummerSale2011 = 5
WinterSale2011 = 6
SummerSale2012 = 7
WinterSale2012 = 8
CommunityTranslator = 9
CommunityModerator = 10
ValveEmployee = 11
GameDeveloper = 12
GameCollector = 13
TradingCardBetaParticipant = 14
SteamBoxBeta = 15
Summer2014RedTeam = 16
Summer2014BlueTeam = 17
Summer2014PinkTeam = 18
Summer2014GreenTeam = 19
Summer2014PurpleTeam = 20
Auction2014 = 21
GoldenProfile2014 = 22
TowerAttackMiniGame = 23
Winter2015ARG_RedHerring = 24
SteamAwards2016Nominations = 25
StickerCompletionist2017 = 26
SteamAwards2017Nominations = 27
SpringCleaning2018 = 28
Salien = 29
RetiredModerator = 30
SteamAwards2018Nominations = 31
ValveModerator = 32
WinterSale2018 = 33
LunarNewYearSale2019 = 34
LunarNewYearSale2019GoldenProfile = 35
SpringCleaning2019 = 36
SummerSale2019 = 37
SummerSale2019_TeamHare = 38
SummerSale2019_TeamTortoise = 39
SummerSale2019_TeamCorgi = 40
SummerSale2019_TeamCockatiel = 41
SummerSale2019_TeamPig = 42
SteamAwards2019Nominations = 43
WinterSaleEvent2019 = 44
class steam.enums.common.WorkshopEnumerationType

An enumeration.

RankedByVote = 0
Recent = 1
Trending = 2
FavoriteOfFriends = 3
VotedByFriends = 4
ContentByFriends = 5
RecentFromFollowedUsers = 6
class steam.enums.common.EPublishedFileVisibility

An enumeration.

Public = 0
FriendsOnly = 1
Private = 2
class steam.enums.common.EWorkshopFileType

An enumeration.

First = 0
Community = 0
Microtransaction = 1
Collection = 2
Art = 3
Video = 4
Screenshot = 5
Game = 6
Software = 7
Concept = 8
WebGuide = 9
IntegratedGuide = 10
Merch = 11
ControllerBinding = 12
SteamworksAccessInvite = 13
SteamVideo = 14
GameManagedItem = 15
Max = 16
class steam.enums.common.EAppType

An enumeration.

Invalid = 0
Game = 1
Application = 2
Tool = 4
Demo = 8
Deprected = 16
DLC = 32
Guide = 64
Driver = 128
Config = 256
Hardware = 512
Franchise = 1024
Video = 2048
Plugin = 4096
Music = 8192
Series = 16384
Comic = 32768
Beta = 65536
Shortcut = 1073741824
DepotOnly = -2147483648
class steam.enums.common.EClientUIMode

An enumeration.

Desktop = 0
BigPicture = 1
Mobile = 2
Web = 3
class steam.enums.common.EPurchaseResultDetail

An enumeration.

NoDetail = 0
AVSFailure = 1
InsufficientFunds = 2
ContactSupport = 3
Timeout = 4
InvalidPackage = 5
InvalidPaymentMethod = 6
InvalidData = 7
OthersInProgress = 8
AlreadyPurchased = 9
WrongPrice = 10
FraudCheckFailed = 11
CancelledByUser = 12
RestrictedCountry = 13
BadActivationCode = 14
DuplicateActivationCode = 15
UseOtherPaymentMethod = 16
UseOtherFunctionSource = 17
InvalidShippingAddress = 18
RegionNotSupported = 19
AcctIsBlocked = 20
AcctNotVerified = 21
InvalidAccount = 22
StoreBillingCountryMismatch = 23
DoesNotOwnRequiredApp = 24
CanceledByNewTransaction = 25
ForceCanceledPending = 26
FailCurrencyTransProvider = 27
FailedCyberCafe = 28
NeedsPreApproval = 29
PreApprovalDenied = 30
WalletCurrencyMismatch = 31
EmailNotValidated = 32
ExpiredCard = 33
TransactionExpired = 34
WouldExceedMaxWallet = 35
MustLoginPS3AppForPurchase = 36
CannotShipToPOBox = 37
InsufficientInventory = 38
CannotGiftShippedGoods = 39
CannotShipInternationally = 40
BillingAgreementCancelled = 41
InvalidCoupon = 42
ExpiredCoupon = 43
AccountLocked = 44
OtherAbortableInProgress = 45
ExceededSteamLimit = 46
OverlappingPackagesInCart = 47
NoWallet = 48
NoCachedPaymentMethod = 49
CannotRedeemCodeFromClient = 50
PurchaseAmountNoSupportedByProvider = 51
OverlappingPackagesInPendingTransaction = 52
RateLimited = 53
OwnsExcludedApp = 54
CreditCardBinMismatchesType = 55
CartValueTooHigh = 56
BillingAgreementAlreadyExists = 57
POSACodeNotActivated = 58
CannotShipToCountry = 59
HungTransactionCancelled = 60
PaypalInternalError = 61
UnknownGlobalCollectError = 62
InvalidTaxAddress = 63
PhysicalProductLimitExceeded = 64
PurchaseCannotBeReplayed = 65
DelayedCompletion = 66
BundleTypeCannotBeGifted = 67
BlockedByUSGov = 68
ItemsReservedForCommercialUse = 69
GiftAlreadyOwned = 70
GiftInvalidForRecipientRegion = 71
GiftPricingImbalance = 72
GiftRecipientNotSpecified = 73
ItemsNotAllowedForCommercialUse = 74
BusinessStoreCountryCodeMismatch = 75
UserAssociatedWithManyCafes = 76
UserNotAssociatedWithCafe = 77
AddressInvalid = 78
CreditCardNumberInvalid = 79
CannotShipToMilitaryPostOffice = 80
BillingNameInvalidResemblesCreditCard = 81
PaymentMethodTemporarilyUnavailable = 82
PaymentMethodNotSupportedForProduct = 83
class steam.enums.common.ELicenseFlags

An enumeration.

NONE = 0
Renew = 1
RenewalFailed = 2
Pending = 4
Expired = 8
CancelledByUser = 16
CancelledByAdmin = 32
LowViolenceContent = 64
ImportedFromSteam2 = 128
ForceRunRestriction = 256
RegionRestrictionExpired = 512
CancelledByFriendlyFraudLock = 1024
NotActivated = 2048
class steam.enums.common.ELicenseType

An enumeration.

NoLicense = 0
SinglePurchase = 1
SinglePurchaseLimitedUse = 2
RecurringCharge = 3
RecurringChargeLimitedUse = 4
RecurringChargeLimitedUseWithOverages = 5
RecurringOption = 6
LimitedUseDelayedActivation = 7
class steam.enums.common.EBillingType

An enumeration.

NoCost = 0
BillOnceOnly = 1
BillMonthly = 2
ProofOfPrepurchaseOnly = 3
GuestPass = 4
HardwarePromo = 5
Gift = 6
AutoGrant = 7
OEMTicket = 8
RecurringOption = 9
BillOnceOrCDKey = 10
Repurchaseable = 11
FreeOnDemand = 12
Rental = 13
CommercialLicense = 14
FreeCommercialLicense = 15
NumBillingTypes = 16
class steam.enums.common.EPaymentMethod

An enumeration.

NONE = 0
ActivationCode = 1
CreditCard = 2
Giropay = 3
PayPal = 4
Ideal = 5
PaySafeCard = 6
Sofort = 7
GuestPass = 8
WebMoney = 9
MoneyBookers = 10
AliPay = 11
Yandex = 12
Kiosk = 13
Qiwi = 14
GameStop = 15
HardwarePromo = 16
MoPay = 17
BoletoBancario = 18
BoaCompraGold = 19
BancoDoBrasilOnline = 20
ItauOnline = 21
BradescoOnline = 22
Pagseguro = 23
VisaBrazil = 24
AmexBrazil = 25
Aura = 26
Hipercard = 27
MastercardBrazil = 28
DinersCardBrazil = 29
AuthorizedDevice = 30
MOLPoints = 31
ClickAndBuy = 32
Beeline = 33
Konbini = 34
EClubPoints = 35
CreditCardJapan = 36
BankTransferJapan = 37
PayEasy = 38
Zong = 39
CultureVoucher = 40
BookVoucher = 41
HappymoneyVoucher = 42
ConvenientStoreVoucher = 43
GameVoucher = 44
Multibanco = 45
Payshop = 46
MaestroBoaCompra = 47
OXXO = 48
ToditoCash = 49
Carnet = 50
SPEI = 51
ThreePay = 52
IsBank = 53
Garanti = 54
Akbank = 55
YapiKredi = 56
Halkbank = 57
BankAsya = 58
Finansbank = 59
DenizBank = 60
PTT = 61
CashU = 62
AutoGrant = 64
WebMoneyJapan = 65
OneCard = 66
PSE = 67
Exito = 68
Efecty = 69
Paloto = 70
PinValidda = 71
MangirKart = 72
BancoCreditoDePeru = 73
BBVAContinental = 74
SafetyPay = 75
PagoEfectivo = 76
Trustly = 77
UnionPay = 78
BitCoin = 79
Wallet = 128
Valve = 129
MasterComp = 130
Promotional = 131
MasterSubscription = 134
Payco = 135
MobileWalletJapan = 136
OEMTicket = 256
Split = 512
Complimentary = 1024
class steam.enums.common.EPackageStatus

An enumeration.

Available = 0
Preorder = 1
Unavailable = 2
Invalid = 3
enums.emsg

The EMsg enum contains many members and takes a bit to load. For this reason it is seperate, and imported only when needed.

class steam.enums.emsg.EMsg

An enumeration.

Invalid = 0
Multi = 1
ProtobufWrapped = 2
GenericReply = 100
BaseGeneral = 100
DestJobFailed = 113
Alert = 115
SCIDRequest = 120
SCIDResponse = 121
JobHeartbeat = 123
HubConnect = 124
Subscribe = 126
RouteMessage = 127
RemoteSysID = 128

removed

AMCreateAccountResponse = 129

removed

WGRequest = 130
WGResponse = 131
KeepAlive = 132
WebAPIJobRequest = 133
WebAPIJobResponse = 134
ClientSessionStart = 135
ClientSessionEnd = 136
ClientSessionUpdate = 137
StatsDeprecated = 138
Ping = 139
PingResponse = 140
Stats = 141
RequestFullStatsBlock = 142
LoadDBOCacheItem = 143
LoadDBOCacheItemResponse = 144
InvalidateDBOCacheItems = 145
ServiceMethod = 146
ServiceMethodResponse = 147
ClientPackageVersions = 148
TimestampRequest = 149
TimestampResponse = 150
ServiceMethodCallFromClient = 151
ServiceMethodSendToClient = 152
AssignSysID = 200
BaseShell = 200
Exit = 201
DirRequest = 202
DirResponse = 203
ZipRequest = 204
ZipResponse = 205
UpdateRecordResponse = 215
UpdateCreditCardRequest = 221
UpdateUserBanResponse = 225
PrepareToExit = 226
ContentDescriptionUpdate = 227
TestResetServer = 228
UniverseChanged = 229
ShellConfigInfoUpdate = 230
RequestWindowsEventLogEntries = 233
ProvideWindowsEventLogEntries = 234
ShellSearchLogs = 235
ShellSearchLogsResponse = 236
ShellCheckWindowsUpdates = 237
ShellCheckWindowsUpdatesResponse = 238
ShellFlushUserLicenseCache = 239

removed

TestFlushDelayedSQL = 240
TestFlushDelayedSQLResponse = 241
EnsureExecuteScheduledTask_TEST = 242
EnsureExecuteScheduledTaskResponse_TEST = 243
UpdateScheduledTaskEnableState_TEST = 244
UpdateScheduledTaskEnableStateResponse_TEST = 245
ContentDescriptionDeltaUpdate = 246
Heartbeat = 300
BaseGM = 300
ShellFailed = 301
ExitShells = 307
ExitShell = 308
GracefulExitShell = 309
LicenseProcessingComplete = 316
SetTestFlag = 317
QueuedEmailsComplete = 318
GMReportPHPError = 319
GMDRMSync = 320
PhysicalBoxInventory = 321
UpdateConfigFile = 322
TestInitDB = 323
GMWriteConfigToSQL = 324
GMLoadActivationCodes = 325
GMQueueForFBS = 326
GMSchemaConversionResults = 327
GMSchemaConversionResultsResponse = 328

removed

GMWriteShellFailureToSQL = 329
GMWriteStatsToSOS = 330
GMGetServiceMethodRouting = 331
GMGetServiceMethodRoutingResponse = 332
GMConvertUserWallets = 333

removed

GMTestNextBuildSchemaConversion = 334
GMTestNextBuildSchemaConversionResponse = 335
ExpectShellRestart = 336
HotFixProgress = 337
BaseAIS = 400
AISRefreshContentDescription = 401

removed

AISRequestContentDescription = 402
AISUpdateAppInfo = 403
AISUpdatePackageCosts = 404

removed

AISGetPackageChangeNumber = 405
AISGetPackageChangeNumberResponse = 406
AISAppInfoTableChanged = 407

removed

AISUpdatePackageCostsResponse = 408

removed

AISCreateMarketingMessage = 409

removed

AISCreateMarketingMessageResponse = 410

removed

AISGetMarketingMessage = 411

removed

AISGetMarketingMessageResponse = 412

removed

AISUpdateMarketingMessage = 413

removed

AISUpdateMarketingMessageResponse = 414

removed

AISRequestMarketingMessageUpdate = 415

removed

AISDeleteMarketingMessage = 416

removed

AISGetMarketingTreatments = 419

removed

AISGetMarketingTreatmentsResponse = 420

removed

AISRequestMarketingTreatmentUpdate = 421

removed

AISTestAddPackage = 422

removed

AIGetAppGCFlags = 423
AIGetAppGCFlagsResponse = 424
AIGetAppList = 425
AIGetAppListResponse = 426
AIGetAppInfo = 427

removed

AIGetAppInfoResponse = 428

removed

AISGetCouponDefinition = 429
AISGetCouponDefinitionResponse = 430
AISUpdateSlaveContentDescription = 431
AISUpdateSlaveContentDescriptionResponse = 432
AISTestEnableGC = 433
BaseAM = 500
AMUpdateUserBanRequest = 504
AMAddLicense = 505
AMBeginProcessingLicenses = 507

removed

AMSendSystemIMToUser = 508
AMExtendLicense = 509
AMAddMinutesToLicense = 510
AMCancelLicense = 511
AMInitPurchase = 512
AMPurchaseResponse = 513
AMGetFinalPrice = 514
AMGetFinalPriceResponse = 515
AMGetLegacyGameKey = 516
AMGetLegacyGameKeyResponse = 517
AMFindHungTransactions = 518
AMSetAccountTrustedRequest = 519
AMCompletePurchase = 521

removed

AMCancelPurchase = 522
AMNewChallenge = 523
AMLoadOEMTickets = 524
AMFixPendingPurchase = 525
AMFixPendingPurchaseResponse = 526
AMIsUserBanned = 527
AMRegisterKey = 528
AMLoadActivationCodes = 529
AMLoadActivationCodesResponse = 530
AMLookupKeyResponse = 531
AMLookupKey = 532
AMChatCleanup = 533
AMClanCleanup = 534
AMFixPendingRefund = 535
AMReverseChargeback = 536
AMReverseChargebackResponse = 537
AMClanCleanupList = 538
AMGetLicenses = 539
AMGetLicensesResponse = 540
AMSendCartRepurchase = 541
AMSendCartRepurchaseResponse = 542
AllowUserToPlayQuery = 550
AllowUserToPlayResponse = 551
AMVerfiyUser = 552
AMClientNotPlaying = 553
AMClientRequestFriendship = 554
AMRelayPublishStatus = 555
AMResetCommunityContent = 556

removed

AMPrimePersonaStateCache = 557

removed

AMAllowUserContentQuery = 558

removed

AMAllowUserContentResponse = 559

removed

AMInitPurchaseResponse = 560
AMRevokePurchaseResponse = 561
AMLockProfile = 562

removed

AMRefreshGuestPasses = 563
AMInviteUserToClan = 564

removed

AMAcknowledgeClanInvite = 565

removed

AMGrantGuestPasses = 566
AMClanDataUpdated = 567
AMReloadAccount = 568
AMClientChatMsgRelay = 569
AMChatMulti = 570
AMClientChatInviteRelay = 571
AMChatInvite = 572
AMClientJoinChatRelay = 573
AMClientChatMemberInfoRelay = 574
AMPublishChatMemberInfo = 575
AMClientAcceptFriendInvite = 576
AMChatEnter = 577
AMClientPublishRemovalFromSource = 578
AMChatActionResult = 579
AMFindAccounts = 580
AMFindAccountsResponse = 581
AMRequestAccountData = 582
AMRequestAccountDataResponse = 583
AMSetAccountFlags = 584
AMCreateClan = 586
AMCreateClanResponse = 587
AMGetClanDetails = 588
AMGetClanDetailsResponse = 589
AMSetPersonaName = 590
AMSetAvatar = 591
AMAuthenticateUser = 592
AMAuthenticateUserResponse = 593
AMGetAccountFriendsCount = 594

removed

AMGetAccountFriendsCountResponse = 595

removed

AMP2PIntroducerMessage = 596
ClientChatAction = 597
AMClientChatActionRelay = 598
ReqChallenge = 600
BaseVS = 600
VACResponse = 601
ReqChallengeTest = 602
VSMarkCheat = 604
VSAddCheat = 605
VSPurgeCodeModDB = 606
VSGetChallengeResults = 607
VSChallengeResultText = 608
VSReportLingerer = 609
VSRequestManagedChallenge = 610
VSLoadDBFinished = 611
BaseDRMS = 625
DRMBuildBlobRequest = 628
DRMBuildBlobResponse = 629
DRMResolveGuidRequest = 630
DRMResolveGuidResponse = 631
DRMVariabilityReport = 633
DRMVariabilityReportResponse = 634
DRMStabilityReport = 635
DRMStabilityReportResponse = 636
DRMDetailsReportRequest = 637
DRMDetailsReportResponse = 638
DRMProcessFile = 639
DRMAdminUpdate = 640
DRMAdminUpdateResponse = 641
DRMSync = 642
DRMSyncResponse = 643
DRMProcessFileResponse = 644
DRMEmptyGuidCache = 645
DRMEmptyGuidCacheResponse = 646
BaseCS = 650
CSUserContentRequest = 652

removed

BaseClient = 700
ClientLogOn_Deprecated = 701

removed

ClientAnonLogOn_Deprecated = 702

removed

ClientHeartBeat = 703
ClientVACResponse = 704
ClientGamesPlayed_obsolete = 705

removed

ClientLogOff = 706
ClientNoUDPConnectivity = 707
ClientInformOfCreateAccount = 708

removed

ClientAckVACBan = 709

removed

ClientConnectionStats = 710
ClientInitPurchase = 711

removed

ClientPingResponse = 712
ClientRemoveFriend = 714
ClientGamesPlayedNoDataBlob = 715
ClientChangeStatus = 716
ClientVacStatusResponse = 717
ClientFriendMsg = 718
ClientGameConnect_obsolete = 719

removed

ClientGamesPlayed2_obsolete = 720

removed

ClientGameEnded_obsolete = 721

removed

ClientGetFinalPrice = 722

removed

ClientSystemIM = 726
ClientSystemIMAck = 727
ClientGetLicenses = 728
ClientCancelLicense = 729

removed

ClientGetLegacyGameKey = 730
ClientContentServerLogOn_Deprecated = 731

removed

ClientAckVACBan2 = 732
ClientAckMessageByGID = 735

removed

ClientGetPurchaseReceipts = 736
ClientAckPurchaseReceipt = 737

removed

ClientGamesPlayed3_obsolete = 738

removed

ClientSendGuestPass = 739

removed

ClientAckGuestPass = 740
ClientRedeemGuestPass = 741
ClientGamesPlayed = 742
ClientRegisterKey = 743
ClientInviteUserToClan = 744
ClientAcknowledgeClanInvite = 745
ClientPurchaseWithMachineID = 746
ClientAppUsageEvent = 747
ClientGetGiftTargetList = 748

removed

ClientGetGiftTargetListResponse = 749

removed

ClientLogOnResponse = 751
ClientVACChallenge = 753

removed

ClientSetHeartbeatRate = 755
ClientNotLoggedOnDeprecated = 756

removed

ClientLoggedOff = 757
GSApprove = 758
GSDeny = 759
GSKick = 760
ClientCreateAcctResponse = 761
ClientPurchaseResponse = 763
ClientPing = 764
ClientNOP = 765
ClientPersonaState = 766
ClientFriendsList = 767
ClientAccountInfo = 768
ClientVacStatusQuery = 770

removed

ClientNewsUpdate = 771
ClientGameConnectDeny = 773
GSStatusReply = 774
ClientGetFinalPriceResponse = 775

removed

ClientGameConnectTokens = 779
ClientLicenseList = 780
ClientCancelLicenseResponse = 781

removed

ClientVACBanStatus = 782
ClientCMList = 783
ClientEncryptPct = 784
ClientGetLegacyGameKeyResponse = 785
ClientFavoritesList = 786

removed

CSUserContentApprove = 787

removed

CSUserContentDeny = 788

removed

ClientInitPurchaseResponse = 789

removed

ClientAddFriend = 791
ClientAddFriendResponse = 792
ClientInviteFriend = 793

removed

ClientInviteFriendResponse = 794

removed

ClientSendGuestPassResponse = 795

removed

ClientAckGuestPassResponse = 796
ClientRedeemGuestPassResponse = 797
ClientUpdateGuestPassesList = 798
ClientChatMsg = 799
ClientChatInvite = 800
ClientJoinChat = 801
ClientChatMemberInfo = 802
ClientLogOnWithCredentials_Deprecated = 803

removed

ClientPasswordChangeResponse = 805
ClientChatEnter = 807
ClientFriendRemovedFromSource = 808
ClientCreateChat = 809
ClientCreateChatResponse = 810
ClientUpdateChatMetadata = 811

removed

ClientP2PIntroducerMessage = 813
ClientChatActionResult = 814
ClientRequestFriendData = 815
ClientGetUserStats = 818
ClientGetUserStatsResponse = 819
ClientStoreUserStats = 820
ClientStoreUserStatsResponse = 821
ClientClanState = 822
ClientServiceModule = 830
ClientServiceCall = 831
ClientServiceCallResponse = 832
ClientPackageInfoRequest = 833

removed

ClientPackageInfoResponse = 834

removed

ClientNatTraversalStatEvent = 839
ClientAppInfoRequest = 840

removed

ClientAppInfoResponse = 841

removed

ClientSteamUsageEvent = 842
ClientCheckPassword = 845
ClientResetPassword = 846
ClientCheckPasswordResponse = 848
ClientResetPasswordResponse = 849
ClientSessionToken = 850
ClientDRMProblemReport = 851
ClientSetIgnoreFriend = 855
ClientSetIgnoreFriendResponse = 856
ClientGetAppOwnershipTicket = 857
ClientGetAppOwnershipTicketResponse = 858
ClientGetLobbyListResponse = 860
ClientGetLobbyMetadata = 861

removed

ClientGetLobbyMetadataResponse = 862

removed

ClientVTTCert = 863

removed

ClientAppInfoUpdate = 866

removed

ClientAppInfoChanges = 867

removed

ClientServerList = 880
ClientEmailChangeResponse = 891

removed

ClientSecretQAChangeResponse = 892

removed

ClientDRMBlobRequest = 896
ClientDRMBlobResponse = 897
ClientLookupKey = 898

removed

ClientLookupKeyResponse = 899

removed

BaseGameServer = 900
GSDisconnectNotice = 901
GSStatus = 903
GSUserPlaying = 905
GSStatus2 = 906
GSStatusUpdate_Unused = 907
GSServerType = 908
GSPlayerList = 909
GSGetUserAchievementStatus = 910
GSGetUserAchievementStatusResponse = 911
GSGetPlayStats = 918
GSGetPlayStatsResponse = 919
GSGetUserGroupStatus = 920
AMGetUserGroupStatus = 921
AMGetUserGroupStatusResponse = 922
GSGetUserGroupStatusResponse = 923
GSGetReputation = 936
GSGetReputationResponse = 937
GSAssociateWithClan = 938
GSAssociateWithClanResponse = 939
GSComputeNewPlayerCompatibility = 940
GSComputeNewPlayerCompatibilityResponse = 941
AdminCmd = 1000
BaseAdmin = 1000
AdminCmdResponse = 1004
AdminLogListenRequest = 1005
AdminLogEvent = 1006
LogSearchRequest = 1007

removed

LogSearchResponse = 1008

removed

LogSearchCancel = 1009

removed

UniverseData = 1010
RequestStatHistory = 1014

removed

StatHistory = 1015

removed

AdminPwLogon = 1017

removed

AdminPwLogonResponse = 1018

removed

AdminSpew = 1019
AdminConsoleTitle = 1020
AdminGCSpew = 1023
AdminGCCommand = 1024
AdminGCGetCommandList = 1025
AdminGCGetCommandListResponse = 1026
FBSConnectionData = 1027
AdminMsgSpew = 1028
FBSReqVersion = 1100
BaseFBS = 1100
FBSVersionInfo = 1101
FBSForceRefresh = 1102
FBSForceBounce = 1103
FBSDeployPackage = 1104
FBSDeployResponse = 1105
FBSUpdateBootstrapper = 1106
FBSSetState = 1107
FBSApplyOSUpdates = 1108
FBSRunCMDScript = 1109
FBSRebootBox = 1110
FBSSetBigBrotherMode = 1111
FBSMinidumpServer = 1112
FBSSetShellCount_obsolete = 1113

removed

FBSDeployHotFixPackage = 1114
FBSDeployHotFixResponse = 1115
FBSDownloadHotFix = 1116
FBSDownloadHotFixResponse = 1117
FBSUpdateTargetConfigFile = 1118
FBSApplyAccountCred = 1119
FBSApplyAccountCredResponse = 1120
FBSSetShellCount = 1121
FBSTerminateShell = 1122
FBSQueryGMForRequest = 1123
FBSQueryGMResponse = 1124
FBSTerminateZombies = 1125
FBSInfoFromBootstrapper = 1126
FBSRebootBoxResponse = 1127
FBSBootstrapperPackageRequest = 1128
FBSBootstrapperPackageResponse = 1129
FBSBootstrapperGetPackageChunk = 1130
FBSBootstrapperGetPackageChunkResponse = 1131
FBSBootstrapperPackageTransferProgress = 1132
FBSRestartBootstrapper = 1133
FBSPauseFrozenDumps = 1134
FileXferRequest = 1200
BaseFileXfer = 1200
FileXferResponse = 1201
FileXferData = 1202
FileXferEnd = 1203
FileXferDataAck = 1204
ChannelAuthChallenge = 1300
BaseChannelAuth = 1300
ChannelAuthResponse = 1301
ChannelAuthResult = 1302
ChannelEncryptRequest = 1303
ChannelEncryptResponse = 1304
ChannelEncryptResult = 1305
BaseBS = 1400
BSPurchaseStart = 1401
BSPurchaseResponse = 1402
BSAuthenticateCCTrans = 1403
BSAuthenticateCCTransResponse = 1404
BSSettleComplete = 1406
BSBannedRequest = 1407

removed

BSInitPayPalTxn = 1408
BSInitPayPalTxnResponse = 1409
BSGetPayPalUserInfo = 1410
BSGetPayPalUserInfoResponse = 1411
BSRefundTxn = 1413

removed

BSRefundTxnResponse = 1414

removed

BSGetEvents = 1415

removed

BSChaseRFRRequest = 1416

removed

BSPaymentInstrBan = 1417
BSPaymentInstrBanResponse = 1418
BSProcessGCReports = 1419

removed

BSProcessPPReports = 1420

removed

BSInitGCBankXferTxn = 1421
BSInitGCBankXferTxnResponse = 1422
BSQueryGCBankXferTxn = 1423

removed

BSQueryGCBankXferTxnResponse = 1424

removed

BSCommitGCTxn = 1425
BSQueryTransactionStatus = 1426
BSQueryTransactionStatusResponse = 1427
BSQueryCBOrderStatus = 1428

removed

BSQueryCBOrderStatusResponse = 1429

removed

BSRunRedFlagReport = 1430

removed

BSQueryPaymentInstUsage = 1431
BSQueryPaymentInstResponse = 1432
BSQueryTxnExtendedInfo = 1433
BSQueryTxnExtendedInfoResponse = 1434
BSUpdateConversionRates = 1435
BSProcessUSBankReports = 1436

removed

BSPurchaseRunFraudChecks = 1437
BSPurchaseRunFraudChecksResponse = 1438
BSStartShippingJobs = 1439

removed

BSQueryBankInformation = 1440
BSQueryBankInformationResponse = 1441
BSValidateXsollaSignature = 1445
BSValidateXsollaSignatureResponse = 1446
BSQiwiWalletInvoice = 1448
BSQiwiWalletInvoiceResponse = 1449
BSUpdateInventoryFromProPack = 1450
BSUpdateInventoryFromProPackResponse = 1451
BSSendShippingRequest = 1452
BSSendShippingRequestResponse = 1453
BSGetProPackOrderStatus = 1454
BSGetProPackOrderStatusResponse = 1455
BSCheckJobRunning = 1456
BSCheckJobRunningResponse = 1457
BSResetPackagePurchaseRateLimit = 1458
BSResetPackagePurchaseRateLimitResponse = 1459
BSUpdatePaymentData = 1460
BSUpdatePaymentDataResponse = 1461
BSGetBillingAddress = 1462
BSGetBillingAddressResponse = 1463
BSGetCreditCardInfo = 1464
BSGetCreditCardInfoResponse = 1465
BSRemoveExpiredPaymentData = 1468
BSRemoveExpiredPaymentDataResponse = 1469
BSConvertToCurrentKeys = 1470
BSConvertToCurrentKeysResponse = 1471
BSInitPurchase = 1472
BSInitPurchaseResponse = 1473
BSCompletePurchase = 1474
BSCompletePurchaseResponse = 1475
BSPruneCardUsageStats = 1476
BSPruneCardUsageStatsResponse = 1477
BSStoreBankInformation = 1478
BSStoreBankInformationResponse = 1479
BSVerifyPOSAKey = 1480
BSVerifyPOSAKeyResponse = 1481
BSReverseRedeemPOSAKey = 1482
BSReverseRedeemPOSAKeyResponse = 1483
BSQueryFindCreditCard = 1484
BSQueryFindCreditCardResponse = 1485
BSStatusInquiryPOSAKey = 1486
BSStatusInquiryPOSAKeyResponse = 1487
BSValidateMoPaySignature = 1488

removed

BSValidateMoPaySignatureResponse = 1489

removed

BSMoPayConfirmProductDelivery = 1490

removed

BSMoPayConfirmProductDeliveryResponse = 1491

removed

BSGenerateMoPayMD5 = 1492

removed

BSGenerateMoPayMD5Response = 1493

removed

BSBoaCompraConfirmProductDelivery = 1494
BSBoaCompraConfirmProductDeliveryResponse = 1495
BSGenerateBoaCompraMD5 = 1496
BSGenerateBoaCompraMD5Response = 1497
BSCommitWPTxn = 1498
BSCommitAdyenTxn = 1499
BaseATS = 1500
ATSStartStressTest = 1501
ATSStopStressTest = 1502
ATSRunFailServerTest = 1503
ATSUFSPerfTestTask = 1504
ATSUFSPerfTestResponse = 1505
ATSCycleTCM = 1506
ATSInitDRMSStressTest = 1507
ATSCallTest = 1508
ATSCallTestReply = 1509
ATSStartExternalStress = 1510
ATSExternalStressJobStart = 1511
ATSExternalStressJobQueued = 1512
ATSExternalStressJobRunning = 1513
ATSExternalStressJobStopped = 1514
ATSExternalStressJobStopAll = 1515
ATSExternalStressActionResult = 1516
ATSStarted = 1517
ATSCSPerfTestTask = 1518
ATSCSPerfTestResponse = 1519
BaseDP = 1600
DPSetPublishingState = 1601
DPGamePlayedStats = 1602

removed

DPUniquePlayersStat = 1603
DPStreamingUniquePlayersStat = 1604
DPVacInfractionStats = 1605

removed

DPVacBanStats = 1606

removed

DPBlockingStats = 1607
DPNatTraversalStats = 1608
DPSteamUsageEvent = 1609

removed

DPVacCertBanStats = 1610

removed

DPVacCafeBanStats = 1611

removed

DPCloudStats = 1612
DPAchievementStats = 1613
DPAccountCreationStats = 1614

removed

DPGetPlayerCount = 1615
DPGetPlayerCountResponse = 1616
DPGameServersPlayersStats = 1617
DPDownloadRateStatistics = 1618

removed

DPFacebookStatistics = 1619

removed

ClientDPCheckSpecialSurvey = 1620
ClientDPCheckSpecialSurveyResponse = 1621
ClientDPSendSpecialSurveyResponse = 1622
ClientDPSendSpecialSurveyResponseReply = 1623
DPStoreSaleStatistics = 1624
ClientDPUpdateAppJobReport = 1625
ClientDPSteam2AppStarted = 1627

removed

DPUpdateContentEvent = 1626
ClientDPUnsignedInstallScript = 1627
DPPartnerMicroTxns = 1628
DPPartnerMicroTxnsResponse = 1629
ClientDPContentStatsReport = 1630
DPVRUniquePlayersStat = 1631
BaseCM = 1700
CMSetAllowState = 1701
CMSpewAllowState = 1702
CMSessionRejected = 1703
CMSetSecrets = 1704
CMGetSecrets = 1705
BaseDSS = 1800

removed

DSSNewFile = 1801

removed

DSSCurrentFileList = 1802

removed

DSSSynchList = 1803

removed

DSSSynchListResponse = 1804

removed

DSSSynchSubscribe = 1805

removed

DSSSynchUnsubscribe = 1806

removed

BaseEPM = 1900

removed

EPMStartProcess = 1901

removed

EPMStopProcess = 1902

removed

EPMRestartProcess = 1903

removed

GCSendClient = 2200

removed

BaseGC = 2200
AMRelayToGC = 2201

removed

GCUpdatePlayedState = 2202

removed

GCCmdRevive = 2203
GCCmdBounce = 2204

removed

GCCmdForceBounce = 2205

removed

GCCmdDown = 2206
GCCmdDeploy = 2207
GCCmdDeployResponse = 2208
GCCmdSwitch = 2209
AMRefreshSessions = 2210
GCUpdateGSState = 2211

removed

GCAchievementAwarded = 2212
GCSystemMessage = 2213
GCValidateSession = 2214

removed

GCValidateSessionResponse = 2215

removed

GCCmdStatus = 2216
GCRegisterWebInterfaces_Deprecated = 2217

removed

GCGetAccountDetails_DEPRECATED = 2218

removed

GCInterAppMessage = 2219
GCGetEmailTemplate = 2220
GCGetEmailTemplateResponse = 2221
GCHRelay = 2222
GCHRelayToClient = 2223
GCHUpdateSession = 2224
GCHRequestUpdateSession = 2225
GCHRequestStatus = 2226
GCHRequestStatusResponse = 2227
GCHAccountVacStatusChange = 2228
GCHSpawnGC = 2229
GCHSpawnGCResponse = 2230
GCHKillGC = 2231
GCHKillGCResponse = 2232
GCHAccountTradeBanStatusChange = 2233
GCHAccountLockStatusChange = 2234
GCHVacVerificationChange = 2235
GCHAccountPhoneNumberChange = 2236
GCHAccountTwoFactorChange = 2237
GCHInviteUserToLobby = 2238
BaseP2P = 2500
P2PIntroducerMessage = 2502
BaseSM = 2900
SMExpensiveReport = 2902
SMHourlyReport = 2903
SMFishingReport = 2904

removed

SMPartitionRenames = 2905
SMMonitorSpace = 2906
SMTestNextBuildSchemaConversion = 2907
SMTestNextBuildSchemaConversionResponse = 2908
BaseTest = 3000
FailServer = 3000
JobHeartbeatTest = 3001
JobHeartbeatTestResponse = 3002
BaseFTSRange = 3100
FTSGetBrowseCounts = 3101

removed

FTSGetBrowseCountsResponse = 3102

removed

FTSBrowseClans = 3103

removed

FTSBrowseClansResponse = 3104

removed

FTSSearchClansByLocation = 3105

removed

FTSSearchClansByLocationResponse = 3106

removed

FTSSearchPlayersByLocation = 3107

removed

FTSSearchPlayersByLocationResponse = 3108

removed

FTSClanDeleted = 3109

removed

FTSSearch = 3110

removed

FTSSearchResponse = 3111

removed

FTSSearchStatus = 3112

removed

FTSSearchStatusResponse = 3113

removed

FTSGetGSPlayStats = 3114

removed

FTSGetGSPlayStatsResponse = 3115

removed

FTSGetGSPlayStatsForServer = 3116

removed

FTSGetGSPlayStatsForServerResponse = 3117

removed

FTSReportIPUpdates = 3118

removed

BaseCCSRange = 3150
CCSGetComments = 3151

removed

CCSGetCommentsResponse = 3152

removed

CCSAddComment = 3153

removed

CCSAddCommentResponse = 3154

removed

CCSDeleteComment = 3155

removed

CCSDeleteCommentResponse = 3156

removed

CCSPreloadComments = 3157

removed

CCSNotifyCommentCount = 3158

removed

CCSGetCommentsForNews = 3159

removed

CCSGetCommentsForNewsResponse = 3160

removed

CCSDeleteAllCommentsByAuthor = 3161
CCSDeleteAllCommentsByAuthorResponse = 3162
BaseLBSRange = 3200
LBSSetScore = 3201
LBSSetScoreResponse = 3202
LBSFindOrCreateLB = 3203
LBSFindOrCreateLBResponse = 3204
LBSGetLBEntries = 3205
LBSGetLBEntriesResponse = 3206
LBSGetLBList = 3207
LBSGetLBListResponse = 3208
LBSSetLBDetails = 3209
LBSDeleteLB = 3210
LBSDeleteLBEntry = 3211
LBSResetLB = 3212
LBSResetLBResponse = 3213
LBSDeleteLBResponse = 3214
BaseOGS = 3400
OGSBeginSession = 3401
OGSBeginSessionResponse = 3402
OGSEndSession = 3403
OGSEndSessionResponse = 3404
OGSWriteAppSessionRow = 3406
BaseBRP = 3600
BRPStartShippingJobs = 3601
BRPProcessUSBankReports = 3602
BRPProcessGCReports = 3603
BRPProcessPPReports = 3604
BRPSettleNOVA = 3605

removed

BRPSettleCB = 3606

removed

BRPCommitGC = 3607
BRPCommitGCResponse = 3608
BRPFindHungTransactions = 3609
BRPCheckFinanceCloseOutDate = 3610
BRPProcessLicenses = 3611
BRPProcessLicensesResponse = 3612
BRPRemoveExpiredPaymentData = 3613
BRPRemoveExpiredPaymentDataResponse = 3614
BRPConvertToCurrentKeys = 3615
BRPConvertToCurrentKeysResponse = 3616
BRPPruneCardUsageStats = 3617
BRPPruneCardUsageStatsResponse = 3618
BRPCheckActivationCodes = 3619
BRPCheckActivationCodesResponse = 3620
BRPCommitWP = 3621
BRPCommitWPResponse = 3622
BRPProcessWPReports = 3623
BRPProcessPaymentRules = 3624
BRPProcessPartnerPayments = 3625
BRPCheckSettlementReports = 3626
BRPPostTaxToAvalara = 3628
BRPPostTransactionTax = 3629
BRPPostTransactionTaxResponse = 3630
BRPProcessIMReports = 3631
BaseAMRange2 = 4000
AMCreateChat = 4001
AMCreateChatResponse = 4002
AMUpdateChatMetadata = 4003

removed

AMPublishChatMetadata = 4004

removed

AMSetProfileURL = 4005
AMGetAccountEmailAddress = 4006
AMGetAccountEmailAddressResponse = 4007
AMRequestClanData = 4008
AMRouteToClients = 4009
AMLeaveClan = 4010
AMClanPermissions = 4011
AMClanPermissionsResponse = 4012
AMCreateClanEventDummyForRateLimiting = 4013
AMUpdateClanEventDummyForRateLimiting = 4015
AMCreateClanEventResponse = 4014
AMUpdateClanEvent = 4015
AMUpdateClanEventResponse = 4016
AMGetClanEvents = 4017
AMGetClanEventsResponse = 4018
AMDeleteClanEvent = 4019
AMDeleteClanEventResponse = 4020
AMSetClanPermissionSettings = 4021
AMSetClanPermissionSettingsResponse = 4022
AMGetClanPermissionSettings = 4023
AMGetClanPermissionSettingsResponse = 4024
AMPublishChatRoomInfo = 4025
ClientChatRoomInfo = 4026
AMCreateClanAnnouncement = 4027

removed

AMCreateClanAnnouncementResponse = 4028

removed

AMUpdateClanAnnouncement = 4029

removed

AMUpdateClanAnnouncementResponse = 4030

removed

AMGetClanAnnouncementsCount = 4031

removed

AMGetClanAnnouncementsCountResponse = 4032

removed

AMGetClanAnnouncements = 4033

removed

AMGetClanAnnouncementsResponse = 4034

removed

AMDeleteClanAnnouncement = 4035

removed

AMDeleteClanAnnouncementResponse = 4036

removed

AMGetSingleClanAnnouncement = 4037

removed

AMGetSingleClanAnnouncementResponse = 4038

removed

AMGetClanHistory = 4039
AMGetClanHistoryResponse = 4040
AMGetClanPermissionBits = 4041
AMGetClanPermissionBitsResponse = 4042
AMSetClanPermissionBits = 4043
AMSetClanPermissionBitsResponse = 4044
AMSessionInfoRequest = 4045
AMSessionInfoResponse = 4046
AMValidateWGToken = 4047
AMGetSingleClanEvent = 4048
AMGetSingleClanEventResponse = 4049
AMGetClanRank = 4050
AMGetClanRankResponse = 4051
AMSetClanRank = 4052
AMSetClanRankResponse = 4053
AMGetClanPOTW = 4054
AMGetClanPOTWResponse = 4055
AMSetClanPOTW = 4056
AMSetClanPOTWResponse = 4057
AMRequestChatMetadata = 4058

removed

AMDumpUser = 4059
AMKickUserFromClan = 4060
AMAddFounderToClan = 4061
AMValidateWGTokenResponse = 4062
AMSetCommunityState = 4063
AMSetAccountDetails = 4064
AMGetChatBanList = 4065
AMGetChatBanListResponse = 4066
AMUnBanFromChat = 4067
AMSetClanDetails = 4068
AMGetAccountLinksResponse = 4070
AMSetAccountLinksResponse = 4072
UGSGetUserGameStats = 4073
UGSGetUserGameStatsResponse = 4074
AMCheckClanMembership = 4075
AMGetClanMembers = 4076
AMGetClanMembersResponse = 4077
AMJoinPublicClan = 4078
AMNotifyChatOfClanChange = 4079
AMResubmitPurchase = 4080
AMAddFriend = 4081
AMAddFriendResponse = 4082
AMRemoveFriend = 4083
AMDumpClan = 4084
AMChangeClanOwner = 4085
AMCancelEasyCollect = 4086
AMCancelEasyCollectResponse = 4087
AMGetClanMembershipList = 4088

removed

AMGetClanMembershipListResponse = 4089

removed

AMClansInCommon = 4090
AMClansInCommonResponse = 4091
AMIsValidAccountID = 4092
AMConvertClan = 4093
AMGetGiftTargetListRelay = 4094

removed

AMWipeFriendsList = 4095
AMSetIgnored = 4096
AMClansInCommonCountResponse = 4097
AMFriendsList = 4098
AMFriendsListResponse = 4099
AMFriendsInCommon = 4100
AMFriendsInCommonResponse = 4101
AMFriendsInCommonCountResponse = 4102
AMClansInCommonCount = 4103
AMChallengeVerdict = 4104
AMChallengeNotification = 4105
AMFindGSByIP = 4106
AMFoundGSByIP = 4107
AMGiftRevoked = 4108
AMCreateAccountRecord = 4109
AMUserClanList = 4110
AMUserClanListResponse = 4111
AMGetAccountDetails2 = 4112
AMGetAccountDetailsResponse2 = 4113
AMSetCommunityProfileSettings = 4114
AMSetCommunityProfileSettingsResponse = 4115
AMGetCommunityPrivacyState = 4116
AMGetCommunityPrivacyStateResponse = 4117
AMCheckClanInviteRateLimiting = 4118
UGSGetUserAchievementStatus = 4119
AMGetIgnored = 4120
AMGetIgnoredResponse = 4121
AMSetIgnoredResponse = 4122
AMSetFriendRelationshipNone = 4123
AMGetFriendRelationship = 4124
AMGetFriendRelationshipResponse = 4125
AMServiceModulesCache = 4126
AMServiceModulesCall = 4127
AMServiceModulesCallResponse = 4128
AMGetCaptchaDataForIP = 4129
AMGetCaptchaDataForIPResponse = 4130
AMValidateCaptchaDataForIP = 4131
AMValidateCaptchaDataForIPResponse = 4132
AMTrackFailedAuthByIP = 4133
AMGetCaptchaDataByGID = 4134
AMGetCaptchaDataByGIDResponse = 4135
AMGetLobbyList = 4136

removed

AMGetLobbyListResponse = 4137

removed

AMGetLobbyMetadata = 4138

removed

AMGetLobbyMetadataResponse = 4139

removed

CommunityAddFriendNews = 4140
AMAddClanNews = 4141

removed

AMWriteNews = 4142

removed

AMFindClanUser = 4143
AMFindClanUserResponse = 4144
AMBanFromChat = 4145
AMGetUserHistoryResponse = 4146

removed

AMGetUserNewsSubscriptions = 4147
AMGetUserNewsSubscriptionsResponse = 4148
AMSetUserNewsSubscriptions = 4149
AMGetUserNews = 4150

removed

AMGetUserNewsResponse = 4151

removed

AMSendQueuedEmails = 4152
AMSetLicenseFlags = 4153
AMGetUserHistory = 4154

removed

CommunityDeleteUserNews = 4155
AMAllowUserFilesRequest = 4156
AMAllowUserFilesResponse = 4157
AMGetAccountStatus = 4158
AMGetAccountStatusResponse = 4159
AMEditBanReason = 4160
AMCheckClanMembershipResponse = 4161
AMProbeClanMembershipList = 4162
AMProbeClanMembershipListResponse = 4163
UGSGetUserAchievementStatusResponse = 4164
AMGetFriendsLobbies = 4165
AMGetFriendsLobbiesResponse = 4166
AMGetUserFriendNewsResponse = 4172
CommunityGetUserFriendNews = 4173
AMGetUserClansNewsResponse = 4174
AMGetUserClansNews = 4175
AMStoreInitPurchase = 4176

removed

AMStoreInitPurchaseResponse = 4177

removed

AMStoreGetFinalPrice = 4178

removed

AMStoreGetFinalPriceResponse = 4179

removed

AMStoreCompletePurchase = 4180

removed

AMStoreCancelPurchase = 4181

removed

AMStorePurchaseResponse = 4182

removed

AMCreateAccountRecordInSteam3 = 4183

removed

AMGetPreviousCBAccount = 4184
AMGetPreviousCBAccountResponse = 4185
AMUpdateBillingAddress = 4186

removed

AMUpdateBillingAddressResponse = 4187

removed

AMGetBillingAddress = 4188

removed

AMGetBillingAddressResponse = 4189

removed

AMGetUserLicenseHistory = 4190
AMGetUserLicenseHistoryResponse = 4191
AMSupportChangePassword = 4194
AMSupportChangeEmail = 4195
AMSupportChangeSecretQA = 4196

removed

AMResetUserVerificationGSByIP = 4197
AMUpdateGSPlayStats = 4198
AMSupportEnableOrDisable = 4199
AMGetComments = 4200

removed

AMGetCommentsResponse = 4201

removed

AMAddComment = 4202

removed

AMAddCommentResponse = 4203

removed

AMDeleteComment = 4204

removed

AMDeleteCommentResponse = 4205

removed

AMGetPurchaseStatus = 4206
AMSupportIsAccountEnabled = 4209
AMSupportIsAccountEnabledResponse = 4210
UGSGetUserStats = 4211
AMSupportKickSession = 4212
AMGSSearch = 4213
MarketingMessageUpdate = 4216
ChatServerRouteFriendMsg = 4219
AMTicketAuthRequestOrResponse = 4220
AMVerifyDepotManagementRights = 4222
AMVerifyDepotManagementRightsResponse = 4223
AMAddFreeLicense = 4224
AMGetUserFriendsMinutesPlayed = 4225

removed

AMGetUserFriendsMinutesPlayedResponse = 4226

removed

AMGetUserMinutesPlayed = 4227

removed

AMGetUserMinutesPlayedResponse = 4228

removed

AMValidateEmailLinkResponse = 4232
AMAddUsersToMarketingTreatment = 4234

removed

UGSStoreUserStats = 4236
AMGetUserGameplayInfo = 4237

removed

AMGetUserGameplayInfoResponse = 4238

removed

AMGetCardList = 4239

removed

AMGetCardListResponse = 4240

removed

AMDeleteStoredCard = 4241
AMRevokeLegacyGameKeys = 4242
AMGetWalletDetails = 4244
AMGetWalletDetailsResponse = 4245
AMDeleteStoredPaymentInfo = 4246
AMGetStoredPaymentSummary = 4247
AMGetStoredPaymentSummaryResponse = 4248
AMGetWalletConversionRate = 4249
AMGetWalletConversionRateResponse = 4250
AMConvertWallet = 4251
AMConvertWalletResponse = 4252
AMRelayGetFriendsWhoPlayGame = 4253

removed

AMRelayGetFriendsWhoPlayGameResponse = 4254

removed

AMSetPreApproval = 4255
AMSetPreApprovalResponse = 4256
AMMarketingTreatmentUpdate = 4257

removed

AMCreateRefund = 4258
AMCreateRefundResponse = 4259
AMCreateChargeback = 4260
AMCreateChargebackResponse = 4261
AMCreateDispute = 4262
AMCreateDisputeResponse = 4263
AMClearDispute = 4264
AMCreateFinancialAdjustment = 4265
AMPlayerNicknameList = 4266
AMPlayerNicknameListResponse = 4267
AMSetDRMTestConfig = 4268
AMGetUserCurrentGameInfo = 4269
AMGetUserCurrentGameInfoResponse = 4270
AMGetGSPlayerList = 4271
AMGetGSPlayerListResponse = 4272
AMUpdatePersonaStateCache = 4275

removed

AMGetGameMembers = 4276
AMGetGameMembersResponse = 4277
AMGetSteamIDForMicroTxn = 4278
AMGetSteamIDForMicroTxnResponse = 4279
AMSetPartnerMember = 4280
AMRemovePublisherUser = 4281
AMGetUserLicenseList = 4282
AMGetUserLicenseListResponse = 4283
AMReloadGameGroupPolicy = 4284
AMAddFreeLicenseResponse = 4285
AMVACStatusUpdate = 4286
AMGetAccountDetails = 4287
AMGetAccountDetailsResponse = 4288
AMGetPlayerLinkDetails = 4289
AMGetPlayerLinkDetailsResponse = 4290
AMSubscribeToPersonaFeed = 4291

removed

AMGetUserVacBanList = 4292

removed

AMGetUserVacBanListResponse = 4293

removed

AMGetAccountFlagsForWGSpoofing = 4294
AMGetAccountFlagsForWGSpoofingResponse = 4295
AMGetFriendsWishlistInfo = 4296

removed

AMGetFriendsWishlistInfoResponse = 4297

removed

AMGetClanOfficers = 4298
AMGetClanOfficersResponse = 4299
AMNameChange = 4300
AMGetNameHistory = 4301
AMGetNameHistoryResponse = 4302
AMUpdateProviderStatus = 4305
AMClearPersonaMetadataBlob = 4306

removed

AMSupportRemoveAccountSecurity = 4307
AMIsAccountInCaptchaGracePeriod = 4308
AMIsAccountInCaptchaGracePeriodResponse = 4309
AMAccountPS3UnlinkResponse = 4311
UGSStoreUserStatsResponse = 4312
AMGetAccountPSNInfo = 4313
AMGetAccountPSNInfoResponse = 4314
AMAuthenticatedPlayerList = 4315
AMGetUserGifts = 4316
AMGetUserGiftsResponse = 4317
AMTransferLockedGifts = 4320
AMTransferLockedGiftsResponse = 4321
AMPlayerHostedOnGameServer = 4322
AMGetAccountBanInfo = 4323
AMGetAccountBanInfoResponse = 4324
AMRecordBanEnforcement = 4325
AMRollbackGiftTransfer = 4326
AMRollbackGiftTransferResponse = 4327
AMHandlePendingTransaction = 4328
AMRequestClanDetails = 4329
AMDeleteStoredPaypalAgreement = 4330
AMGameServerUpdate = 4331
AMGameServerRemove = 4332
AMGetPaypalAgreements = 4333
AMGetPaypalAgreementsResponse = 4334
AMGameServerPlayerCompatibilityCheck = 4335
AMGameServerPlayerCompatibilityCheckResponse = 4336
AMRenewLicense = 4337
AMGetAccountCommunityBanInfo = 4338
AMGetAccountCommunityBanInfoResponse = 4339
AMGameServerAccountChangePassword = 4340
AMGameServerAccountDeleteAccount = 4341
AMRenewAgreement = 4342
AMSendEmail = 4343

removed

AMXsollaPayment = 4344
AMXsollaPaymentResponse = 4345
AMAcctAllowedToPurchase = 4346
AMAcctAllowedToPurchaseResponse = 4347
AMSwapKioskDeposit = 4348
AMSwapKioskDepositResponse = 4349
AMSetUserGiftUnowned = 4350
AMSetUserGiftUnownedResponse = 4351
AMClaimUnownedUserGift = 4352
AMClaimUnownedUserGiftResponse = 4353
AMSetClanName = 4354
AMSetClanNameResponse = 4355
AMGrantCoupon = 4356
AMGrantCouponResponse = 4357
AMIsPackageRestrictedInUserCountry = 4358
AMIsPackageRestrictedInUserCountryResponse = 4359
AMHandlePendingTransactionResponse = 4360
AMGrantGuestPasses2 = 4361
AMGrantGuestPasses2Response = 4362
AMSessionQuery = 4363
AMSessionQueryResponse = 4364
AMGetPlayerBanDetails = 4365
AMGetPlayerBanDetailsResponse = 4366
AMFinalizePurchase = 4367
AMFinalizePurchaseResponse = 4368
AMPersonaChangeResponse = 4372
AMGetClanDetailsForForumCreation = 4373
AMGetClanDetailsForForumCreationResponse = 4374
AMGetPendingNotificationCount = 4375
AMGetPendingNotificationCountResponse = 4376
AMPasswordHashUpgrade = 4377
AMMoPayPayment = 4378
AMMoPayPaymentResponse = 4379
AMBoaCompraPayment = 4380
AMBoaCompraPaymentResponse = 4381
AMExpireCaptchaByGID = 4382
AMCompleteExternalPurchase = 4383
AMCompleteExternalPurchaseResponse = 4384
AMResolveNegativeWalletCredits = 4385
AMResolveNegativeWalletCreditsResponse = 4386
AMPayelpPayment = 4387
AMPayelpPaymentResponse = 4388
AMPlayerGetClanBasicDetails = 4389
AMPlayerGetClanBasicDetailsResponse = 4390
AMMOLPayment = 4391
AMMOLPaymentResponse = 4392
GetUserIPCountry = 4393
GetUserIPCountryResponse = 4394
NotificationOfSuspiciousActivity = 4395
AMDegicaPayment = 4396
AMDegicaPaymentResponse = 4397
AMEClubPayment = 4398
AMEClubPaymentResponse = 4399
AMPayPalPaymentsHubPayment = 4400
AMPayPalPaymentsHubPaymentResponse = 4401
AMTwoFactorRecoverAuthenticatorRequest = 4402
AMTwoFactorRecoverAuthenticatorResponse = 4403
AMSmart2PayPayment = 4404
AMSmart2PayPaymentResponse = 4405
AMValidatePasswordResetCodeAndSendSmsRequest = 4406
AMValidatePasswordResetCodeAndSendSmsResponse = 4407
AMGetAccountResetDetailsRequest = 4408
AMGetAccountResetDetailsResponse = 4409
AMBitPayPayment = 4410
AMBitPayPaymentResponse = 4411
AMSendAccountInfoUpdate = 4412
AMSendScheduledGift = 4413
AMNodwinPayment = 4414
AMNodwinPaymentResponse = 4415
AMResolveWalletRevoke = 4416
AMResolveWalletReverseRevoke = 4417
AMFundedPayment = 4418
AMFundedPaymentResponse = 4419
AMRequestPersonaUpdateForChatServer = 4420
AMPerfectWorldPayment = 4421
AMPerfectWorldPaymentResponse = 4422
BasePSRange = 5000
PSCreateShoppingCart = 5001
PSCreateShoppingCartResponse = 5002
PSIsValidShoppingCart = 5003
PSIsValidShoppingCartResponse = 5004
PSAddPackageToShoppingCart = 5005
PSAddPackageToShoppingCartResponse = 5006
PSRemoveLineItemFromShoppingCart = 5007
PSRemoveLineItemFromShoppingCartResponse = 5008
PSGetShoppingCartContents = 5009
PSGetShoppingCartContentsResponse = 5010
PSAddWalletCreditToShoppingCart = 5011
PSAddWalletCreditToShoppingCartResponse = 5012
BaseUFSRange = 5200
ClientUFSUploadFileRequest = 5202
ClientUFSUploadFileResponse = 5203
ClientUFSUploadFileChunk = 5204
ClientUFSUploadFileFinished = 5205
ClientUFSGetFileListForApp = 5206
ClientUFSGetFileListForAppResponse = 5207
ClientUFSDownloadRequest = 5210
ClientUFSDownloadResponse = 5211
ClientUFSDownloadChunk = 5212
ClientUFSLoginRequest = 5213
ClientUFSLoginResponse = 5214
UFSReloadPartitionInfo = 5215
ClientUFSTransferHeartbeat = 5216
UFSSynchronizeFile = 5217
UFSSynchronizeFileResponse = 5218
ClientUFSDeleteFileRequest = 5219
ClientUFSDeleteFileResponse = 5220
UFSDownloadRequest = 5221
UFSDownloadResponse = 5222
UFSDownloadChunk = 5223
ClientUFSGetUGCDetails = 5226
ClientUFSGetUGCDetailsResponse = 5227
UFSUpdateFileFlags = 5228
UFSUpdateFileFlagsResponse = 5229
ClientUFSGetSingleFileInfo = 5230
ClientUFSGetSingleFileInfoResponse = 5231
ClientUFSShareFile = 5232
ClientUFSShareFileResponse = 5233
UFSReloadAccount = 5234
UFSReloadAccountResponse = 5235
UFSUpdateRecordBatched = 5236
UFSUpdateRecordBatchedResponse = 5237
UFSMigrateFile = 5238
UFSMigrateFileResponse = 5239
UFSGetUGCURLs = 5240
UFSGetUGCURLsResponse = 5241
UFSHttpUploadFileFinishRequest = 5242
UFSHttpUploadFileFinishResponse = 5243
UFSDownloadStartRequest = 5244
UFSDownloadStartResponse = 5245
UFSDownloadChunkRequest = 5246
UFSDownloadChunkResponse = 5247
UFSDownloadFinishRequest = 5248
UFSDownloadFinishResponse = 5249
UFSFlushURLCache = 5250
ClientUFSUploadCommit = 5251
ClientUFSUploadCommitResponse = 5252
UFSMigrateFileAppID = 5253
UFSMigrateFileAppIDResponse = 5254
BaseClient2 = 5400
ClientRequestForgottenPasswordEmail = 5401
ClientRequestForgottenPasswordEmailResponse = 5402
ClientCreateAccountResponse = 5403
ClientResetForgottenPassword = 5404
ClientResetForgottenPasswordResponse = 5405
ClientCreateAccount2 = 5406
ClientInformOfResetForgottenPassword = 5407
ClientInformOfResetForgottenPasswordResponse = 5408
ClientAnonUserLogOn_Deprecated = 5409

removed

ClientGamesPlayedWithDataBlob = 5410
ClientUpdateUserGameInfo = 5411
ClientFileToDownload = 5412
ClientFileToDownloadResponse = 5413
ClientLBSSetScore = 5414
ClientLBSSetScoreResponse = 5415
ClientLBSFindOrCreateLB = 5416
ClientLBSFindOrCreateLBResponse = 5417
ClientLBSGetLBEntries = 5418
ClientLBSGetLBEntriesResponse = 5419
ClientMarketingMessageUpdate = 5420

removed

ClientChatDeclined = 5426
ClientFriendMsgIncoming = 5427
ClientAuthList_Deprecated = 5428

removed

ClientTicketAuthComplete = 5429
ClientIsLimitedAccount = 5430
ClientRequestAuthList = 5431
ClientAuthList = 5432
ClientStat = 5433
ClientP2PConnectionInfo = 5434
ClientP2PConnectionFailInfo = 5435
ClientGetNumberOfCurrentPlayers = 5436

removed

ClientGetNumberOfCurrentPlayersResponse = 5437

removed

ClientGetDepotDecryptionKey = 5438
ClientGetDepotDecryptionKeyResponse = 5439
GSPerformHardwareSurvey = 5440
ClientGetAppBetaPasswords = 5441

removed

ClientGetAppBetaPasswordsResponse = 5442

removed

ClientEnableTestLicense = 5443
ClientEnableTestLicenseResponse = 5444
ClientDisableTestLicense = 5445
ClientDisableTestLicenseResponse = 5446
ClientRequestValidationMail = 5448
ClientRequestValidationMailResponse = 5449
ClientCheckAppBetaPassword = 5450
ClientCheckAppBetaPasswordResponse = 5451
ClientToGC = 5452
ClientFromGC = 5453
ClientRequestChangeMail = 5454
ClientRequestChangeMailResponse = 5455
ClientEmailAddrInfo = 5456
ClientPasswordChange3 = 5457
ClientEmailChange3 = 5458
ClientPersonalQAChange3 = 5459
ClientResetForgottenPassword3 = 5460
ClientRequestForgottenPasswordEmail3 = 5461
ClientCreateAccount3 = 5462

removed

ClientNewLoginKey = 5463
ClientNewLoginKeyAccepted = 5464
ClientLogOnWithHash_Deprecated = 5465

removed

ClientStoreUserStats2 = 5466
ClientStatsUpdated = 5467
ClientActivateOEMLicense = 5468
ClientRegisterOEMMachine = 5469
ClientRegisterOEMMachineResponse = 5470
ClientRequestedClientStats = 5480
ClientStat2Int32 = 5481
ClientStat2 = 5482
ClientVerifyPassword = 5483
ClientVerifyPasswordResponse = 5484
ClientDRMDownloadRequest = 5485
ClientDRMDownloadResponse = 5486
ClientDRMFinalResult = 5487
ClientGetFriendsWhoPlayGame = 5488
ClientGetFriendsWhoPlayGameResponse = 5489
ClientOGSBeginSession = 5490
ClientOGSBeginSessionResponse = 5491
ClientOGSEndSession = 5492
ClientOGSEndSessionResponse = 5493
ClientOGSWriteRow = 5494
ClientDRMTest = 5495
ClientDRMTestResult = 5496
ClientServerUnavailable = 5500
ClientServersAvailable = 5501
ClientRegisterAuthTicketWithCM = 5502
ClientGCMsgFailed = 5503
ClientMicroTxnAuthRequest = 5504
ClientMicroTxnAuthorize = 5505
ClientMicroTxnAuthorizeResponse = 5506
ClientAppMinutesPlayedData = 5507
ClientGetMicroTxnInfo = 5508
ClientGetMicroTxnInfoResponse = 5509
ClientMarketingMessageUpdate2 = 5510
ClientDeregisterWithServer = 5511
ClientSubscribeToPersonaFeed = 5512
ClientLogon = 5514
ClientGetClientDetails = 5515
ClientGetClientDetailsResponse = 5516
ClientReportOverlayDetourFailure = 5517
ClientGetClientAppList = 5518
ClientGetClientAppListResponse = 5519
ClientInstallClientApp = 5520
ClientInstallClientAppResponse = 5521
ClientUninstallClientApp = 5522
ClientUninstallClientAppResponse = 5523
ClientSetClientAppUpdateState = 5524
ClientSetClientAppUpdateStateResponse = 5525
ClientRequestEncryptedAppTicket = 5526
ClientRequestEncryptedAppTicketResponse = 5527
ClientWalletInfoUpdate = 5528
ClientLBSSetUGC = 5529
ClientLBSSetUGCResponse = 5530
ClientAMGetClanOfficers = 5531
ClientAMGetClanOfficersResponse = 5532
ClientCheckFileSignature = 5533

removed

ClientCheckFileSignatureResponse = 5534

removed

ClientFriendProfileInfo = 5535
ClientFriendProfileInfoResponse = 5536
ClientUpdateMachineAuth = 5537
ClientUpdateMachineAuthResponse = 5538
ClientReadMachineAuth = 5539
ClientReadMachineAuthResponse = 5540
ClientRequestMachineAuth = 5541
ClientRequestMachineAuthResponse = 5542
ClientScreenshotsChanged = 5543
ClientEmailChange4 = 5544
ClientEmailChangeResponse4 = 5545
ClientGetCDNAuthToken = 5546
ClientGetCDNAuthTokenResponse = 5547
ClientDownloadRateStatistics = 5548
ClientRequestAccountData = 5549
ClientRequestAccountDataResponse = 5550
ClientResetForgottenPassword4 = 5551
ClientHideFriend = 5552
ClientFriendsGroupsList = 5553
ClientGetClanActivityCounts = 5554
ClientGetClanActivityCountsResponse = 5555
ClientOGSReportString = 5556
ClientOGSReportBug = 5557
ClientSentLogs = 5558
ClientLogonGameServer = 5559
AMClientCreateFriendsGroup = 5560
AMClientCreateFriendsGroupResponse = 5561
AMClientDeleteFriendsGroup = 5562
AMClientDeleteFriendsGroupResponse = 5563
AMClientManageFriendsGroup = 5564
AMClientManageFriendsGroupResponse = 5565
AMClientAddFriendToGroup = 5566
AMClientAddFriendToGroupResponse = 5567
AMClientRemoveFriendFromGroup = 5568
AMClientRemoveFriendFromGroupResponse = 5569
ClientAMGetPersonaNameHistory = 5570
ClientAMGetPersonaNameHistoryResponse = 5571
ClientRequestFreeLicense = 5572
ClientRequestFreeLicenseResponse = 5573
ClientDRMDownloadRequestWithCrashData = 5574
ClientAuthListAck = 5575
ClientItemAnnouncements = 5576
ClientRequestItemAnnouncements = 5577
ClientFriendMsgEchoToSender = 5578
ClientChangeSteamGuardOptions = 5579

removed

ClientChangeSteamGuardOptionsResponse = 5580

removed

ClientOGSGameServerPingSample = 5581
ClientCommentNotifications = 5582
ClientRequestCommentNotifications = 5583
ClientPersonaChangeResponse = 5584
ClientRequestWebAPIAuthenticateUserNonce = 5585
ClientRequestWebAPIAuthenticateUserNonceResponse = 5586
ClientPlayerNicknameList = 5587
AMClientSetPlayerNickname = 5588
AMClientSetPlayerNicknameResponse = 5589
ClientCreateAccountProto = 5590
ClientCreateAccountProtoResponse = 5591
ClientGetNumberOfCurrentPlayersDP = 5592
ClientGetNumberOfCurrentPlayersDPResponse = 5593
ClientServiceMethodLegacy = 5594
ClientServiceMethodLegacyResponse = 5595
ClientFriendUserStatusPublished = 5596
ClientCurrentUIMode = 5597
ClientVanityURLChangedNotification = 5598
ClientUserNotifications = 5599
BaseDFS = 5600
DFSGetFile = 5601
DFSInstallLocalFile = 5602
DFSConnection = 5603
DFSConnectionReply = 5604
ClientDFSAuthenticateRequest = 5605
ClientDFSAuthenticateResponse = 5606
ClientDFSEndSession = 5607
DFSPurgeFile = 5608
DFSRouteFile = 5609
DFSGetFileFromServer = 5610
DFSAcceptedResponse = 5611
DFSRequestPingback = 5612
DFSRecvTransmitFile = 5613
DFSSendTransmitFile = 5614
DFSRequestPingback2 = 5615
DFSResponsePingback2 = 5616
ClientDFSDownloadStatus = 5617
DFSStartTransfer = 5618
DFSTransferComplete = 5619
DFSRouteFileResponse = 5620
ClientNetworkingCertRequest = 5621
ClientNetworkingCertRequestResponse = 5622
ClientChallengeRequest = 5623
ClientChallengeResponse = 5624
BadgeCraftedNotification = 5625
ClientNetworkingMobileCertRequest = 5626
ClientNetworkingMobileCertRequestResponse = 5627
BaseMDS = 5800
ClientMDSLoginRequest = 5801

removed

ClientMDSLoginResponse = 5802

removed

ClientMDSUploadManifestRequest = 5803

removed

ClientMDSUploadManifestResponse = 5804

removed

ClientMDSTransmitManifestDataChunk = 5805

removed

ClientMDSHeartbeat = 5806

removed

ClientMDSUploadDepotChunks = 5807

removed

ClientMDSUploadDepotChunksResponse = 5808

removed

ClientMDSInitDepotBuildRequest = 5809

removed

ClientMDSInitDepotBuildResponse = 5810

removed

AMToMDSGetDepotDecryptionKey = 5812
MDSToAMGetDepotDecryptionKeyResponse = 5813
MDSGetVersionsForDepot = 5814

removed

MDSGetVersionsForDepotResponse = 5815

removed

ClientMDSInitWorkshopBuildRequest = 5816

removed

ClientMDSInitWorkshopBuildResponse = 5817

removed

ClientMDSGetDepotManifest = 5818

removed

ClientMDSGetDepotManifestResponse = 5819

removed

ClientMDSGetDepotManifestChunk = 5820

removed

ClientMDSUploadRateTest = 5823

removed

ClientMDSUploadRateTestResponse = 5824

removed

MDSDownloadDepotChunksAck = 5825

removed

MDSContentServerStatsBroadcast = 5826

removed

MDSContentServerConfigRequest = 5827
MDSContentServerConfig = 5828
MDSGetDepotManifest = 5829
MDSGetDepotManifestResponse = 5830
MDSGetDepotManifestChunk = 5831
MDSGetDepotChunk = 5832
MDSGetDepotChunkResponse = 5833
MDSGetDepotChunkChunk = 5834
MDSUpdateContentServerConfig = 5835

removed

MDSGetServerListForUser = 5836
MDSGetServerListForUserResponse = 5837
ClientMDSRegisterAppBuild = 5838

removed

ClientMDSRegisterAppBuildResponse = 5839

removed

ClientMDSSetAppBuildLive = 5840

removed

ClientMDSSetAppBuildLiveResponse = 5841

removed

ClientMDSGetPrevDepotBuild = 5842

removed

ClientMDSGetPrevDepotBuildResponse = 5843

removed

MDSToCSFlushChunk = 5844
ClientMDSSignInstallScript = 5845

removed

ClientMDSSignInstallScriptResponse = 5846

removed

MDSMigrateChunk = 5847
MDSMigrateChunkResponse = 5848
MDSToCSFlushManifest = 5849
CSBase = 6200
CSPing = 6201
CSPingResponse = 6202
GMSBase = 6400
GMSGameServerReplicate = 6401
ClientGMSServerQuery = 6403
GMSClientServerQueryResponse = 6404
AMGMSGameServerUpdate = 6405
AMGMSGameServerRemove = 6406
GameServerOutOfDate = 6407
DeviceAuthorizationBase = 6500
ClientAuthorizeLocalDeviceRequest = 6501
ClientAuthorizeLocalDeviceResponse = 6502
ClientDeauthorizeDeviceRequest = 6503
ClientDeauthorizeDevice = 6504
ClientUseLocalDeviceAuthorizations = 6505
ClientGetAuthorizedDevices = 6506
ClientGetAuthorizedDevicesResponse = 6507
AMNotifySessionDeviceAuthorized = 6508
ClientAuthorizeLocalDeviceNotification = 6509
MMSBase = 6600
ClientMMSCreateLobby = 6601
ClientMMSCreateLobbyResponse = 6602
ClientMMSJoinLobby = 6603
ClientMMSJoinLobbyResponse = 6604
ClientMMSLeaveLobby = 6605
ClientMMSLeaveLobbyResponse = 6606
ClientMMSGetLobbyList = 6607
ClientMMSGetLobbyListResponse = 6608
ClientMMSSetLobbyData = 6609
ClientMMSSetLobbyDataResponse = 6610
ClientMMSGetLobbyData = 6611
ClientMMSLobbyData = 6612
ClientMMSSendLobbyChatMsg = 6613
ClientMMSLobbyChatMsg = 6614
ClientMMSSetLobbyOwner = 6615
ClientMMSSetLobbyOwnerResponse = 6616
ClientMMSSetLobbyGameServer = 6617
ClientMMSLobbyGameServerSet = 6618
ClientMMSUserJoinedLobby = 6619
ClientMMSUserLeftLobby = 6620
ClientMMSInviteToLobby = 6621
ClientMMSFlushFrenemyListCache = 6622
ClientMMSFlushFrenemyListCacheResponse = 6623
ClientMMSSetLobbyLinked = 6624
ClientMMSSetRatelimitPolicyOnClient = 6625
ClientMMSGetLobbyStatus = 6626
ClientMMSGetLobbyStatusResponse = 6627
MMSGetLobbyList = 6628
MMSGetLobbyListResponse = 6629
NonStdMsgBase = 6800
NonStdMsgMemcached = 6801
NonStdMsgHTTPServer = 6802
NonStdMsgHTTPClient = 6803
NonStdMsgWGResponse = 6804
NonStdMsgPHPSimulator = 6805
NonStdMsgChase = 6806
NonStdMsgDFSTransfer = 6807
NonStdMsgTests = 6808
NonStdMsgUMQpipeAAPL = 6809
NonStdMsgSyslog = 6810
NonStdMsgLogsink = 6811
NonStdMsgSteam2Emulator = 6812
NonStdMsgRTMPServer = 6813
NonStdMsgWebSocket = 6814
NonStdMsgRedis = 6815
UDSBase = 7000
ClientUDSP2PSessionStarted = 7001
ClientUDSP2PSessionEnded = 7002
UDSRenderUserAuth = 7003
UDSRenderUserAuthResponse = 7004
ClientInviteToGame = 7005
UDSHasSession = 7006
UDSHasSessionResponse = 7007
MPASBase = 7100
MPASVacBanReset = 7101
KGSBase = 7200
KGSAllocateKeyRange = 7201

removed

KGSAllocateKeyRangeResponse = 7202

removed

KGSGenerateKeys = 7203

removed

KGSGenerateKeysResponse = 7204

removed

KGSRemapKeys = 7205

removed

KGSRemapKeysResponse = 7206

removed

KGSGenerateGameStopWCKeys = 7207

removed

KGSGenerateGameStopWCKeysResponse = 7208

removed

UCMBase = 7300
ClientUCMAddScreenshot = 7301
ClientUCMAddScreenshotResponse = 7302
UCMValidateObjectExists = 7303

removed

UCMValidateObjectExistsResponse = 7304

removed

UCMResetCommunityContent = 7307
UCMResetCommunityContentResponse = 7308
ClientUCMDeleteScreenshot = 7309
ClientUCMDeleteScreenshotResponse = 7310
ClientUCMPublishFile = 7311
ClientUCMPublishFileResponse = 7312
ClientUCMGetPublishedFileDetails = 7313

removed

ClientUCMGetPublishedFileDetailsResponse = 7314

removed

ClientUCMDeletePublishedFile = 7315
ClientUCMDeletePublishedFileResponse = 7316
ClientUCMEnumerateUserPublishedFiles = 7317
ClientUCMEnumerateUserPublishedFilesResponse = 7318
ClientUCMSubscribePublishedFile = 7319

removed

ClientUCMSubscribePublishedFileResponse = 7320

removed

ClientUCMEnumerateUserSubscribedFiles = 7321
ClientUCMEnumerateUserSubscribedFilesResponse = 7322
ClientUCMUnsubscribePublishedFile = 7323

removed

ClientUCMUnsubscribePublishedFileResponse = 7324

removed

ClientUCMUpdatePublishedFile = 7325
ClientUCMUpdatePublishedFileResponse = 7326
UCMUpdatePublishedFile = 7327
UCMUpdatePublishedFileResponse = 7328
UCMDeletePublishedFile = 7329
UCMDeletePublishedFileResponse = 7330
UCMUpdatePublishedFileStat = 7331
UCMUpdatePublishedFileBan = 7332
UCMUpdatePublishedFileBanResponse = 7333
UCMUpdateTaggedScreenshot = 7334

removed

UCMAddTaggedScreenshot = 7335

removed

UCMRemoveTaggedScreenshot = 7336

removed

UCMReloadPublishedFile = 7337
UCMReloadUserFileListCaches = 7338
UCMPublishedFileReported = 7339
UCMUpdatePublishedFileIncompatibleStatus = 7340

removed

UCMPublishedFilePreviewAdd = 7341
UCMPublishedFilePreviewAddResponse = 7342
UCMPublishedFilePreviewRemove = 7343
UCMPublishedFilePreviewRemoveResponse = 7344
UCMPublishedFilePreviewChangeSortOrder = 7345

removed

UCMPublishedFilePreviewChangeSortOrderResponse = 7346

removed

ClientUCMPublishedFileSubscribed = 7347
ClientUCMPublishedFileUnsubscribed = 7348
UCMPublishedFileSubscribed = 7349
UCMPublishedFileUnsubscribed = 7350
UCMPublishFile = 7351
UCMPublishFileResponse = 7352
UCMPublishedFileChildAdd = 7353
UCMPublishedFileChildAddResponse = 7354
UCMPublishedFileChildRemove = 7355
UCMPublishedFileChildRemoveResponse = 7356
UCMPublishedFileChildChangeSortOrder = 7357

removed

UCMPublishedFileChildChangeSortOrderResponse = 7358

removed

UCMPublishedFileParentChanged = 7359
ClientUCMGetPublishedFilesForUser = 7360
ClientUCMGetPublishedFilesForUserResponse = 7361
UCMGetPublishedFilesForUser = 7362

removed

UCMGetPublishedFilesForUserResponse = 7363

removed

ClientUCMSetUserPublishedFileAction = 7364
ClientUCMSetUserPublishedFileActionResponse = 7365
ClientUCMEnumeratePublishedFilesByUserAction = 7366
ClientUCMEnumeratePublishedFilesByUserActionResponse = 7367
ClientUCMPublishedFileDeleted = 7368
UCMGetUserSubscribedFiles = 7369
UCMGetUserSubscribedFilesResponse = 7370
UCMFixStatsPublishedFile = 7371
UCMDeleteOldScreenshot = 7372

removed

UCMDeleteOldScreenshotResponse = 7373

removed

UCMDeleteOldVideo = 7374

removed

UCMDeleteOldVideoResponse = 7375

removed

UCMUpdateOldScreenshotPrivacy = 7376

removed

UCMUpdateOldScreenshotPrivacyResponse = 7377

removed

ClientUCMEnumerateUserSubscribedFilesWithUpdates = 7378
ClientUCMEnumerateUserSubscribedFilesWithUpdatesResponse = 7379
UCMPublishedFileContentUpdated = 7380
ClientUCMPublishedFileUpdated = 7381
ClientWorkshopItemChangesRequest = 7382
ClientWorkshopItemChangesResponse = 7383
ClientWorkshopItemInfoRequest = 7384
ClientWorkshopItemInfoResponse = 7385
FSBase = 7500
ClientRichPresenceUpload = 7501
ClientRichPresenceRequest = 7502
ClientRichPresenceInfo = 7503
FSRichPresenceRequest = 7504
FSRichPresenceResponse = 7505
FSComputeFrenematrix = 7506
FSComputeFrenematrixResponse = 7507
FSPlayStatusNotification = 7508
FSPublishPersonaStatus = 7509

removed

FSAddOrRemoveFollower = 7510
FSAddOrRemoveFollowerResponse = 7511
FSUpdateFollowingList = 7512
FSCommentNotification = 7513
FSCommentNotificationViewed = 7514
ClientFSGetFollowerCount = 7515
ClientFSGetFollowerCountResponse = 7516
ClientFSGetIsFollowing = 7517
ClientFSGetIsFollowingResponse = 7518
ClientFSEnumerateFollowingList = 7519
ClientFSEnumerateFollowingListResponse = 7520
FSGetPendingNotificationCount = 7521
FSGetPendingNotificationCountResponse = 7522
ClientChatOfflineMessageNotification = 7523
ClientChatRequestOfflineMessageCount = 7524
ClientChatGetFriendMessageHistory = 7525
ClientChatGetFriendMessageHistoryResponse = 7526
ClientChatGetFriendMessageHistoryForOfflineMessages = 7527
ClientFSGetFriendsSteamLevels = 7528
ClientFSGetFriendsSteamLevelsResponse = 7529
AMRequestFriendData = 7530
CEGVersionSetEnableDisableRequest = 7600
DRMRange2 = 7600
CEGVersionSetEnableDisableResponse = 7601
CEGPropStatusDRMSRequest = 7602
CEGPropStatusDRMSResponse = 7603
CEGWhackFailureReportRequest = 7604
CEGWhackFailureReportResponse = 7605
DRMSFetchVersionSet = 7606
DRMSFetchVersionSetResponse = 7607
EconBase = 7700
EconTrading_InitiateTradeRequest = 7701
EconTrading_InitiateTradeProposed = 7702
EconTrading_InitiateTradeResponse = 7703
EconTrading_InitiateTradeResult = 7704
EconTrading_StartSession = 7705
EconTrading_CancelTradeRequest = 7706
EconFlushInventoryCache = 7707
EconFlushInventoryCacheResponse = 7708
EconCDKeyProcessTransaction = 7711
EconCDKeyProcessTransactionResponse = 7712
EconGetErrorLogs = 7713
EconGetErrorLogsResponse = 7714
RMRange = 7800
RMTestVerisignOTP = 7800
RMTestVerisignOTPResponse = 7801
RMDeleteMemcachedKeys = 7803
RMRemoteInvoke = 7804
BadLoginIPList = 7805
RMMsgTraceAddTrigger = 7806
RMMsgTraceRemoveTrigger = 7807
RMMsgTraceEvent = 7808
UGSUpdateGlobalStats = 7900
UGSBase = 7900
ClientUGSGetGlobalStats = 7901
ClientUGSGetGlobalStatsResponse = 7902
StoreUpdateRecommendationCount = 8000

removed

StoreBase = 8000
UMQLogonRequest = 8100
UMQBase = 8100
UMQLogonResponse = 8101
UMQLogoffRequest = 8102
UMQLogoffResponse = 8103
UMQSendChatMessage = 8104
UMQIncomingChatMessage = 8105
UMQPoll = 8106
UMQPollResults = 8107
UMQ2AM_ClientMsgBatch = 8108
UMQEnqueueMobileSalePromotions = 8109

removed

UMQEnqueueMobileAnnouncements = 8110

removed

WorkshopAcceptTOSRequest = 8200

removed

WorkshopBase = 8200
WorkshopAcceptTOSResponse = 8201

removed

WebAPIValidateOAuth2Token = 8300
WebAPIBase = 8300
WebAPIValidateOAuth2TokenResponse = 8301
WebAPIInvalidateTokensForAccount = 8302

removed

WebAPIRegisterGCInterfaces = 8303
WebAPIInvalidateOAuthClientCache = 8304
WebAPIInvalidateOAuthTokenCache = 8305
WebAPISetSecrets = 8306
BackpackBase = 8400
BackpackAddToCurrency = 8401
BackpackAddToCurrencyResponse = 8402
CREBase = 8500
CRERankByTrend = 8501

removed

CRERankByTrendResponse = 8502

removed

CREItemVoteSummary = 8503
CREItemVoteSummaryResponse = 8504
CRERankByVote = 8505

removed

CRERankByVoteResponse = 8506

removed

CREUpdateUserPublishedItemVote = 8507
CREUpdateUserPublishedItemVoteResponse = 8508
CREGetUserPublishedItemVoteDetails = 8509
CREGetUserPublishedItemVoteDetailsResponse = 8510
CREEnumeratePublishedFiles = 8511
CREEnumeratePublishedFilesResponse = 8512
CREPublishedFileVoteAdded = 8513
SecretsRequestCredentialPair = 8600
SecretsBase = 8600
SecretsCredentialPairResponse = 8601
SecretsRequestServerIdentity = 8602

removed

SecretsServerIdentityResponse = 8603

removed

SecretsUpdateServerIdentities = 8604

removed

BoxMonitorReportRequest = 8700
BoxMonitorBase = 8700
BoxMonitorReportResponse = 8701
LogsinkWriteReport = 8800
LogsinkBase = 8800
PICSBase = 8900
ClientPICSChangesSinceRequest = 8901
ClientPICSChangesSinceResponse = 8902
ClientPICSProductInfoRequest = 8903
ClientPICSProductInfoResponse = 8904
ClientPICSAccessTokenRequest = 8905
ClientPICSAccessTokenResponse = 8906
WorkerProcess = 9000
WorkerProcessPingRequest = 9000
WorkerProcessPingResponse = 9001
WorkerProcessShutdown = 9002
DRMWorkerProcess = 9100
DRMWorkerProcessDRMAndSign = 9100
DRMWorkerProcessDRMAndSignResponse = 9101
DRMWorkerProcessSteamworksInfoRequest = 9102
DRMWorkerProcessSteamworksInfoResponse = 9103
DRMWorkerProcessInstallDRMDLLRequest = 9104
DRMWorkerProcessInstallDRMDLLResponse = 9105
DRMWorkerProcessSecretIdStringRequest = 9106
DRMWorkerProcessSecretIdStringResponse = 9107
DRMWorkerProcessGetDRMGuidsFromFileRequest = 9108

removed

DRMWorkerProcessGetDRMGuidsFromFileResponse = 9109

removed

DRMWorkerProcessInstallProcessedFilesRequest = 9110
DRMWorkerProcessInstallProcessedFilesResponse = 9111
DRMWorkerProcessExamineBlobRequest = 9112
DRMWorkerProcessExamineBlobResponse = 9113
DRMWorkerProcessDescribeSecretRequest = 9114
DRMWorkerProcessDescribeSecretResponse = 9115
DRMWorkerProcessBackfillOriginalRequest = 9116
DRMWorkerProcessBackfillOriginalResponse = 9117
DRMWorkerProcessValidateDRMDLLRequest = 9118
DRMWorkerProcessValidateDRMDLLResponse = 9119
DRMWorkerProcessValidateFileRequest = 9120
DRMWorkerProcessValidateFileResponse = 9121
DRMWorkerProcessSplitAndInstallRequest = 9122
DRMWorkerProcessSplitAndInstallResponse = 9123
DRMWorkerProcessGetBlobRequest = 9124
DRMWorkerProcessGetBlobResponse = 9125
DRMWorkerProcessEvaluateCrashRequest = 9126
DRMWorkerProcessEvaluateCrashResponse = 9127
DRMWorkerProcessAnalyzeFileRequest = 9128
DRMWorkerProcessAnalyzeFileResponse = 9129
DRMWorkerProcessUnpackBlobRequest = 9130
DRMWorkerProcessUnpackBlobResponse = 9131
DRMWorkerProcessInstallAllRequest = 9132
DRMWorkerProcessInstallAllResponse = 9133
TestWorkerProcess = 9200
TestWorkerProcessLoadUnloadModuleRequest = 9200
TestWorkerProcessLoadUnloadModuleResponse = 9201
TestWorkerProcessServiceModuleCallRequest = 9202
TestWorkerProcessServiceModuleCallResponse = 9203
QuestServerBase = 9300
ClientGetEmoticonList = 9330
ClientEmoticonList = 9331
SLCUserSessionStatus = 9400
SLCBase = 9400
SLCRequestUserSessionStatus = 9401
SLCSharedLicensesLockStatus = 9402
ClientSharedLicensesLockStatus = 9403

removed

ClientSharedLicensesStopPlaying = 9404

removed

ClientSharedLibraryLockStatus = 9405
ClientSharedLibraryStopPlaying = 9406
SLCOwnerLibraryChanged = 9407
SLCSharedLibraryChanged = 9408
RemoteClientAuth_OBSOLETE = 9500
RemoteClientBase = 9500
RemoteClientAuthResponse_OBSOLETE = 9501
RemoteClientAppStatus = 9502
RemoteClientStartStream = 9503
RemoteClientStartStreamResponse = 9504
RemoteClientPing = 9505
RemoteClientPingResponse = 9506
ClientUnlockStreaming = 9507
ClientUnlockStreamingResponse = 9508
RemoteClientAcceptEULA = 9509
RemoteClientGetControllerConfig = 9510
RemoteClientGetControllerConfigResponse = 9511
RemoteClientStreamingEnabled = 9512
ClientUnlockHEVC = 9513
ClientUnlockHEVCResponse = 9514
RemoteClientStatusRequest = 9515
RemoteClientStatusResponse = 9516
ClientPlayingSessionState = 9600
ClientConcurrentSessionsBase = 9600
ClientKickPlayingSession = 9601
ClientBroadcastInit = 9700

removed

ClientBroadcastBase = 9700
ClientBroadcastFrames = 9701
ClientBroadcastDisconnect = 9702
ClientBroadcastScreenshot = 9703
ClientBroadcastUploadConfig = 9704
ClientVoiceCallPreAuthorize = 9800

removed

BaseClient3 = 9800
ClientVoiceCallPreAuthorizeResponse = 9801
ClientServerTimestampRequest = 9802
ClientServerTimestampResponse = 9803
ClientLANP2PRequestChunk = 9900
ClientLANP2PBase = 9900
ClientLANP2PRequestChunkResponse = 9901
ClientLANP2PMax = 9999
NotifyWatchdog = 10000
ClientSiteLicenseSiteInfoNotification = 10100
ClientSiteLicenseBase = 10100
ClientSiteLicenseCheckout = 10101
ClientSiteLicenseCheckoutResponse = 10102
ClientSiteLicenseGetAvailableSeats = 10103
ClientSiteLicenseGetAvailableSeatsResponse = 10104
ClientSiteLicenseGetContentCacheInfo = 10105
ClientSiteLicenseGetContentCacheInfoResponse = 10106
ChatServerGetPendingNotificationCount = 12000
BaseChatServer = 12000
ChatServerGetPendingNotificationCountResponse = 12001
ServerSecretChanged = 12100
BaseSecretServer = 12100

exceptions

exception steam.exceptions.SteamError(message, eresult=<EResult.Fail: 2>)

Bases: Exception

General error that also carries EResult code

eresult = None

EResult

exception steam.exceptions.ManifestError(message, app_id, depot_id, manifest_gid, error=None)

Bases: steam.exceptions.SteamError

Raised when there a problem getting a manifest by CDNClient Encapsulates original exception in error and includes manifest details

game_servers

Master Server Query Protocol

This module implements the legacy Steam master server protocol.

https://developer.valvesoftware.com/wiki/Master_Server_Query_Protocol

Nowadays games query servers through Steam. See steam.client.builtins.gameservers

Filters

Note

Multiple filters can be joined to together (Eg. \appid\730\white\1\empty\1)

Filter code What it does
\nor\[x] A special filter, specifies that servers matching any of the following [x] conditions should not be returned
\nand\[x] A special filter, specifies that servers matching all of the following [x] conditions should not be returned
\dedicated\1 Servers running dedicated
\secure\1 Servers using anti-cheat technology (VAC, but potentially others as well)
\gamedir\[mod] Servers running the specified modification (ex. cstrike)
\map\[map] Servers running the specified map (ex. cs_italy)
\linux\1 Servers running on a Linux platform
\password\0 Servers that are not password protected
\empty\1 Servers that are not empty
\full\1 Servers that are not full
\proxy\1 Servers that are spectator proxies
\appid\[appid] Servers that are running game [appid]
\napp\[appid] Servers that are NOT running game [appid] (This was introduced to block Left 4 Dead games from the Steam Server Browser)
\noplayers\1 Servers that are empty
\white\1 Servers that are whitelisted
\gametype\[tag,…] Servers with all of the given tag(s) in sv_tags
\gamedata\[tag,…] Servers with all of the given tag(s) in their ‘hidden’ tags (L4D2)
\gamedataor\[tag,…] Servers with any of the given tag(s) in their ‘hidden’ tags (L4D2)
\name_match\[hostname] Servers with their hostname matching [hostname] (can use * as a wildcard)
\version_match\[version] Servers running version [version] (can use * as a wildcard)
\collapse_addr_hash\1 Return only one server for each unique IP address matched
\gameaddr\[ip] Return only servers on the specified IP address (port supported and optional)
Examples

Query HL Master

>>> for server_addr in gs.query_master(r'\appid\730\white\1', max_servers=3):
...     print(server_addr)
...
('146.66.152.197', 27073)
('146.66.153.124', 27057)
('146.66.152.56', 27053)

Team Fortress 2 (Source)

>>> from steam import game_servers as gs
>>> server_addr = next(gs.query_master(r'\appid\40\empty\1\secure\1'))  # single TF2 Server
>>> gs.a2s_ping(server_addr)
68.60899925231934
>>> gs.a2s_info(server_addr)
{'_ping': 74.61714744567871,
 '_type': 'source',
 'app_id': 40,
 'bots': 0,
 'environment': 'l',
 'folder': u'dmc',
 'game': u'DMC\t\t\t\t\t\t\t\t1',
 'map': u'crossfire',
 'max_players': 32,
 'name': u'\t\t\u2605\t\t All Guns party \u2605\t \tCrossfire 24/7\t\t',
 'players': 21,
 'protocol': 48,
 'server_type': 'd',
 'vac': 1,
 'visibility': 0}
>>> gs.a2s_players(server_addr)
[{'duration': 192.3097381591797, 'index': 0, 'name': '(2)Player', 'score': 4},
 {'duration': 131.6618194580078, 'index': 1, 'name': 'BOLT', 'score': 2},
 {'duration': 16.548809051513672, 'index': 2, 'name': 'Alpha', 'score': 0},
 {'duration': 1083.1539306640625, 'index': 3, 'name': 'Player', 'score': 29},
 {'duration': 446.7716064453125, 'index': 4, 'name': '(1)Player', 'score': 11},
 {'duration': 790.9588012695312, 'index': 5, 'name': 'ИВАНГАЙ', 'score': 11}]
>>> gs.a2s_rules(server_addr)
{'amx_client_languages': 1,
 'amx_nextmap': 'crossfire',
 'amx_timeleft': '00:00',
 'amxmodx_version': '1.8.2',
 ....

Ricohet (GoldSrc)

>>> from steam import game_servers as gs
>>> server_addr = next(gs.query_master(r'\appid\60'))  # get a single ip from hl2 master
>>> gs.a2s_info(server_addr, force_goldsrc=True)       # only accept goldsrc response
{'_ping': 26.59320831298828,
 '_type': 'goldsrc',
 'address': '127.0.0.1:27050',
 'bots': 0,
 'ddl': 0,
 'download_link': '',
 'environment': 'w',
 'folder': 'ricochet',
 'game': 'Ricochet',
 'link': '',
 'map': 'rc_deathmatch2',
 'max_players': 32,
 'mod': 1,
 'name': 'Anitalink.com Ricochet',
 'players': 1,
 'protocol': 47,
 'server_type': 'd',
 'size': 0,
 'type': 1,
 'vac': 1,
 'version': 1,
 'visibility': 0}
API
steam.game_servers.query_master(filter_text='\\nappid\\500', max_servers=20, region=<MSRegion.World: 255>, master=('hl2master.steampowered.com', 27011), timeout=2)

Generator that returns (IP,port) pairs of servers

Warning

Valve’s master servers seem to be heavily rate limited. Queries that return a large numbers IPs will timeout before returning everything. There is no way to resume the query. Use SteamClient to access game servers in a reliable way.

Note

When specifying filter_text use raw strings otherwise python won’t treat backslashes as literal characters (e.g. query(r'\appid\730\white\1'))

Parameters:
  • filter_text (str) – filter for servers
  • region (MSRegion) – (optional) region code
  • master ((str, int)) – (optional) master server to query
Raises:

RuntimeError, socket.timeout

Returns:

a generator yielding (ip, port) pairs

Return type:

generator

steam.game_servers.a2s_info(server_addr, timeout=2, force_goldsrc=False, challenge=0)

Get information from a server

Note

All GoldSrc games have been updated to reply in Source format. GoldSrc format is essentially DEPRECATED. By default the function will prefer to return Source format, and will automatically fallback to GoldSrc if available.

Parameters:
  • server_addr (tuple) – (ip, port) for the server
  • force_goldsrc (bool) – (optional) only accept GoldSrc response format
  • timeout (float) – (optional) timeout in seconds
  • challenge (int) – (optional) optionally supply a challenge in accordance to a2s protocol changes from December 2020
Raises:

RuntimeError, socket.timeout

Returns:

a dict with information or None on timeout

Return type:

dict

steam.game_servers.a2s_players(server_addr, timeout=2, challenge=0)

Get list of players and their info

Parameters:
  • server_addr (tuple) – (ip, port) for the server
  • timeout (float) – (optional) timeout in seconds
  • challenge (int) – (optional) challenge number
Raises:

RuntimeError, socket.timeout

Returns:

a list of players

Return type:

list

steam.game_servers.a2s_rules(server_addr, timeout=2, challenge=0, binary=False)

Get rules from server

Parameters:
  • server_addr (tuple) – (ip, port) for the server
  • timeout (float) – (optional) timeout in seconds
  • challenge (int) – (optional) challenge number
  • binary (bool) – (optional) return rules as raw bytes
Raises:

RuntimeError, socket.timeout

Returns:

a list of rules

Return type:

dict

steam.game_servers.a2s_ping(server_addr, timeout=2)

Ping a server

Warning

This method for pinging is considered deprecated and may not work on certian servers. Use a2s_info() instead.

Parameters:
  • server_addr (tuple) – (ip, port) for the server
  • timeout (float) – (optional) timeout in seconds
Raises:

RuntimeError, socket.timeout

Returns:

ping response in milliseconds or None for timeout

Return type:

float

globalid

class steam.globalid.GlobalID(*args, **kwargs)

Bases: int

Represents a globally unique identifier within the Steam network. Guaranteed to be unique across all racks and servers for a given Steam universe.

static new(sequence_count, start_time, process_id, box_id)

Make new GlobalID

Parameters:
  • sequence_count (int) – sequence count
  • start_time (str, datetime) – start date time of server (must be after 2005-01-01)
  • process_id (int) – process id
  • box_id (int) – box id
Returns:

Global ID integer

Return type:

int

sequence_count
Returns:sequence count for GID
Return type:int
start_time_seconds
Returns:seconds since 2005-01-01
Return type:int
start_time
Returns:start time of the server that generated this GID
Return type:datetime
process_id
Returns:process id of server
Return type:int
box_id
Returns:box id of server
Return type:int

guard

This submodule contains various functionality related to Steam Guard.

SteamAuthenticator provides methods for genereating codes and enabling 2FA on a Steam account. Operations managing the authenticator on an account require an instance of either MobileWebAuth or SteamClient. The instance needs to be logged in.

Adding an authenticator

wa = MobileWebAuth('steamuser')
wa.cli_login()

sa = SteamAuthenticator(backend=wa)
sa.add()    # SMS code will be send to the account's phone number
sa.secrets  # dict with authenticator secrets (SAVE THEM!!)

# save the secrets, for example to a file
json.dump(sa.secrets, open('./mysecrets.json', 'w'))

# HINT: You can stop here and add authenticator on your phone.
#       The secrets will be the same, and you will be able to
#       both use your phone and SteamAuthenticator.

sa.finalize('SMS CODE')  # activate the authenticator
sa.get_code()  # generate 2FA code for login
sa.remove()  # removes the authenticator from the account

Warning

Before you finalize the authenticator, make sure to save your secrets. Otherwise you will lose access to the account.

Once authenticator is enabled all you need is the secrets to generate codes.

secrets = json.load(open('./mysecrets.json'))

sa = SteamAuthenticator(secrets)
sa.get_code()

You can obtain the authenticator secrets from an Android device using extract_secrets_from_android_rooted(). See the function docstring for details on what is required for it to work.

Format of secrets.json file:

{
    "account_name": "<username>",               # account username
    "identity_secret": "<base64 encoded>",      # unknown
    "revocation_code": "R51234",                # revocation code
    "secret_1": "<base54 encoded>",             # unknown
    "serial_number": "1111222333344445555",     # serial number
    "server_time": "1600000000",                # creation timestamp
    "shared_secret": "<base65 encoded>",        # secret used for code generation
    "status": 1,                                # status, 1 = token active
    "token_gid": "a1a1a1a1a1a1a1a1",            # token gid
    "uri": "otpauth://totp/Steam:<username>?secret=<base32 encoded shared seceret>&issuer=Steam"
}
class steam.guard.SteamAuthenticator(secrets=None, backend=None)

Add/Remove authenticator from an account. Generate 2FA and confirmation codes.

Parameters:
steam_time_offset = None

offset from steam server time

align_time_every = 0

how often to align time with Steam (0 never, otherwise interval in seconds)

secrets = None

dict with authenticator secrets

backend = None

instance of MobileWebAuth or SteamClient

get_time()
Returns:Steam aligned timestamp
Return type:int
get_code(timestamp=None)
Parameters:timestamp (int) – time to use for code generation
Returns:two factor code
Return type:str
get_confirmation_key(tag='', timestamp=None)
Parameters:
Returns:

trade confirmation key

Return type:

str

add()

Add authenticator to an account. The account’s phone number will receive a SMS code required for finalize().

Raises:SteamAuthenticatorError
finalize(activation_code)

Finalize authenticator with received SMS code

Parameters:activation_code (str) – SMS code
Raises:SteamAuthenticatorError
remove(revocation_code=None)

Remove authenticator

Parameters:revocation_code (str) – revocation code for account (e.g. R12345)

Note

After removing authenticator Steam Guard will be set to email codes

Warning

Doesn’t work via SteamClient. Disabled by Valve

Raises:SteamAuthenticatorError
status()

Fetch authenticator status for the account

Raises:SteamAuthenticatorError
Returns:dict with status parameters
Return type:dict
create_emergency_codes(code=None)

Generate emergency codes

Parameters:code (str) – SMS code
Raises:SteamAuthenticatorError
Returns:list of codes
Return type:list

Note

A confirmation code is required to generate emergency codes and this method needs to be called twice as shown below.

sa.create_emergency_codes()              # request a SMS code
sa.create_emergency_codes(code='12345')  # creates emergency codes
destroy_emergency_codes()

Destroy all emergency codes

Raises:SteamAuthenticatorError
add_phone_number(phone_number)

Add phone number to account

Steps:

  1. Call add_phone_number() then check email_confirmation key in the response
    1. On True, user needs to click link in email, then step 2
    2. On False, SMS code is sent, go to step 3
  2. Confirm email via confirm_email(), SMS code is sent
  3. Finalize phone number with SMS code confirm_phone_number(sms_code)()
Parameters:phone_number (str) – phone number with country code
Returns:see example below
Return type:dict
{'success': True,
 'email_confirmation': True,
 'error_text': '',
 'fatal': False}
confirm_email()

Confirm email confirmation. See add_phone_number()

Note

If email_confirmation is True, then user hasn’t clicked the link yet.

Returns:see example below
Return type:dict
{'success': True,
 'email_confirmation': True,
 'error_text': '',
 'fatal': False}
confirm_phone_number(sms_code)

Confirm phone number with the recieved SMS code. See add_phone_number()

Parameters:sms_code (str) – sms code
Returns:see example below
Return type:dict
{'success': True,
 'error_text': '',
 'fatal': False}
has_phone_number()

Check whether the account has a verified phone number

Returns:see example below
Return type:dict
{'success': True,
 'has_phone': True,
 'error_text': '',
 'fatal': False}
validate_phone_number(phone_number)

Test whether phone number is valid for Steam

Parameters:phone_number (str) – phone number with country code
Returns:see example below
Return type:dict
{'is_fixed': False,
 'is_valid': False,
 'is_voip': True,
 'number': '+1 123-555-1111',
 'success': True}
exception steam.guard.SteamAuthenticatorError
steam.guard.generate_twofactor_code(shared_secret)

Generate Steam 2FA code for login with current time

Parameters:shared_secret (bytes) – authenticator shared shared_secret
Returns:steam two factor code
Return type:str
steam.guard.generate_twofactor_code_for_time(shared_secret, timestamp)

Generate Steam 2FA code for timestamp

Parameters:
  • shared_secret (bytes) – authenticator shared secret
  • timestamp (int) – timestamp to use, if left out uses current time
Returns:

steam two factor code

Return type:

str

steam.guard.generate_confirmation_key(identity_secret, tag, timestamp)

Generate confirmation key for trades. Can only be used once.

Parameters:
  • identity_secret (bytes) – authenticator identity secret
  • tag (str) – tag identifies what the request, see list below
  • timestamp (int) – timestamp to use for generating key
Returns:

confirmation key

Return type:

bytes

Tag choices:

  • conf to load the confirmations page
  • details to load details about a trade
  • allow to confirm a trade
  • cancel to cancel a trade
steam.guard.get_time_offset()

Get time offset from steam server time via WebAPI

Returns:time offset (None when Steam WebAPI fails to respond)
Return type:int, None
steam.guard.generate_device_id(steamid)

Generate Android device id

Parameters:steamid (SteamID, int) – Steam ID
Returns:android device id
Return type:str
steam.guard.extract_secrets_from_android_rooted(adb_path='adb')

Extract Steam Authenticator secrets from a rooted Android device

Prerequisite for this to work:

  • rooted android device
  • adb binary
  • device in debug mode, connected and paired

Note

If you know how to make this work, without requiring the device to be rooted, please open a issue on github. Thanks

Parameters:adb_path (str) – path to adb binary
Raises:When there is any problem
Returns:all secrets from the device, steamid as key
Return type:dict

monkey

Helper moduel for calling gevent monkey patch functions. This only need to if want to make stdlib gevent cooperative. The patches need to be applied before any other module imports.

See gevent.monkey for details

import steam.monkey
steam.monkey.patch_minimal()

import requests
from steam.client import SteamClient, EMsg
steam.monkey.patch_minimal()

This method needs to be called before any other imports

It calls gevent.monkey.patch_socket() and gevent.monkey.patch_ssl()

steamid

class steam.steamid.SteamID(*args, **kwargs)

Bases: int

Object for converting steamID to its’ various representations

SteamID()  # invalid steamid
SteamID(12345)  # accountid
SteamID('12345')
SteamID(id=12345, type='Invalid', universe='Invalid', instance=0)
SteamID(103582791429521412)  # steam64
SteamID('103582791429521412')
SteamID('STEAM_1:0:2')  # steam2
SteamID('[g:1:4]')  # steam3
class EType

Bases: steam.enums.base.SteamIntEnum

Doc: https://partner.steamgames.com/doc/api/steam_api#EAccountType

AnonGameServer = 4
AnonUser = 10
Chat = 8
Clan = 7
ConsoleUser = 9
ContentServer = 6
GameServer = 3
Individual = 1
Invalid = 0
Max = 11
Multiseat = 2
Pending = 5
class EUniverse

Bases: steam.enums.base.SteamIntEnum

Doc: https://partner.steamgames.com/doc/api/steam_api#EUniverse

Beta = 2
Dev = 4
Internal = 3
Invalid = 0
Max = 6
Public = 1
class EInstanceFlag

Bases: steam.enums.base.SteamIntEnum

An enumeration.

Clan = 524288
Lobby = 262144
MMSLobby = 131072
id
Returns:account id
Return type:int
account_id
Returns:account id
Return type:int
instance
Return type:int
type
Return type:steam.enum.EType
universe
Return type:steam.enum.EUniverse
as_32
Returns:account id
Return type:int
as_64
Returns:steam64 format
Return type:int
as_steam2
Returns:steam2 format (e.g STEAM_1:0:1234)
Return type:str

Note

STEAM_X:Y:Z. The value of X should represent the universe, or 1 for Public. However, there was a bug in GoldSrc and Orange Box games and X was 0. If you need that format use SteamID.as_steam2_zero

as_steam2_zero

For GoldSrc and Orange Box games. See SteamID.as_steam2

Returns:steam2 format (e.g STEAM_0:0:1234)
Return type:str
as_steam3
Returns:steam3 format (e.g [U:1:1234])
Return type:str
as_invite_code
Returns:s.team invite code format (e.g. cv-dgb)
Return type:str
as_csgo_friend_code
Returns:CS:GO Friend code (e.g. AEBJA-ABDC)
Return type:str
invite_url
Returns:e.g https://s.team/p/cv-dgb
Return type:str
community_url
Returns:e.g https://steamcommunity.com/profiles/123456789
Return type:str
is_valid()

Check whether this SteamID is valid

Return type:bool
static from_csgo_friend_code(code, universe=<EUniverse.Public: 1>)

Takes CS:GO friend code and returns SteamID

Parameters:
  • code (str) – CS:GO friend code (e.g. AEBJA-ABDC)
  • universe (EType) – Steam universe (default: Public)
Returns:

SteamID instance

Return type:

SteamID or None

static from_invite_code(code, universe=<EUniverse.Public: 1>)

Invites urls can be generated at https://steamcommunity.com/my/friends/add

Parameters:
  • code (str) – invite code (e.g. https://s.team/p/cv-dgb, cv-dgb)
  • universe (EType) – Steam universe (default: Public)
Returns:

(accountid, type, universe, instance)

Return type:

tuple or None

static from_url(url, http_timeout=30)

Takes Steam community url and returns a SteamID instance or None

See steam64_from_url() for details

Parameters:
  • url (str) – steam community url
  • http_timeout (int) – how long to wait on http request before turning None
Returns:

SteamID instance

Return type:

steam.SteamID or None

steam.steamid.steam2_to_tuple(value)
Parameters:value (str) – steam2 (e.g. STEAM_1:0:1234)
Returns:(accountid, type, universe, instance)
Return type:tuple or None

Note

The universe will be always set to 1. See SteamID.as_steam2

steam.steamid.steam3_to_tuple(value)
Parameters:value (str) – steam3 (e.g. [U:1:1234])
Returns:(accountid, type, universe, instance)
Return type:tuple or None
steam.steamid.steam64_from_url(url, http_timeout=30)

Takes a Steam Community url and returns steam64 or None

Warning

Each call makes a http request to steamcommunity.com

Note

For a reliable resolving of vanity urls use ISteamUser.ResolveVanityURL web api

Parameters:
  • url (str) – steam community url
  • http_timeout (int) – how long to wait on http request before turning None
Returns:

steam64, or None if steamcommunity.com is down

Return type:

int or None

Example URLs:

https://steamcommunity.com/gid/[g:1:4]
https://steamcommunity.com/gid/103582791429521412
https://steamcommunity.com/groups/Valve
https://steamcommunity.com/profiles/[U:1:12]
https://steamcommunity.com/profiles/76561197960265740
https://steamcommunity.com/id/johnc
https://steamcommunity.com/user/cv-dgb/
steam.steamid.from_url(url, http_timeout=30)

Takes Steam community url and returns a SteamID instance or None

See steam64_from_url() for details

Parameters:
  • url (str) – steam community url
  • http_timeout (int) – how long to wait on http request before turning None
Returns:

SteamID instance

Return type:

steam.SteamID or None

webapi

WebAPI provides a thin wrapper over Steam’s Web API

It is very friendly to exploration and prototyping when using ipython, notebooks or similar. The key will determine what WebAPI interfaces and methods are available.

Note

Some endpoints don’t require a key

Currently the WebAPI can be accessed via one of two API hosts. See APIHost.

Example code:

>>> api = WebAPI(key)
>>> api.call('ISteamUser.ResolveVanityURL', vanityurl="valve", url_type=2)
>>> api.ISteamUser.ResolveVanityURL(vanityurl="valve", url_type=2)
>>> api.ISteamUser.ResolveVanityURL_v1(vanityurl="valve", url_type=2)
{'response': {'steamid': '103582791429521412', 'success': 1}}

All globals params (key, https, format, raw) can be specified on per call basis.

>>> print a.ISteamUser.ResolveVanityURL(format='vdf', raw=True, vanityurl="valve", url_type=2)
"response"
{
        "steamid"       "103582791429521412"
        "success"       "1"
}
class steam.webapi.APIHost

Enum of currently available API hosts.

Public = 'api.steampowered.com'

available over HTTP (port 80) and HTTPS (port 443)

Partner = 'partner.steam-api.com'

available over HTTPS (port 443) only

Note

Key is required for every request. If not supplied you will get HTTP 403.

class steam.webapi.WebAPI(key, format='json', raw=False, https=True, http_timeout=30, apihost='api.steampowered.com', auto_load_interfaces=True)

Steam WebAPI wrapper

Note

Interfaces and methods are populated automatically from Steam WebAPI.

Parameters:
  • key (str) – api key from https://steamcommunity.com/dev/apikey
  • format (str) – response format, either (json, vdf, or xml) only when raw=False
  • raw (class:bool) – return raw response
  • https (bool) – use https
  • http_timeout (int) – HTTP timeout in seconds
  • apihost (str) – api hostname, see APIHost
  • auto_load_interfaces (bool) – load interfaces from the Steam WebAPI

These can be specified per method call for one off calls

key = None

api key

format = 'json'

format (json, vdf, or xml)

raw = False

return raw reponse or parse

https = True

use https or not

http_timeout = 30

HTTP timeout in seconds

apihost = 'api.steampowered.com'

..versionadded:: 0.8.3 apihost hostname

interfaces = []

list of all interfaces

session = None

requests.Session from make_requests_session()

fetch_interfaces()

Returns a dict with the response from GetSupportedAPIList

Returns:dict of all interfaces and methods

The returned value can passed to load_interfaces()

load_interfaces(interfaces_dict)

Populates the namespace under the instance

call(method_path, **kwargs)

Make an API call for specific method

Parameters:
  • method_path (str) – format Interface.Method (e.g. ISteamWebAPIUtil.GetServerInfo)
  • kwargs – keyword arguments for the specific method
Returns:

response

Return type:

dict, lxml.etree.Element or str

doc()
Returns:Documentation for all interfaces and their methods
Return type:str
class steam.webapi.WebAPIInterface(interface_dict, parent)
doc()
Returns:Documentation for all methods on this interface
Return type:str
class steam.webapi.WebAPIMethod(method_dict, parent)
doc()
Returns:Documentation for this method
Return type:str
steam.webapi.webapi_request(url, method='GET', caller=None, session=None, params=None)

Low level function for calling Steam’s WebAPI

Changed in version 0.8.3.

Parameters:
  • url (str) – request url (e.g. https://api.steampowered.com/A/B/v001/)
  • method (str) – HTTP method (GET or POST)
  • caller – caller reference, caller.last_response is set to the last response
  • params (dict) – dict of WebAPI and endpoint specific params
  • session (requests.Session) – an instance requests session, or one is created per call
Returns:

response based on paramers

Return type:

dict, lxml.etree.Element, str

steam.webapi.get(interface, method, version=1, apihost='api.steampowered.com', https=True, caller=None, session=None, params=None)

Send GET request to an API endpoint

New in version 0.8.3.

Parameters:
  • interface (str) – interface name
  • method (str) – method name
  • version (int) – method version
  • apihost (str) – API hostname
  • https (bool) – whether to use HTTPS
  • params (dict) – parameters for endpoint
Returns:

endpoint response

Return type:

dict, lxml.etree.Element, str

steam.webapi.post(interface, method, version=1, apihost='api.steampowered.com', https=True, caller=None, session=None, params=None)

Send POST request to an API endpoint

New in version 0.8.3.

Parameters:
  • interface (str) – interface name
  • method (str) – method name
  • version (int) – method version
  • apihost (str) – API hostname
  • https (bool) – whether to use HTTPS
  • params (dict) – parameters for endpoint
Returns:

endpoint response

Return type:

dict, lxml.etree.Element, str

webauth

This module simplifies the process of obtaining an authenticated session for steam websites. After authentication is completed, a requests.Session is created containing the auth cookies. The session can be used to access steamcommunity.com, store.steampowered.com, and help.steampowered.com.

Warning

A web session may expire randomly, or when you login from different IP address. Some pages will return status code 401 when that happens. Keep in mind if you are trying to write robust code.

Note

If you are using SteamClient take a look at SteamClient.get_web_session()

Note

If you need to authenticate as a mobile device for things like trading confirmations use MobileWebAuth instead. The login process is identical, and in addition you will get oauth_token.

Example usage:

import steam.webauth as wa

user = wa.WebAuth('username')

# At a console, cli_login can be used to easily perform all login steps
session = user.cli_login('password')
session.get('https://store.steampowered.com/account/history')

# Or the login steps be implemented for other situation like so
try:
    user.login('password')
except (wa.CaptchaRequired, wa.LoginIncorrect) as exp:
    if isinstance(exp, LoginIncorrect):
        # ask for new password
    else:
        password = self.password

    if isinstance(exp, wa.CaptchaRequired):
        print user.captcha_url
        # ask a human to solve captcha
    else:
        captcha = None

    user.login(password=password, captcha=captcha)
except wa.EmailCodeRequired:
    user.login(email_code='ZXC123')
except wa.TwoFactorCodeRequired:
    user.login(twofactor_code='ZXC123')

user.session.get('https://store.steampowered.com/account/history/')
class steam.webauth.WebAuth(username, password='')

Bases: object

key = None
logged_on = False

whether authentication has been completed successfully

session_id = None

str, session id string

captcha_gid = -1
captcha_code = ''
steam_id = None

SteamID (after auth is completed)

session = None

requests.Session (with auth cookies after auth is completed)

captcha_url

If a captch is required this property will return url to the image, or None

get_rsa_key(username)

Get rsa key for a given username

Parameters:username (str) – username
Returns:json response
Return type:dict
Raises:HTTPError – any problem with http request, timeouts, 5xx, 4xx etc
login(password='', captcha='', email_code='', twofactor_code='', language='english')

Attempts web login and returns on a session with cookies set

Parameters:
  • password (str) – password, if it wasn’t provided on instance init
  • captcha (str) – text reponse for captcha challenge
  • email_code (str) – email code for steam guard
  • twofactor_code (str) – 2FA code for steam guard
  • language (str) – select language for steam web pages (sets language cookie)
Returns:

a session on success and None otherwise

Return type:

requests.Session, None

Raises:
cli_login(password='', captcha='', email_code='', twofactor_code='', language='english')

Generates CLI prompts to perform the entire login process

Parameters:
  • password (str) – password, if it wasn’t provided on instance init
  • captcha (str) – text reponse for captcha challenge
  • email_code (str) – email code for steam guard
  • twofactor_code (str) – 2FA code for steam guard
  • language (str) – select language for steam web pages (sets language cookie)
Returns:

a session on success and None otherwise

Return type:

requests.Session, None

In [3]: user.cli_login()
Enter password for 'steamuser':
Solve CAPTCHA at https://steamcommunity.com/login/rendercaptcha/?gid=1111111111111111111
CAPTCHA code: 123456
Invalid password for 'steamuser'. Enter password:
Solve CAPTCHA at https://steamcommunity.com/login/rendercaptcha/?gid=2222222222222222222
CAPTCHA code: abcdef
Enter 2FA code: AB123
Out[3]: <requests.sessions.Session at 0x6fffe56bef0>
class steam.webauth.MobileWebAuth(username, password='')

Bases: steam.webauth.WebAuth

Identical to WebAuth, except it authenticates as a mobile device.

oauth_token = None

holds oauth_token after successful login

oauth_login(oauth_token='', steam_id='', language='english')

Attempts a mobile authenticator login using an oauth token, which can be obtained from a previously logged-in MobileWebAuth

Parameters:
  • oauth_token (str) – oauth token string, if it wasn’t provided on instance init
  • steam_id (str or SteamID) – SteamID of the account to log into, if it wasn’t provided on instance init
  • language (str) – select language for steam web pages (sets language cookie)
Returns:

a session on success and None otherwise

Return type:

requests.Session, None

Raises:
exception steam.webauth.WebAuthException

Bases: Exception

exception steam.webauth.HTTPError

Bases: steam.webauth.WebAuthException

exception steam.webauth.LoginIncorrect

Bases: steam.webauth.WebAuthException

exception steam.webauth.CaptchaRequired

Bases: steam.webauth.WebAuthException

exception steam.webauth.CaptchaRequiredLoginIncorrect

Bases: steam.webauth.CaptchaRequired, steam.webauth.LoginIncorrect

exception steam.webauth.EmailCodeRequired

Bases: steam.webauth.WebAuthException

exception steam.webauth.TwoFactorCodeRequired

Bases: steam.webauth.WebAuthException

exception steam.webauth.TooManyLoginFailures

Bases: steam.webauth.WebAuthException

utils

Utility package with various useful functions

steam.utils.ip4_from_int(ip)

Convert int to IPv4 string

Parameters:ip (int) – int representing an IPv4
Returns:IP in dot-decimal notation
Return type:str
steam.utils.ip4_to_int(ip)

Convert IPv4 string to int

Parameters:ip (str) – IPv4 in dot-decimal notation
Return type:int
steam.utils.ip_to_int(ip)

Convert IPv4 string to int

Parameters:ip (str) – IPv4 in dot-decimal notation
Return type:int
steam.utils.ip_from_int(ip)

Convert int to IPv4 string

Parameters:ip (int) – int representing an IPv4
Returns:IP in dot-decimal notation
Return type:str
steam.utils.ip6_from_bytes(ip)

Convert bytes to IPv6 string

Parameters:ip (bytes) – IPv6 in dot-decimal notation
Return type:str
steam.utils.ip6_to_bytes(ip)

Convert IPv6 string to bytes

Parameters:ip (str) – IPv6 in dot-decimal notation
Return type:bytes
steam.utils.chunks(arr, size)

Splits a list into chunks

Parameters:
  • arr (list) – list to split
  • size (int) – number of elements in each chunk
Returns:

generator object

Return type:

generator

class steam.utils.WeakRefKeyDict

Bases: object

Pretends to be a dictionary. Use any object (even unhashable) as key and store a value. Once the object is garbage collected, the entry is destroyed automatically.

class steam.utils.WeakRefCallback(refs, key)

Bases: object

utils.appache

Appache file parsing examples:

>>> from steam.utils.appcache import parse_appinfo, parse_packageinfo

>>> header, apps = parse_appinfo(open('/d/Steam/appcache/appinfo.vdf', 'rb'))
>>> header
{'magic': b"(DV\x07", 'universe': 1}
>>> next(apps)
{'appid': 5,
 'size': 79,
 'info_state': 1,
 'last_updated': 1484735377,
 'access_token': 0,
 'sha1': b'\x87\xfaCg\x85\x80\r\xb4\x90Im\xdc}\xb4\x81\xeeQ\x8b\x825',
 'change_number': 4603827,
 'data_sha1': b'\x87\xfaCg\x85\x80\r\xb4\x90Im\xdc}\xb4\x81\xeeQ\x8b\x825',
 'data': {'appinfo': {'appid': 5, 'public_only': 1}}}

>>> header, pkgs = parse_packageinfo(open('/d/Steam/appcache/packageinfo.vdf', 'rb'))
>>> header
{'magic': b"'UV\x06", 'universe': 1}

>>> next(pkgs)
{'packageid': 7,
 'sha1': b's\x8b\xf7n\t\xe5 k#\xb6-\x82\xd2 \x14k@\xfeDQ',
 'change_number': 7469765,
 'data': {'7': {'packageid': 7,
   'billingtype': 1,
   'licensetype': 1,
   'status': 0,
   'extended': {'requirespreapproval': 'WithRedFlag'},
   'appids': {'0': 10, '1': 80, '2': 100, '3': 254430},
   'depotids': {'0': 0, '1': 95, '2': 101, '3': 102, '4': 103, '5': 254431},
   'appitems': {}}}}
steam.utils.appcache.parse_appinfo(fp)

Parse appinfo.vdf from the Steam appcache folder

Parameters:fp – file-like object
Raises:SyntaxError
Return type:(dict, Generator)
Returns:(header, apps iterator)
steam.utils.appcache.parse_packageinfo(fp)

Parse packageinfo.vdf from the Steam appcache folder

Parameters:fp – file-like object
Raises:SyntaxError
Return type:(dict, Generator)
Returns:(header, packages iterator)
utils.binary
class steam.utils.binary.StructReader(data)

Bases: object

Simplifies parsing of struct data from bytes

Parameters:data (bytes) – data bytes
rlen()

Number of remaining bytes that can be read

Returns:number of remaining bytes
Return type:int
read(n=1)

Return n bytes

Parameters:n (int) – number of bytes to return
Returns:bytes
Return type:bytes
read_cstring(terminator=b'\x00')

Reads a single null termianted string

Returns:string without bytes
Return type:bytes
unpack(format_text)

Unpack bytes using struct modules format

Parameters:format_text (str) – struct’s module format
Return data:result from struct.unpack_from()
Return type:tuple
skip(n)

Skips the next n bytes

Parameters:n (int) – number of bytes to skip
utils.proto
steam.utils.proto.is_proto(emsg)
Parameters:emsg (int) – emsg number
Returns:True or False
Return type:bool
steam.utils.proto.set_proto_bit(emsg)
Parameters:emsg (int) – emsg number
Returns:emsg with proto bit set
Return type:int
steam.utils.proto.clear_proto_bit(emsg)
Parameters:emsg (int) – emsg number
Returns:emsg with proto bit removed
Return type:int
steam.utils.proto.proto_to_dict(message)

Converts protobuf message instance to dict

Parameters:message – protobuf message instance
Returns:parameters and their values
Return type:dict
Raises:TypeError if message is not a proto message
steam.utils.proto.proto_fill_from_dict(message, data, clear=True)

Fills protobuf message parameters inplace from a dict

Parameters:
  • message – protobuf message instance
  • data (dict) – parameters and values
  • clear (bool) – whether clear exisiting values
Returns:

value of message paramater

Raises:

incorrect types or values will raise

utils.throttle
class steam.utils.throttle.ConstantRateLimit(times, seconds, exit_wait=False, sleep_func=<built-in function sleep>)

Bases: object

Context manager for enforcing constant rate on code inside the block .

rate = seconds / times

Parameters:
  • times (int) – times to execute per…
  • seconds (int) – …seconds
  • exit_wait (bool) – whether to automatically call wait() before exiting the block
  • sleep_func (bool) – Sleep function in seconds. Default: time.sleep()

Example:

with RateLimiter(1, 5) as r:
    # code taking 1s
    r.wait()  # blocks for 4s
    # code taking 7s
    r.wait()  # doesn't block
    # code taking 1s
    r.wait()  # blocks for 4s
wait()

Blocks until the rate is met

utils.web
steam.utils.web.make_requests_session()
Returns:requests session
Return type:requests.Session
steam.utils.web.generate_session_id()
Returns:session id
Return type:str