[section=overview]Overview[/section] Many games and applications require shared components to be installed on the user's machine before they can successfully run. Steam has long used [doclink=sdk/installscripts]install scripts[/doclink] to allow these redistributables to be installed. …
[section=SeeInstallScript]What If I Need Something Else?[/section] If you believe your game or application is using a redistributable which is not listed in the app admin, but might be used by many other apps, please let us know in the [url=steamcommunity.com/groups/steamworks/discussions/]Steamworks Development Group[/url], and we might be able to get it added. …
Returns NULL if any of the arguments are not valid. [subsection=GetISteamGameServer]GetISteamGameServer[/subsection] [code=cpp]ISteamGameServer * GetISteamGameServer( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion );[/code] [table] [tr][th]Name[/th][th]Type[/th][th]Description[/th][/tr] [tr][td][b]hSteamUser[/b][/td][td][apitype]ISteamClient::HSteamUser[/apitype][/td][td]The user handle to get the interface from.…
Returns NULL if any of the arguments are not valid. [subsection=GetISteamGameServerStats]GetISteamGameServerStats[/subsection] [code=cpp]ISteamGameServerStats * GetISteamGameServerStats( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion );[/code] [table] [tr][th]Name[/th][th]Type[/th][th]Description[/th][/tr] [tr][td][b]hSteamUser[/b][/td][td][apitype]ISteamClient::HSteamUser[/apitype][/td][td]The user handle to get the interface from.…
Steam Deck is a next generation handheld gaming device - letting players take their Steam library with them to their couch or on the go. Steam Deck includes a high resolution display, full-size ergonomic controls, updated Steam UI, and enough horsepower to run current-gen games. …
This call is rate-limited on a per user basis, so you will want to batch up your modifications and send them at an appropriate time for your game. There is also a maximum of 1024 bytes of JSON per item at this time. [h4]Applying Restrictions[/h4] As mentioned previously, you can white-list certain properties so they can be set from the client. …
There are a couple of ways to do this, but regardless of which method you choose, you will want to batch up property modifications, as the calls to modify item properties are rate limited as mentioned above. [h4]WebAPI[/h4] On your secure game server, you can accumulate that statistic and at the end of the game round or other appropriate time, you can POST the results to the [webapi]IInventoryService/ModifyItems[/webapi] Web API using your secure publisher key. …
You can read more about SteamVR Input [url=https://steamcommunity.com/games/250820/announcements/detail/3809361199426010680]here.[/url] SteamVR Input is provided as part of the OpenVR SDK. You can read more here: [url]https://github.com/ValveSoftware/openvr/wiki/SteamVR-Input[/url] If your application does not support SteamVR Input natively, you can still create bindings for it and share those with the community. …
You can read more about Skeletal Input [url=https://steamcommunity.com/games/250820/announcements/detail/1690421280625220068]here[/url]…
Type_filter can used to specify certain app types to be returned. Possible values are "game,application,tool,demo,dlc,music". When type_filter is blank or not used, all apps are returned. Version 2 will output the app name. …
[section=UpToDateCheck]UpToDateCheck[/section] [code=http]GET https://api.steampowered.com/ISteamApps/UpToDateCheck/v1/[/code] [table] [tr][th]Name[/th][th]Type[/th][th]Required[/th][th]Description[/th][/tr] [tr][td][b]appid[/b][/td][td]uint32[/td][td]✔[/td][td]AppID of game[/td][/tr] [tr][td][b]version[/b][/td][td]uint32[/td][td]✔[/td][td]The installed version of the game[/td][/tr] [/table] …
When using OpenXR, your input binding setup will dramatically affect how many users can buy and play your game. If your game submits a suggested input binding for Meta Quest 2 controllers, SteamVR will automatically rebind most controller types so they will work. …
[docimg=SystemRequirementsVRFields.png]SystemRequirementsVRFields.png[/docimg] In the fields under "VR Devices and Support" you should describe both the SDKs and the specific devices that your game supports. Start with the SDK such as OpenXR or SteamVR and then describe any individual headsets, controllers, and/or room size requirements.…
If you're interested in finding out more info about the distribution of controllers used with Steam you can find more info in this [url=https://steamcommunity.com/games/593110/announcements/detail/1712946892833213377]blog post[/url] [section=ListDevices]Supported Devices[/section] Steam Input supports all the major controllers that players use with Steam. …
[list] [*] [doclink=features/steam_controller/device/steam_controller]Steam Controller[/doclink] [*] [doclink=features/steam_controller/device/ps4_controller]Playstation 4 Controller[/doclink] [*] [doclink=features/steam_controller/device/x360_controller]Xbox 360 Controller[/doclink] [*] [doclink=features/steam_controller/device/xb1_controller]Xbox One Controller[/doclink] [*] [doclink=features/steam_controller/device/nsp_controller]Nintendo Switch Pro Controller[/doclink] [*] Steam Link App Mobile Touch Controller [*] Playstation 3 Controller [*] Any DirectInput gamepad [/list] [docimg=controllers.jpg]controllers.jpg[/docimg] Note that the terms "Playstation 4 controller", "Xbox 360 controller", and "Xbox One controller" also refer to any variant devices (such as fighting game joysticks) that use the same input protocol as the base model.…
[/td][/tr] [tr][td][b]appid[/b][/td][td]uint32[/td][td]✔[/td][td]appid of game[/td][/tr] [tr][td][b]assetid[/b][/td][td]uint64[/td][td]✔[/td][td]The asset ID to operate on[/td][/tr] [tr][td][b]contextid[/b][/td][td]uint64[/td][td]✔[/td][td]The context to fetch history for[/td][/tr] [/table] [b]NOTE:[/b] This call requires a publisher API key to use this method. …
[/td][/tr] [tr][td][b]appid[/b][/td][td]uint32[/td][td]✔[/td][td]appid of game[/td][/tr] [tr][td][b]itemdefs[/b][/td][td]JSON array[/td][td]✔[/td][td]One or more Item Definitions, presented as a JSON array, to be updated or created.…
NOTE: This object should only be used in the same process! Do not serialize it, send it over the wire, or persist it in a file or database! If you need to do that, convert it to a string representation using the methods in [api]ISteamNetworkingUtils[/api] [subsection=k_cchMaxSteamNetworkingPingLocationString]k_cchMaxSteamNetworkingPingLocationString[/subsection] [code] const int k_cchMaxSteamNetworkingPingLocationString = 1024; [/code] Max possible length of a ping location, in string format. …
Item accessories provide a way for players to customize their in-game items, and to create more valuable, interesting, and even unique versions of common items used in your game. Attached accessories will be visible in the Inventory view on the community, and will create "Unique" (non-commodity) item listings when they are offered on the Steam Community Market. …
You may also choose to support different types of accessories on different item types in your game. [docimg=backpackcomic_resize30.png]backpackcomic_resize30.png[/docimg] As a concrete example, we'll look at defining a familiar type of accessory item - stickers. …
Learn how to use this software here: https://partner.steamgames.com/doc/steamdeck/loadgames [/list] [b]Media sharing policy[/b] [list] [*]You are welcome to share photos, videos, and posts about Steam Deck Dev-Kit hardware so long as you keep it to your own title's gameplay. [*]In addition, please don't share media of other games on Deck as a courtesy to other game developers - unless you have express permission. [/list]…
Do not use the delete feature to hide negative opinions or criticisms of the game. Doing so will quickly turn your forum into a place to discuss moderator actions, instead of the game itself. Players have a right to express their discontent with a game or its features. …
[h4]Hiding as Incompatible[/h4] Use this option to disassociate content from its respective Game Hub. This option is designed to remove the content from the hub/game, without affecting the content or the upload privileges of the owner. …
[/td][/tr] [/table] [section=AuthenticateUserTicket]AuthenticateUserTicket[/section] [code=http]GET https://partner.steam-api.com/ISteamUserAuth/AuthenticateUserTicket/v1/[/code] [table] [tr][th]Name[/th][th]Type[/th][th]Required[/th][th]Description[/th][/tr] [tr][td][b]key[/b][/td][td]string[/td][td]✔[/td][td]Steamworks Web API publisher authentication key[/td][/tr] [tr][td][b]appid[/b][/td][td]uint32[/td][td]✔[/td][td]appid of game[/td][/tr] [tr][td][b]ticket[/b][/td][td]string[/td][td]✔[/td][td]Convert the binary ticket data from GetAuthTicketForWebApi into a hexadecimal string and pass that string in as this parameter.…
As such this API MUST be called from a secure server, and can never be used directly by clients! AuthenticateUserTIcket is also available for games servers via the https://api.steampowered.com/ domain using a Web API user authentication key. These requests are rate limited.…
For checking if a user has a valid license, you should only need to check if the ownsapp field is true. The other fields are for cases where only the purchaser of a game should be granted something, such as a grant of in-game currency. The JSON response will contain the following fields: [table] [tr][th]Name[/th][th]Type[/th][th]Description[/th][/tr] [tr][td][b]ownsapp[/b][/td][td]bool[/td][td]Indicates if the user has an active license for this app.…
[/td][/tr] [/table] You can use GetDeletedSteamIDs to retrieve a list of deleted accounts that owned your game(s) before deletion. This API was created to allow for the deletion of user related data for GDPR and other personal information related purposes. …
[section=Overview]Overview[/section] The Xbox 360 controller, originally designed for Microsoft's Xbox 360 home game console, was the second third party device to get official Steam Input support (simultaneous with the Xbox One controller and generic XInput devices). …
It was the flagship device for Microsoft's highly influential XInput control standard and has traditionally been the most widely-supported controller for PC gaming. [docimg=xbox360_controller.png]xbox360_controller.png[/docimg] [subsection=FaceButtons]Face buttons[/subsection] [b]Digital[/b] The Xbox 360 controller features four standard face buttons labeled A, B, X, and Y. …
If you need to examine one directly, you should be able to find it in the games install directory. [section]How to Implement[/section] Steam error reporting is easy to use if you're already using [url=https://msdn.microsoft.com/en-us/library/windows/desktop/ms680657(v=vs.85).aspx]Structured Exception Handling[/url]. …
when debugging. // If you would like to step through the exception handler, attach a debugger // after running the game outside of the debugger. return RealMain( lpCmdLine, hInstance, nCmdShow ); } _set_se_translator( MiniDumpFunction ); try // this try block allows the SE translator to work { return RealMain( hInstance, lpCmdLine, nCmdShow ); } catch( ... ) { return -1; } } #endif [/code] [section]Requirements[/section] The error reporting API currently only supports 32-bit applications on Windows.…
These are provided in case you'd like to add Steam Deck specific input callouts in your game. [b][docfile=steamdeckSVG.zip]Download here[/docfile][/b] [docimg=DeckWireframes.png]DeckWireframes.png[/docimg]…
[docimg=Snag_4d100ae.png]Snag_4d100ae.png[/docimg] [subsection]Frequently Asked Questions[/subsection] [list] [*] [b]What if my game capsule is missing?[/b] - If you do not see your game capsule in the history page, this means that 'AppID' was not setup on the [url=https://steamcommunity.com/broadcast/upload]broadcast upload page[/url]. …
[/td][/tr] [tr][td][b]notify[/b][/td][td]bool[/td][td]✔[/td][td]Optional, default 0. Set to 1 to indicate the user is not in-game and should see a Steam notification.[/td][/tr] [tr][td][b]requestid[/b][/td][td]uint64[/td][td]✔[/td][td]Optional, default 0. Clients may provide a unique identifier for a request to perform at most once execution. …
Player notification of a new item, if any, is best handled by the game client. Calls to AddItem that occur when the player is not in-game may optionally set [code-inline]notify=1[/code-inline] to notify the player via Steam. …