[/list] [/list] [b]Example code[/b] [code] curl --request POST \ --header "Content-Type: application/x-www-form-urlencoded" \ --form appid=30400 \ --form 'itemdefs=[{"appid":"30400","itemdefid":"418","type":"item","display_type":"bag","name":"Bag of Stuff","description":"This bag contains stuff.","background_color":"993300","tradable": true,"marketable": true,"commodity": true,"tags":"class:human;type:bag"}, {"appid": "30400","itemdefid":"403","type":"item","display_type":"cat","name":"Cat of Bags","description":"This cat contains multitudes.…
[/td] [/tr] [tr][td][b]appid[/b][/td][td]uint32[/td][td]✔[/td][td]App ID of game to get reports for.[/td][/tr] [tr][td][b]type[/b][/td][td]string[/td][td][/td][td]Report type (One of: [b]"GAMESALES"[/b], [b]"STEAMSTORESALES"[/b], [b]"SETTLEMENT"[/b], [b]"CHARGEBACK"[/b], [b]"SUBSCRIPTION"[/b]) See [doclink=features/microtransactions/implementation#type_values][/doclink][/td][/tr] [tr][td][b]time[/b][/td][td]string[/td][td]✔[/td][td]Start time of the report. …
[/list] [/list] [/list] [b]Example Response:[/b] [code=xml] <response> <result>OK</result> <params> <state>WA</state> <country>US</country> <currency>USD</currency> </params> </response> [/code] [section=InitTxn]InitTxn[/section] [code=http]POST https://partner.steam-api.com/ISteamMicroTxn/InitTxn/v3/[/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 [url=https://partner.steamgames.com/doc/webapi_overview/auth#publisher-keys]publisher key[/url] with [b]Microtransaction[/b] permissions.…
For details on Patch Notes, please see [doclink=marketing/event_tools/type_patchnotes][/doclink] [section]What is a Major Update?[/section] Major Updates are designed for use in communicating your biggest game updates and signaling to players that this is one of the biggest moments in the year for your game. [section]Major Update Visibility[/section] Major update type events can appear in all the regular places, including store page, community hub and Steam Library. These posts will show up to players that follow your game and will qualify to show up in the "What's New" section for your fans at the top of the Steam Library homepage. …
These can be organized into grids or carousels or just a single banner image. [docimg=sectionType_Links.jpg]sectionType_Links.jpg[/docimg] [section]News And Events[/section] These are events posted via the Steam Events & Announcements tool [b]Carousel of three items[/b] [docimg=sectionType_Events.jpg]sectionType_Events.jpg[/docimg] [b]Section of two items[/b] [docimg=sectionType_Events_2.jpg]sectionType_Events_2.jpg[/docimg] [section]Dev/Publisher Home Page or Community Group Widget[/section] This will display a section with the selected Steam Curator or developer/publisher homepage, along with a 'follow' button and any linked social media accounts. [docimg=sectionType_Publisher.jpg]sectionType_Publisher.jpg[/docimg] [section]Broadcast Player[/section] This will play the broadcasts from any of the games listed within your sale page. …
For details on Major Updates, please see [doclink=marketing/event_tools/type_majorupdate][/doclink] [section]What Are Patch Notes?[/section] Patch Notes are important for letting your most engaged players know what has changed in your game, even if those changes are not something most players would care about. …
[docimg=doc_store_last_updated.jpg]doc_store_last_updated.jpg[/docimg] [/olist] [section]Posting Patch Notes[/section] To post your patch notes, visit your app's landing page in Steamworks and scroll down to "Post/Manage Events & Announcements". Clicking that option will take you to a screen to select the type of event you wish to post. Click "Create new Event or Announcement" and then you can select "A Game Update" to expand the options and then select "Small Update / Patch Notes". …
To enable the interaction profile you must request to use the extension: [code]XR_VALVE_frame_controller_interaction[/code] Then you can suggest bindings for the interaction profile path: [code]/interaction_profiles/valve/frame_controller_valve[/code] You can use the following paths: [code] "/user/hand/right/input/a/touch", XR_ACTION_TYPE_BOOLEAN_INPUT "/user/hand/right/input/a/click", XR_ACTION_TYPE_BOOLEAN_INPUT "/user/hand/right/input/b/touch", XR_ACTION_TYPE_BOOLEAN_INPUT "/user/hand/right/input/b/click", XR_ACTION_TYPE_BOOLEAN_INPUT "/user/hand/right/input/x/touch", XR_ACTION_TYPE_BOOLEAN_INPUT "/user/hand/right/input/x/click", XR_ACTION_TYPE_BOOLEAN_INPUT "/user/hand/right/input/y/touch", XR_ACTION_TYPE_BOOLEAN_INPUT "/user/hand/right/input/y/click", XR_ACTION_TYPE_BOOLEAN_INPUT "/user/hand/right/input/menu/touch", XR_ACTION_TYPE_BOOLEAN_INPUT "/user/hand/right/input/menu/click", XR_ACTION_TYPE_BOOLEAN_INPUT "/user/hand/right/input/system/touch", XR_ACTION_TYPE_BOOLEAN_INPUT "/user/hand/right/input/system/click", XR_ACTION_TYPE_BOOLEAN_INPUT "/user/hand/right/input/bumper/touch", XR_ACTION_TYPE_BOOLEAN_INPUT "/user/hand/right/input/bumper/click", XR_ACTION_TYPE_BOOLEAN_INPUT "/user/hand/right/input/squeeze/touch", XR_ACTION_TYPE_BOOLEAN_INPUT "/user/hand/right/input/squeeze/click", XR_ACTION_TYPE_BOOLEAN_INPUT "/user/hand/right/input/squeeze/value", XR_ACTION_TYPE_FLOAT_INPUT "/user/hand/right/input/trigger/touch", XR_ACTION_TYPE_BOOLEAN_INPUT "/user/hand/right/input/trigger/click", XR_ACTION_TYPE_BOOLEAN_INPUT "/user/hand/right/input/trigger/value", XR_ACTION_TYPE_FLOAT_INPUT "/user/hand/right/input/thumbstick/touch", XR_ACTION_TYPE_BOOLEAN_INPUT "/user/hand/right/input/thumbstick/click", XR_ACTION_TYPE_BOOLEAN_INPUT "/user/hand/right/input/thumbstick/x", XR_ACTION_TYPE_FLOAT_INPUT "/user/hand/right/input/thumbstick/y", XR_ACTION_TYPE_FLOAT_INPUT "/user/hand/right/input/thumbstick", XR_ACTION_TYPE_VECTOR2F_INPUT "/user/hand/right/input/grip/pose", XR_ACTION_TYPE_POSE_INPUT "/user/hand/right/input/aim/pose", XR_ACTION_TYPE_POSE_INPUT "/user/hand/right/output/haptic", XR_ACTION_TYPE_VIBRATION_OUTPUT "/user/hand/left/input/dpad_up/touch", XR_ACTION_TYPE_BOOLEAN_INPUT "/user/hand/left/input/dpad_up/click", XR_ACTION_TYPE_BOOLEAN_INPUT "/user/hand/left/input/dpad_left/touch", XR_ACTION_TYPE_BOOLEAN_INPUT "/user/hand/left/input/dpad_left/click", XR_ACTION_TYPE_BOOLEAN_INPUT "/user/hand/left/input/dpad_down/touch", XR_ACTION_TYPE_BOOLEAN_INPUT "/user/hand/left/input/dpad_down/click", XR_ACTION_TYPE_BOOLEAN_INPUT "/user/hand/left/input/dpad_right/touch", XR_ACTION_TYPE_BOOLEAN_INPUT "/user/hand/left/input/dpad_right/click", XR_ACTION_TYPE_BOOLEAN_INPUT "/user/hand/left/input/view/touch", XR_ACTION_TYPE_BOOLEAN_INPUT "/user/hand/left/input/view/click", XR_ACTION_TYPE_BOOLEAN_INPUT "/user/hand/left/input/system/touch", XR_ACTION_TYPE_BOOLEAN_INPUT "/user/hand/left/input/system/click", XR_ACTION_TYPE_BOOLEAN_INPUT "/user/hand/left/input/bumper/touch", XR_ACTION_TYPE_BOOLEAN_INPUT "/user/hand/left/input/bumper/click", XR_ACTION_TYPE_BOOLEAN_INPUT "/user/hand/left/input/squeeze/touch", XR_ACTION_TYPE_BOOLEAN_INPUT "/user/hand/left/input/squeeze/click", XR_ACTION_TYPE_BOOLEAN_INPUT "/user/hand/left/input/squeeze/value", XR_ACTION_TYPE_FLOAT_INPUT "/user/hand/left/input/trigger/touch", XR_ACTION_TYPE_BOOLEAN_INPUT "/user/hand/left/input/trigger/click", XR_ACTION_TYPE_BOOLEAN_INPUT "/user/hand/left/input/trigger/value", XR_ACTION_TYPE_FLOAT_INPUT "/user/hand/left/input/thumbstick/touch", XR_ACTION_TYPE_BOOLEAN_INPUT "/user/hand/left/input/thumbstick/click", XR_ACTION_TYPE_BOOLEAN_INPUT "/user/hand/left/input/thumbstick/x", XR_ACTION_TYPE_FLOAT_INPUT "/user/hand/left/input/thumbstick/y", XR_ACTION_TYPE_FLOAT_INPUT "/user/hand/left/input/thumbstick", XR_ACTION_TYPE_VECTOR2F_INPUT "/user/hand/left/input/grip/pose", XR_ACTION_TYPE_POSE_INPUT "/user/hand/left/input/aim/pose", XR_ACTION_TYPE_POSE_INPUT "/user/hand/left/output/haptic", XR_ACTION_TYPE_VIBRATION_OUTPUT [/code] [subsection=openvr]OpenVR Bindings[/subsection] You can bind to the Steam Frame Controllers like you would any other OpenVR controller type. …
[subsection]OpenVR[/subsection] OpenVR has two functions in IVRInput [b]GetEyeTrackingDataRelativeToNow[/b] and [b]GetEyeTrackingDataForNextFrame[/b]. To use those you will need to create a new action of type [code-inline]"eyetracking"[/code-inline] to pass into the functions. …
[/td][/tr] [tr=k_PFI_MatchingFileType_Art][td][b]k_PFI_MatchingFileType_Art[/b][/td][td]2[/td][td]Artwork.[/td][/tr] [tr=k_PFI_MatchingFileType_Videos][td][b]k_PFI_MatchingFileType_Videos[/b][/td][td]3[/td][td]Videos.…
[/td][/tr] [tr=k_PFI_MatchingFileType_Games][td][b]k_PFI_MatchingFileType_Games[/b][/td][td]6[/td][td]Unused.[/td][/tr] [tr=k_PFI_MatchingFileType_Software][td][b]k_PFI_MatchingFileType_Software[/b][/td][td]7[/td][td]Unused[/td][/tr] [tr=k_PFI_MatchingFileType_Concepts][td][b]k_PFI_MatchingFileType_Concepts[/b][/td][td]8[/td][td]Unused[/td][/tr] [tr=k_PFI_MatchingFileType_GreenlightItems][td][b]k_PFI_MatchingFileType_GreenlightItems[/b][/td][td]9[/td][td]Unused[/td][/tr] [tr=k_PFI_MatchingFileType_AllGuides][td][b]k_PFI_MatchingFileType_AllGuides[/b][/td][td]10[/td][td]Guides.…
[/td][/tr] [tr=k_EAppType_Plugin][td][b]k_EAppType_Plugin[/b][/td][td]0x1000[/td][td]Plug-in types for other Apps.[/td][/tr] [tr=k_EAppType_Music][td][b]k_EAppType_Music[/b][/td][td]0x2000[/td][td]Music files.…
[/td][/tr] [tr=k_EChatEntryTypeTyping][td][b]k_EChatEntryTypeTyping[/b][/td][td]2[/td][td]The other user is typing, not used in multi-user chat.[/td][/tr] [tr=k_EChatEntryTypeInviteGame][td][b]k_EChatEntryTypeInviteGame[/b][/td][td]3[/td][td]Invite from other user into that users current game.…
[subsection=AddVRScreenshotToLibrary]AddVRScreenshotToLibrary[/subsection] [code=cpp]ScreenshotHandle AddVRScreenshotToLibrary( EVRScreenshotType eType, const char *pchFilename, const char *pchVRFilename );[/code] [table] [tr][th]Name[/th][th]Type[/th][th]Description[/th][/tr] [tr][td][b]eType[/b][/td][td][apitype]ISteamScreenshots::EVRScreenshotType[/apitype][/td][td]The type of VR screenshot that this is.…
[b]Associated Functions:[/b] [api]ISteamScreenshots::TriggerScreenshot[/api] [section=enums]Enums[/section] These are enums which are defined for use with ISteamScreenshots. [subsection=EVRScreenshotType]EVRScreenshotType[/subsection] Describes the type of VR screenshots. [table] [tr][th]Name[/th][th]Value[/th][th]Description[/th][/tr] [tr=k_EVRScreenshotType_None][td][b]k_EVRScreenshotType_None[/b][/td][td]0[/td][td][/td][/tr] [tr=k_EVRScreenshotType_Mono][td][b]k_EVRScreenshotType_Mono[/b][/td][td]1[/td][td][/td][/tr] [tr=k_EVRScreenshotType_Stereo][td][b]k_EVRScreenshotType_Stereo[/b][/td][td]2[/td][td][/td][/tr] [tr=k_EVRScreenshotType_MonoCubemap][td][b]k_EVRScreenshotType_MonoCubemap[/b][/td][td]3[/td][td][/td][/tr] [tr=k_EVRScreenshotType_MonoPanorama][td][b]k_EVRScreenshotType_MonoPanorama[/b][/td][td]4[/td][td][/td][/tr] [tr=k_EVRScreenshotType_StereoPanorama][td][b]k_EVRScreenshotType_StereoPanorama[/b][/td][td]5[/td][td][/td][/tr] [/table] [section=typedefs]Typedefs[/section] These are typedefs which are defined for use with ISteamScreenshots. …
[/td][/tr] [tr][td][b]purchase_type[/b][/td][td]int32[/td][td][/td][td][webapi]IUserReviewsService#EUserReviewsPurchaseType[/webapi]. Defaults to k_EUserReviewsPurchaseType_Steam.…
[/td][/tr] [tr=k_EUserReviewsReviewType_Positive][td][b]k_EUserReviewsReviewType_Positive[/b][/td][td]1[/td][td]Only positive reviews.[/td][/tr] [tr=k_EUserReviewsReviewType_Negative][td][b]k_EUserReviewsReviewType_Negative[/b][/td][td]2[/td][td]Only negative reviews.…
[section=ReportAbuse]ReportAbuse[/section] [code=http]POST https://partner.steam-api.com/ISteamCommunity/ReportAbuse/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]steamidActor[/b][/td][td]uint64[/td][td]✔[/td][td]SteamID of user doing the reporting[/td][/tr] [tr][td][b]steamidTarget[/b][/td][td]uint64[/td][td]✔[/td][td]SteamID of the entity being accused of abuse[/td][/tr] [tr][td][b]appid[/b][/td][td]uint32[/td][td]✔[/td][td]AppID to check for ownership[/td][/tr] [tr][td][b]abuseType[/b][/td][td]uint32[/td][td]✔[/td][td]Abuse type code (see EAbuseReportType enum)[/td][/tr] [tr][td][b]contentType[/b][/td][td]uint32[/td][td]✔[/td][td]Content type code (see ECommunityContentType enum)[/td][/tr] [tr][td][b]description[/b][/td][td]string[/td][td]✔[/td][td]Narrative from user[/td][/tr] [tr][td][b]gid[/b][/td][td]uint64[/td][td][/td][td]GID of related record (depends on content type)[/td][/tr] [/table] Allows publishers to report users who are behaving badly on their community hub. …
[/td][/tr] [/table] [code-inline]game_names[/code-inline] has the following structure: [table] [tr][th]Name[/th][th]Type[/th][th]Description[/th][/tr] [tr][td][b]id[/b][/td][td]uint32[/td][td]ID number of entry; referenced in site info below[/td][/tr] [tr][td][b]name[/b][/td][td]string[/td][td]Game name[/td][/tr] [/table] [code-inline]sites[/code-inline] has the following structure: [table] [tr][th]Name[/th][th]Type[/th][th]Description[/th][/tr] [tr][td][b]siteid[/b][/td][td]uint64[/td][td]64-bit SiteID of the site[/td][/tr] [tr][td][b]site_name[/b][/td][td]string[/td][td]Site name you have assigned to the site[/td][/tr] [tr][td][b]games[/b][/td][td]see below[/td][td]list of all game titles played[/td][/tr] [/table] [code-inline]games[/code-inline] has the following structure: [table] [tr][th]Name[/th][th]Type[/th][th]Description[/th][/tr] [tr][td][b]id[/b][/td][td]uint32[/td][td]ID of game in the [code-inline]game_names[/code-inline] section of the response[/td][/tr] [tr][td][b]license_type[/b][/td][td]string[/td][td]Playtime is divided up for each game by the type of license used. …
[/td][/tr] [tr][td][b]playtime_seconds[/b][/td][td]uint32[/td][td]total playtime for this game and license type, in seconds, for the requested period.[/td][/tr] [/table] …
[/td][/tr] [tr=k_EWorkshopFileTypeVideo][td][b]k_EWorkshopFileTypeVideo[/b][/td][td]4[/td][td]External video.[/td][/tr] [tr=k_EWorkshopFileTypeScreenshot][td][b]k_EWorkshopFileTypeScreenshot[/b][/td][td]5[/td][td]Screenshot.…
[/td][/tr] [tr=k_EWorkshopFileTypeConcept][td][b]k_EWorkshopFileTypeConcept[/b][/td][td]8[/td][td]Unused, used to be for Greenlight concepts.[/td][/tr] [tr=k_EWorkshopFileTypeWebGuide][td][b]k_EWorkshopFileTypeWebGuide[/b][/td][td]9[/td][td]Steam web guide.…
[section=RankedByTrend]RankedByTrend[/section] [code=http]POST https://partner.steam-api.com/ISteamPublishedItemSearch/RankedByTrend/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]steamid[/b][/td][td]uint64[/td][td]✔[/td][td]SteamID of user[/td][/tr] [tr][td][b]appid[/b][/td][td]uint64[/td][td]✔[/td][td]appID relevant to all subsequent tags[/td][/tr] [tr][td][b]tagcount[/b][/td][td]uint32[/td][td]✔[/td][td]Number of Tags Specified[/td][/tr] [tr][td][b]usertagcount[/b][/td][td]uint32[/td][td]✔[/td][td]Number of User specific tags requested[/td][/tr] [tr][td][b]hasappadminaccess[/b][/td][td]bool[/td][td][/td][td]Whether the user making the request is an admin for the app and can see private files[/td][/tr] [tr][td][b]fileType[/b][/td][td]uint32[/td][td][/td][td]EPublishedFileInfoMatchingFileType, defaults to k_PFI_MatchingFileType_Items[/td][/tr] [tr][td][b]tag[0][/b][/td][td]string[/td][td][/td][td]Tag to filter result set[/td][/tr] [tr][td][b]usertag[0][/b][/td][td]string[/td][td][/td][td]A user specific tag[/td][/tr] [/table] [b]NOTE:[/b] This call requires a publisher API key to use this method. …
Generator Legendary applies the tag [code-inline]quality:legendary[/code-inline] and creates sword or shield items, while Generator Common applies the tag [code-inline]quality:common[/code-inline] and also creates sword or shield items. [code] itemdefid: 10 type: item name: Sword itemdefid: 11 type: item name: Shield itemdefid: 100 type: generator name: Generator A bundle: 101x1;102x9 tags: color:red itemdef: 101 type: generator name: Generator Legendary bundle: 10;11 tags: quality:legendary itemdef: 102 type: generator name: Generator Common bundle: 10;11 tags: quality:common [/code] Another way to assign tags would be to use the [code-inline]tag_generator[/code-inline] item definition type. …
In the end you could end up with "Legendary Red Shield with Flames" or a "Common Red Sword with Lasers." [code] itemdefid: 10 type: item name: Sword itemdefid: 11 type: item name: Shield itemdefid: 100 type: generator name: Generator A bundle: 10;11 tags: color:red tag_generators: 101;102 itemdefid: 101 type: tag_generator name: Tag Generator Quality tag_generator_name: quality tag_generator_values: legendary:1;common:9 itemdefid: 102 type: tag_generator name: Tag Generator FX tag_generator_name: fx tag_generator_values: flames;sparks;lasers [/code] The format for the [code-inline]tag_generators[/code-inline] field is a list of all item definition ids of the tag generators you want applied, separated by the ";" character. …
int nXinputSlotIndex = 0; InputHandle_t inputHandle = SteamInput()->GetControllerForGamepadIndex( nXinputSlotIndex ); if ( inputHandle == 0 ) { // Valid Input handles are non-zero, this is a normal Xbox controller. } else { // Steam will always return an enum value that was valid for your SDK version. ESteamInputType inputType = SteamInput()->GetInputTypeForHandle( inputHandle ); switch( inputType ) { case k_ESteamInputType_Unknown: printf( "unknown!…
\n" ); break; case k_ESteamInputType_PS3Controller: case k_ESteamInputType_PS4Controller: case k_ESteamInputType_PS5Controller: printf( "PlayStation controller!…
[subsection=SteamPartyBeaconLocation_t]SteamPartyBeaconLocation_t[/subsection] [table] [tr][th]Name[/th][th]Type[/th][th]Description[/th][/tr] [tr][td][b]m_eType[/b][/td][td][apitype]ISteamParties::ESteamPartyBeaconLocationType[/apitype][/td][td]The location type.…
[/td][/tr] [tr=k_ESteamPartyBeaconLocationType_ChatGroup][td][b]k_ESteamPartyBeaconLocationType_ChatGroup[/b][/td][td]1[/td][td]A Steam Chat Room Group.[/td][/tr] [tr=k_ESteamPartyBeaconLocationType_Max][td][b]k_ESteamPartyBeaconLocationType_Max[/b][/td][td][/td][td]Value is always one greater than the largest valid location type value.…
[/td][/tr] [tr][td][b]type_filter[/b][/td][td]string[/td][td][/td][td]Optional comma separated list of types to filter on[/td][/tr] [/table] Get a list of appIDs associated with a WebAPI key. Type_filter can used to specify certain app types to be returned. Possible values are "game,application,tool,demo,dlc,music". …
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. It's up to you to decide what accessory types to support, and what cosmetic or gameplay effects different accessory types might have. You may also choose to support different types of accessories on different item types in your game. …
", "icon_url":..., "accessory_tag": "sticker", "accessory_limit": 3, "allowed_tags_from_tools": "sticker" } [/code] Each sticker type is created with the "type" set to a "tag_tool". The action of the tag tool will be to apply the accessory tag, with the itemdef of this sticker as the argument. …
[subsection=CreateLobby]CreateLobby[/subsection] [code=cpp]SteamAPICall_t CreateLobby( ELobbyType eLobbyType, int cMaxMembers );[/code] [table] [tr][th]Name[/th][th]Type[/th][th]Description[/th][/tr] [tr][td][b]eLobbyType[/b][/td][td][apitype]ISteamMatchmaking::ELobbyType[/apitype][/td][td]The type and visibility of this lobby. …
[/td][/tr] [tr][td][b]eLobbyType[/b][/td][td][apitype]ISteamMatchmaking::ELobbyType[/apitype][/td][td]The new lobby type to that will be set.[/td][/tr] [/table] Updates what type of lobby this is. …