[b][u]Example Integration of IPartnerFinancialsService[/u][/b] - Partner X calls GetChangedDatesForPartner on May 4th, 2025 with a highwatermark value of 0. [code] "response": { "dates": [ "2025/05/03", "2025/05/04" ], "result_highwatermark": "120" } [/code] - Partner X would then perform GetDetailedSales calls for 2025/05/03 and 2025/05/04, storing off the results of each call locally for further analysis. - With their GetDetailedSales querying completed, Partner X would then stores off the result_highwatermark value (120) from GetChangedDatesForPartner for future calls. - The next day (May 5th, 2025), Partner X starts their workday by calling GetChangedDatesForPartner again (using a highwatermark value of 120, the stored value from the previous day's call). …
[/callout] The file must contain a dictionary named [b]steam_frame[/b] and one or more of the following entries: [table] [tr] [th]Name[/th] [th]Value / Type[/th] [th]Corresponding Video -> Per-Application Video Settings menu entry[/th] [th]Behavior when not specified[/th] [/tr] [tr] [td]preferResolution[/td] [td]<integer>, width component[/td] [td]Resolution Per Eye[/td] [td]Use 1728x1728[/td] [/tr] [tr] [td]preferMinRefreshRate[/td] [td]<integer>[/td] [td]Frame Limit / Refresh Rate Override[/td] [td]Use 72 Hz[/td] [/tr] [tr] [td]preferHalfFramerate[/td] [td]true, false[/td] [td]Frame Limit / Throttling Behavior[/td] [td]No throttling[/td] [/tr] [tr] [td]preferMotionSmoothingMode[/td] [td]"off", "on", "alwaysOn"[/td] [td]Motion Smoothing[/td] [td]Use global setting under Video -> Motion Smoothing[/td] [/tr] [/table] [callout=red]JSON syntax can be prone to errors. …
/vrpreferences.json" failed: * Line 5, Column 3 4: "preferMinRefreshRate": 120, 5: } 6: } Missing '}' or object member name Tue Jul 28 2026 11:05:56.126069 [Info] - [Settings] No or invalid application preferences settings at '/home/steamos/.local/share/Steam/steamapps/common/[...]…
[/list] [/list] [b]Example Response:[/b] [code=xml] { "response": { "item_json": "[{ \"accountid\":\"148618792083651397\",\"itemid\":\"17209346500926339\",\"Timestamp\":\"\",\"originalitemid\":\"17209346500926339\",\"itemdefid\":\"120\",\"appid\":480,\"position\":0,\"quantity\":1,\"transid\":\"\",\"state\":\"\",\"origin\":\"external\",\"price\":\"\",\"acquired\":\"20140912T195537Z\"}]" } } [/code] [b]Calling Example:[/b] [code] curl -X POST -H "Content-Type: application/x-www-form-urlencoded" \ -d appid=480 \ -d steamid=292733980074050545 \ -d itemdefid[0]=4111 \ -d itemdefid[1]=4112 \ "http://api.steampowered.com/IInventoryService/AddItem/v1?…
[b]Example Response:[/b] [code=xml] { "response": { "item_json": "[{ \"accountid\":\"xxxxx\",\"itemid\":\"17212166272724458\",\"Timestamp\":\"2014-10-13T22:41:00.4928464Z\",\"originalitemid\":\"17212166272724458\",\"itemdefid\":\"120\",\"appid\":480,\"position\":0,\"quantity\":1,\"transid\":\"\",\"state\":\"\",\"origin\":\"external\",\"price\":\"\",\"acquired\":\"20141013T224100Z\"}, { \"accountid\":\"xxxxx\",\"itemid\":\"17212166272732706\",\"Timestamp\":\"2014-10-13T22:42:50.1328464Z\",\"originalitemid\":\"17212166272732706\",\"itemdefid\":\"121\",\"appid\":480,\"position\":0,\"quantity\":1,\"transid\":\"\",\"state\":\"\",\"origin\":\"external\",\"price\":\"\",\"acquired\":\"20141013T224250Z\"} ]" }} [/code] [b]Calling Example:[/b] [code] $fields = array( 'appid' > '480', 'itemlist[0]' > '120', 'itemorigin' > '', 'steamid' > 'xxxxx', 'key' > 'xxxx' ); var_dump($fields); $ch = curl_init(); curl_setopt( $ch, CURLOPT_URL, $host.'…
[b]Design:[/b] These are small, so for best results focus on making the [b][color=#ca5029]logo clearly legible.[/color] [/b] [b]Size:[/b] Please provide '462px x 174px' image. From that, two smaller sizes (120x45 and 184x69) capsules are automatically generated. [b]Requirements: [/b]Small Capsule should contain readable logo, even at smallest size. …
[section=main_capsule]Main Capsule [color=#ca5029]Required[/color][/section] [docimg=hla_capsule_616x353.jpg]hla_capsule_616x353.jpg[/docimg] [b]Usage:[/b] This image appears at the top of the Steam store home page in the Main Capsule carousel. …
The trailer should be the highest resolution that you have, up to 1920 x 1080 resolution, 30/29.97 or 60/59.94 fps, high bit rate (5,000+ Kbps) and in .mov, .wmv, or .mp4 container files. H.264 video and AAC audio is preferred, but we can transcode from many formats. 16:9 aspect ratio is preferred since the Steam client is optimized for widescreen, but 4:3 aspect ratio is accepted. …
The most common reason for a trailer to fail is the resolution of the video. Please ensure you use a common resolution such as 1920x1080 or 1280x720 to avoid any downstream processing issues. Another common issue is an unsupported audio sample rate (please use 44Khz or 48Khz). …
[/list] [/list] [/list] [b]Example Response:[/b] [code=json] { "response": { "result": "OK", "params": { "count": 4, "orders": [ { "orderid": "1233", "transid": "1234567890123456788", "steamid": "76561197972751825", "status": "PartialRefund", "currency": "USD", "time": "2024-01-23T18:30:00Z", "country": "US", "usstate": "WA", "timecreated": "2024-01-23T18:15:00Z", "items": [ { "itemid": 100, "qty": 1, "amount": 99, "vat": 9, "itemstatus": "Refunded" }, { "itemid": 101, "qty": 1, "amount": 1299, "vat": 116, "itemstatus": "Succeeded" } ] }, { "orderid": "1234", "transid": "1234567890123456789", "steamid": "76561197972751825", "status": "Failed", "currency": "USD", "time": "2024-01-23T18:40:30Z", "country": "US", "usstate": "WA", "timecreated": "2024-01-23T18:39:00Z", "items": [ { "itemid": 100, "qty": 1, "amount": 99, "vat": 9, "itemstatus": "Failed" } ] }, { "orderid": "1235", "transid": "1234567890123456790", "steamid": "76561197972751825", "status": "Succeeded", "currency": "USD", "time": "2024-01-23T18:40:40Z", "country": "US", "usstate": "WA", "timecreated": "2024-01-23T18:39:30Z", "items": [ { "itemid": 101, "qty": 1, "amount": 1299, "vat": 116, "itemstatus": "Succeeded" } ] }, { "orderid": "1236", "transid": "1234567890123456791", "steamid": "76561197972751825", "status": "Chargedback", "currency": "USD", "time": "2024-01-23T19:55:00Z", "country": "US", "usstate": "WA", "timecreated": "2024-01-23T18:40:00Z", "items": [ { "itemid": 102, "qty": 1, "amount": 999, "vat": 89, "itemstatus": "Chargedback" } ] } ] } } } [/code] [section=GetUserAgreementInfo]GetUserAgreementInfo[/section] [code=http]GET https://partner.steam-api.com/ISteamMicroTxn/GetUserAgreementInfo/v2/[/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.…
[/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.…
. [*] [code-inline]FontName[/code-inline] - Font used for menu text [*] [code-inline]FontHeight[/code-inline] - Height of menu text [*] [code-inline]MenuPos[/code-inline] - X and Y coordinates (in pixels) for the top left corner of the menu (ex: "200 324") [*] [code-inline]MenuStyle[/code-inline] - Alignment of menu text (0 = left, 1 = center, 2 = right) [*] [code-inline]ColorDefault[/code-inline] - RGB color for menu text (ex: "255 255 255") [*] [code-inline]ColorHover[/code-inline] - RGB color for menu text when the mouse is hovering over the text (ex: "250 180 60") [*] [code-inline]ColorDown[/code-inline] - RGB color for menu text when a mouse button is depressed over the text (ex: "0 0 0") [/olist] Setup can also display a EULA before installing your game. …
If you need to support a language that is currently not supported by Steam, please let us know in the [url=steamcommunity.com/groups/steamworks/discussions]Steamworks Development Discussions[/url] [subsection=setup_graphics]Graphics and Sound Effects[/subsection] The following files can be replaced to customize the setup application and Steam installation for your game: [olist] [*] [code-inline]splash.tga[/code-inline] - Image displayed by Steam while installing files from disk (392x165 pixels) [*] [code-inline]icon.ico[/code-inline] - Icon used in [code-inline]autorun.inf[/code-inline] as the icon for your installation disk [*] [code-inline]resources\setup.bmp[/code-inline] and [code-inline]resources\setup_<language>.bmp[/code-inline] - Image used for the background of setup.exe (640x480 pixels). …
unSessionID ) { continue; } int nResolutionX = 0, nResolutionY = 0; SteamRemotePlay()->BGetSessionClientResolution( unSessionID, &nResolutionX, &nResolutionY ); if ( nResolutionX > nMaxResolutionX ) { nMaxResolutionX = nResolutionX; nMaxResolutionY = nResolutionY; } } if ( pnX ) { *pnX = nMaxResolutionX; } if ( pnY ) { *pnY = nMaxResolutionY; } return ( nMaxResolutionX > 0 && nMaxResolutionY > 0 ); } [/code] [subsection=ShowRemotePlayTogetherUI]ShowRemotePlayTogetherUI[/subsection] [code=cpp]bool ShowRemotePlayTogetherUI();[/code] Show the Remote Play Together UI in the game overlay. …
[/td][/tr] [tr=k_ERemotePlayMouseButtonMiddle][td][b]k_ERemotePlayMouseButtonMiddle[/b][/td][td]0x0010[/td][td]The middle mouse button.[/td][/tr] [tr=k_ERemotePlayMouseButtonX1][td][b]k_ERemotePlayMouseButtonX1[/b][/td][td]0x0020[/td][td]The first extended mouse button.…
Each recipe consists of an itemdef ID, optionally followed by an "x" separator and a desired (integer) quantity. If quantity is not supplied explicitly, "1" is used as a default. [h4]Bundle format[/h4] [code] bundle_def : item_recipe , { ";" , item_recipe } item_recipe : item_def , [ "x" , quantity ] [/code] [h4]Bundle examples[/h4] [list] [*] Grant one each of itemdef 201, itemdef 202, itemdef 203: [code] type: bundle bundle: 201;202;203[/code] [*] Grant one instance with itemdef 101 and five instances of itemdef 102: [code] type: bundle bundle: 101x1;102x5[/code] [*] Random 90% chance of itemdef 501, 9% chance of itemdef 502, 1% chance of item 503: [code] type: generator bundle: 501x90;502x9;503x1[/code] [*] 90% chance of a common item; 10% chance of a special item. …
[h4]Example[/h4] A basic one will look like this: [code]"InstallScript" { "Registry" { "HKEY_LOCAL_MACHINE\\SOFTWARE\\Foo\\Bar" { "string" { "Install_Path" "%INSTALLDIR%" "Exe_Path" "%INSTALLDIR%\\foobar.exe" } "dword" { "PatchVersion" "12" } } } "Run Process" { "DirectX" { "HasRunKey" "HKEY_LOCAL_MACHINE\\Software\\Valve\\Steam\\Apps\\480" "Process 1" "%INSTALLDIR%\\DirectX\\DXSETUP.exe" "Command 1" "/silent" "NoCleanUp" "1" } } } [/code] The second keyname after the root describes what kind of action will take place. …
To set the [url=https://msdn.microsoft.com/en-us/library/aa266441(v=vs.60).aspx]default value[/url] for a registry key, you should enter the key name as [code-inline](Default)[/code-inline]. [section=run_process]Run Process[/section] The Run Process command allows your application to run programs before the user first launches your game. …
[/td][/tr] [tr][td][b]steamids[/b][/td][td]string[/td][td]✔[/td][td]Comma-delimited list of SteamIDs[/td][/tr] [/table] The response from the call will look something like this: [code] { "players": [ { "SteamId": "77561198355051011", "CommunityBanned": false, "VACBanned": false, "NumberOfVACBans": 0, "DaysSinceLastBan": 0, "NumberOfGameBans": 0, "EconomyBan": "none" }, { "SteamId": "77561197978236369", "CommunityBanned": false, "VACBanned": true, "NumberOfVACBans": 1, "DaysSinceLastBan": 0, "NumberOfGameBans": 1, "bans": [ { "AppIdMin": 60, "AppIdMax": 60, "BanStartTime": 1780525984, "BanType": 2, "BanProviderId": 0 } ], "EconomyBan": "none" } ] } [/code] [section=GetPlayerSummaries]GetPlayerSummaries[/section] [code=http]GET https://partner.steam-api.com/ISteamUser/GetPlayerSummaries/v2/[/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 user authentication key.…
[/list] The response from the call will look something like this: [code] "appownership":{ "apps":[ { "appid": 60, "ownsapp": true, "permanent": true, "timestamp": "2005-04-03T17:50:29Z", "timeexpires": "never", "ownersteamid": "76561197978236369", "sitelicense": false, "usercanceled": false }, { "appid": 220, "ownsapp": false, "permanent": false, "timestamp": "2024-09-17T22:27:02Z", "timeexpires": "never", "ownersteamid": "0", "sitelicense": false, "usercanceled": true, "timedtrial": false } ] } [/code] In the above example, the steamID 76561197978236369 has purchased appID 60. …
[/td][/tr] [tr][td][b]x[/b][/td][td]float[/td][td]The current state of this action on the horizontal axis.[/td][/tr] [tr][td][b]y[/b][/td][td]float[/td][td]The current state of this action vertical axis.…
[table] [tr][th]Name[/th][th]Type[/th][th]Description[/th][/tr] [tr][td][b]rotQuatX[/b][/td][td]float[/td][td]Sensor-fused absolute rotation (will drift in heading), x axis[/td][/tr] [tr][td][b]rotQuatY[/b][/td][td]float[/td][td]Sensor-fused absolute rotation (will drift in heading), y axis[/td][/tr] [tr][td][b]rotQuatZ[/b][/td][td]float[/td][td]Sensor-fused absolute rotation (will drift in heading), z axis[/td][/tr] [tr][td][b]rotQuatW[/b][/td][td]float[/td][td]Sensor-fused absolute rotation (will drift in heading), w axis[/td][/tr] [tr][td][b]posAccelX[/b][/td][td]float[/td][td]Positional acceleration, x axis[/td][/tr] [tr][td][b]posAccelY[/b][/td][td]float[/td][td]Positional acceleration, y axis[/td][/tr] [tr][td][b]posAccelZ[/b][/td][td]float[/td][td]Positional acceleration, z axis[/td][/tr] [tr][td][b]rotVelX[/b][/td][td]float[/td][td]Angular velocity, x axis[/td][/tr] [tr][td][b]rotVelY[/b][/td][td]float[/td][td]Angular velocity, y axis[/td][/tr] [tr][td][b]rotVelZ[/b][/td][td]float[/td][td]Angular velocity, z axis[/td][/tr] [/table] [section=enums]Enums[/section] These are enums which are defined for use with ISteamController. …
For an introduction to anti-cheat and general best practices, we recommend that you watch the [url=http://steamcommunity.com/devdays]Steam Dev Days[/url] talk "Anti-Cheat for Multiplayer Games" ([docfile=AntiCheat.pdf]slides[/docfile]) https://www.youtube.com/watch?v=hI7V60r7Jco [subsection=GameBans]Game Bans[/subsection] [docimg=game_banned.png][/docimg] Game Bans allow you to utilize Valve’s banning infrastructure rather than implement your own ban tracking system. …
[/td][/tr] [tr=k_EAppType_DLC][td][b]k_EAppType_DLC[/b][/td][td]0x020[/td][td]Downloadable Content.[/td][/tr] [tr=k_EAppType_Guide][td][b]k_EAppType_Guide[/b][/td][td]0x040[/td][td]Game guide, PDF etc[/td][/tr] [tr=k_EAppType_Driver][td][b]k_EAppType_Driver[/b][/td][td]0x080[/td][td]Hardware driver updater (ATI, Razor etc.)…
[/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][td][doclink=store/localization][/doclink][/td][td]Steam is a global platform and thus supports multiple languages across many platform features. Over 60% of Steam users use it in a language other than English, so tailoring your experience for those users is important. Supporting as many languages, currencies and payment methods as possible enables Steam to provide the best experience possible to customers around the world. …
[b]Tip:[/b] To maximize your visibility, set your release date at least 60 days in advance to be eligible to appear on the dedicated calendar page, and at least three weeks in advance to be eligible to appear on the front page. …
[table] [tr] [td][b]Header Capsule[/b][/td] [td][color=#ca5029]Required[/color][/td] [td]920px x 430px Just your game logo and artwork [doclink=store/assets/standard#header_capsule]See details[/doclink][/td] [/tr] [tr] [td][b]Small Capsule[/b][/td] [td][color=#ca5029]Required[/color][/td] [td]462px x 174px Just your game logo and artwork [doclink=store/assets/standard#small_capsule]See details[/doclink][/td] [/tr] [tr] [td][b]Main Capsule[/b][/td] [td][color=#ca5029]Required[/color][/td] [td]1232px x 706px Just your game logo and artwork [doclink=store/assets/standard#main_capsule]See details[/doclink][/td] [/tr] [tr] [td][b]Vertical Capsule[/b][/td] [td][color=#ca5029]Required[/color][/td] [td]748px x 896px Just your game logo and artwork [doclink=store/assets/standard#hero_capsule]See details[/doclink][/td] [/tr] [tr] [td][b]Screenshots[/b][/td] [td][color=#ca5029]Required[/color][/td] [td]minimum of 1920px x 1080px or larger, 16:9 ratio. …
[table] [tr] [td][b]Event Cover[/b][/td] [td][color=#ca5029]Required[/color][/td] [td]800px x 450px Artwork and marketing copy for your event or announcement [doclink=store/assets/eventassets#cover]See details[/doclink][/td] [/tr] [tr] [td][b]Event Header[/b][/td] [td]Optional[/td] [td]1920px wide x 622px Event artwork and logo. …
const uint8 rgubKey[k_nSteamEncryptedAppTicketSymmetricKeyLen] = { 0xed, 0x93, 0x86, 0x07, 0x36, 0x47, 0xce, 0xa5, 0x8b, 0x77, 0x21, 0x49, 0x0d, 0x59, 0xed, 0x44, 0x57, 0x23, 0xf0, 0xf6, 0x6e, 0x74, 0x14, 0xe1, 0x53, 0x3b, 0xa3, 0x3c, 0xd8, 0x03, 0xbd, 0xbd }; uint8 rgubDecrypted[1024]; uint32 cubDecrypted = sizeof( rgubDecrypted ); if ( !…
Refer to the template (downloadable above) for the area in the middle occluded by the profile.[/h4] [list] [*]300 x 168px .webm <1MB (for preview purposes) [*]300 x 168px .mp4 <1MB (for preview purposes) [*]1920 x 1080px .jpg (still) < 350KB [*]1920 x 1080px .mp4 <4MB [*]1920 x 1080px .webm <4MB [/list] [img]https://steamcdn-a.akamaihd.net/steamcommunity/public/images/steamworks_docs/english/anim_BG_GIF.gif[/img] [url=https://store.steampowered.com/points/shop/c/backgrounds](Click here to see examples live in the Points Shop.)[/url] [section][b]Animated Mini-profile Backgrounds[/b][/section] [h4]Visible on hover in the friends list and across the Steam Community. Should be a looping and under 4MB.[/h4] [list] [*]640 x 570px .jpg (still) <350KB [*]640 x 570px .mp4 <4MB [*]640 x 570px .webm <4MB [/list] [img]https://steamcdn-a.akamaihd.net/steamcommunity/public/images/steamworks_docs/english/anim_miniBG_GIF.gif[/img] [url=https://store.steampowered.com/points/shop/c/backgrounds/cluster/2](Click here to see examples live in the Points Shop.)…
[b]Returns:[/b] const char * The path to the png file for the glyph. E.g. [code-inline]"C:\Program Files (x86)\Steam\tenfoot\resource\images\library\controller\api\ps4_button_x.png"[/code-inline] [b]Example:[/b] [code=cpp]// Gets origins for "punch" EInputActionOrigin *origins = new EInputActionOrigin[ STEAM_INPUT_MAX_ORIGINS ]; SteamInput()->GetDigitalActionOrigins( controller1Handle, fightingSetHandle, punchHandle, origins ); EInputActionOrigin firstOrigin = origins[0]; //i.e, k_EInputActionOrigin_PS4_X // This is a function from the game itself that tries to get custom glyph art int glyphTextureID = getHardCodedButtonGlyphTexture( firstOrigin ); // We didn't ship any art in our game for this origin! …
const char *localGlyphPath = SteamInput()->GetGlyphForActionOrigin_Legacy( firstOrigin ); printf( "path = %s\n", localGlyphPath ); // "path = C:\Program Files (x86)\Steam\tenfoot\resource\images\library\controller\api\ps4_button_x.png" //a function from the game that turns a file path into a usable game texture glyphTextureID = loadButtonGlyphTextureFromLocalPath( localGlyphPath ); }[/code] [subsection=GetGlyphForXboxOrigin]GetGlyphForXboxOrigin[/subsection] [code=cpp]const char * GetGlyphForXboxOrigin( EXboxOrigin eOrigin );[/code] [table] [tr][th]Name[/th][th]Type[/th][th]Description[/th][/tr] [tr][td][b]eOrigin[/b][/td][td][apitype]ISteamInput::EXboxOrigin[/apitype][/td][td]The Xbox controller origin you want to get the glyph for.…