Steam Web API/Feedback

From Valve Developer Community

Jump to: navigation, search

Contents

Problems

Data layout & error handling inconsistency

This is really important for a good API: Almost all methods response with other data layouts. While the TF2 methods (except that for the Golden Wrenches) have a consistent layout. All other methods respond with different data. This isn't a huge problem for single applications, but for a library that wants to abstract access to the Web API.

  • I was happy to see the first two TF2 methods having a unified layout and error handling and integrated a pretty nice abstraction into my library Steam Condenser. But this doesn't fit all the other methods that came afterwards and pretty much obsoletes any effort to abstract API access into a single class. --Koraktor

As TF2's methods are pretty much everything that's needed, I'm fine with it the way it is, but to be honest, all reponses should more or less look like the follwoing:

response
 \
 |-status
 |  \
 |  |-code
[|  \-detail] # This is only needed for errors (or warnings, e.g. "Your API request limit is almost reached: 10 left")
 \-data
    \
    .
    .
    .

API Considerations for Web Developers

Currently, the "Steam Web API" isn't very forgiving to web developers. There is a lack of support for the JSONP protocol and the API's acceptable usage policy requires that the API key is not to be shared. As described, using this API key inside of a Javascript file (which is downloaded in full source by the client) would be against the policy that Valve has provided. This requires that anyone wanting to create a web site that makes use of this data would be required to run a proxy (which I have personally done) in order to properly hide the API key. This could be remedied by changing the usage policy to allow "sharing" of the key, or to simply provide a mechanism that provides public keys that work along-side the private ones.

An API that I am working on strictly enforces that a proxy be used in it's current implementation, but I hope one day to allow someone to provide their API key in their Javascript files and download API data through a jsonp request. This would be ideal for wider usage in the web world. monokrome 04:37, 1 August 2010 (UTC)



I would like to add to user monokrome's suggestion. In the case of TF2, where the data that is returned is usually public, there is little to no security concern for implementing a JSON-P format. It could be done transparently through URL parameters and would not break any existing applications. The benefit would be significantly faster applications since Steam's API servers no longer have to be proxied by the application's servers and the request can be done on the client.

Although, this would require changes to the way Steam handles API keys. If the motivation behind implementing the API key system is to track server load and hinder API abuse, there is much to be learned from well-established JSON-P providers like Twitter, Facebook and Yahoo. Their implementations of JSON-P allow client-side, cross-site requests and also limit usage at the user/client level, instead of at the application level. So a single user (and IP) that is using an abnormal amount of usage can be blacklisted, instead of the entire web application. Doesn't that sound nice?

In order to bring some very cool Steam API applications to light, I hope Valve can implement a more friendly cross-site request protocol. Thanks for reading.

--Dum 01:19, 9 September 2011 (PDT)



3 years later. The API is reasonably unusable in command line applications, applications which don't use a web browser and applications where the source is viewable.

voltagex 20:00, 16 November 2013 (PST)

Allow custom profile nicknames in the API

Right now you have to know the 64bit SteamIDs for any player related API call. The old community XML allows using the players nicknames (a.k.a. custom URLs). This seems to be a must-have for the Web API.

JSON input does not work

Trying to get a filtered result of IPlayerService/GetOwnedGames with a URL encoded JSON object does not work, I just get the whole list of games. I tried several combinations for the URL parameters to no avail. Did anyone had success with that approach or is it simply broken? --Koraktor 22:59, 11 March 2013 (PDT)

I can confirm this, no combination of anything seems to filter, I always get the full list for the given user. --Flyvehest 14:20, 14 March 2013 (PDT)

Suggestions

GetPlayerSummaries

Please make GetPlayerSummaries with more than one steamid to show it in order one. for example: http://api.steampowered.com/ISteamUser/GetPlayerSummaries/v0002/?key=XXXXXXXXXXXXXXXXXXXXXXX&steamids=76561197960435530,76561197960435531 responce will be first for 76561197960435530, second for 76561197960435531. Now responce showing with no order. --Desire 05:22, 27 August 2012 (PDT)

Allow using API in desktop applications

Please allow using Steam Web API in desktop applications

Provide more information about player profiles (like the old XML interface)

ISteamUser should either have another method to get the entire information about a player (e.g. friends, groups and games) or GetUserSummaries should provide these (with an optional argument):

Provide games and packages information

There should be something like ISteamGame to retrieve information about every game available on Steam. One method to get all games and one for detailed information about one game, e.g. appid, name, release date, publisher, achievements, store link, price (depending on the country code) etc. and all subIDs (packages) they're included in.

Equally there should be something like ISteamPackage to retrieve information about every package available on Steam. One method to get all packages and one for detailed information about one package. e.g subid, name and all appIDs of games, that are included and price (depending on the country code).

Both interfaces also should have a third method that only returns a "last update" time stamp of the games / packages list to decrease traffic. This way a developer only needs to update his data if the time stamp has changed.

Search for players and groups

A feature to search for community profiles and groups would be nice, too.

Provide language options

For methods that may return localized data (like ISteamUserStats/GetGlobalAchievementPercentagesForApp) an additional parameter (lang or language) should be available to provide a two-character language name. ITFItems_440/GetSchema is already doing this.

Provide last 10 persona history

It will be helpful if you can get persona histories via API. The output will be nice if ordered by time from latest.

Access to blotter

It would be great to be able to get the blotter history for a user as JSON/XML (even RSS?). Parsing the HTML is not hard but obviously is quite fragile. More structured information could be provided eg specific dates, achievement names, etc.

Let a user authorise access to private data (ie OAuth)

Currently the only way to get at private data (eg current game, blotter history) is to either create a dummy steam account and have the user add you as a friend or ask the user for their credentials. Providing a way for a user to authorise a third-party website to access their data via something like OAuth would remove this difficulty.

  • A great way to do this is using the OpenID system. When someone logs into the site using OpenID, authorize that site and API Key on file for that site to access private data from the user's profile. Optionally, you can have add an agreement tic to notify the user that they are sharing their normally private data. --Deadeye536 01:16, 4 October 2010 (UTC)
    • Care to give more info on that? I'm very familiar with both OpenID and OAuth and I'm not how I would get a user would authorise ongoing access to an API using OpenID directly. I suppose something could be (nastily) hacked on via SREG or AX, but the Steam OpenID endpoint doesn't claim support for those Robn 06:54, 25 October 2010 (UTC)

Community Announcements

Allow us to post announcements / events to the community website through the API. This would allow better integration with Clan websites / CMS engines and make the management of communities easier.

Community Data Group API

Currently the only information you can get about groups is who is in them. I'd love to see an equivalent to the player profile, but for groups. Elements: group name, abbreviation, headline, summary, custom url/id, country, avatar images, administers, officers, websites, player of the week, recent announcements

--KarlKFI 13:35, 23 July 2011 (PDT)

List of "Community Game Names"

The Leaderboards and Stats are only available if you know each game's "CommunityGameName". Is there a list of these somewhere?

--KarlKFI 13:35, 23 July 2011 (PDT)

I'd also like a way to resolve a game name from the appid

-Grant 2013

Achievements List

One frequent request is to be able to compare achievements or even just count the number of achievements players have for each game and for all games. Being able to request a list of received achievements for a player and/or total possible achievements for a game would be awesome.

--KarlKFI 13:35, 23 July 2011 (PDT)

Add ?xml=1 to achievements page of any player. SiPlus 04:49, 11 December 2011 (PST)

Less data

Ability for Clan websites / WCMS to receive less data.

--Diblo Dk 06:44, 27 July 2011 (PDT)

Resolve nickname to Steam ID

An extremely useful feature would be to grab the Steam IDs of the users in a server. Currently, server queries only return player nicknames, unless you have RCON access to the server. Steam IDs could conceivably be returned by the GetAccountPublicInfoBySteamID but I imagine that would be more cumbersome. A simple solution would be to have a method much like the ResolveVanityURL with the same response:

--Mooshee 15:04, 21 February 2012 (EST)

Provide more information with the API call

For the GetPlaySummaries, it would be nice to return total achievements of the user, number of games the user has and last time the user has played a game. For the GetPlayerAchievements, it would be nice to return unlockTimestamp.

Wishlist

Provide a API call to get user's wishlist or let &xml=1 work in http://steamcommunity.com/id/XXXXXXXXXX/wishlist/.

And provide &json=1 to all community pages too.

Provide a real bug tracker

The recent betas for Steam and Half-Life / CS 1.6 for Linux proved that a real bug tracker open to the community helps to improve the development process. Given that the Web API is targeted to developers and they're more convenient with using bug trackers this should be also applicable here. Please consider creating a new repository in the ValveSoftware organization on GitHub dedicated to the Web API. --Koraktor 22:53, 14 February 2013 (PST)

This gets more and more pressing. With the official deprecation of the old XML endpoints (https://partner.steamgames.com/documentation/community_data), there should be a replacement for (most) of the data available via the old APIs. The Wiki(s) don't seem to be the right place to communicate and track the progress on the Web API. And it seems most of the bug reports and feature requests here did never find their way to someone in power. --Koraktor 01:05, 7 March 2013 (PST)

Provide a mailing list

Please consider to setup a mailing list for the developers using the Web API. It would be a reasonable addition to hlds, hlcoders et al. --Koraktor 01:10, 7 March 2013 (PST)

Profile privacy, not enough info available

GetPlayerSummaries communityvisibilitystate does not show the true privacy level for the user, it seems to only provide whether the user is public vs. "not public". The old community XML provided an indicator of the privacy level. Since the community XML is now deprecated, we would like to see this provided. We track the actual privacy setting (e.g. friendsonly, usersonly, friendsfriendsonly, etc) for Steam profile reputation purposes. Steam Community will tell you both in the web UI and XML data whether the profile is restricted to friends yet the web API doesn't show us that. Please add a way to query this.

-- Mattie 08:35, 9 May 2013 (PDT)

Provide an API for badges

With the Trading Cards beta badges got a bit more “important”. So an API to get all / a user's badges (+ information, progress etc.) would be a valuable addition. --Koraktor 08:58, 12 June 2013 (PDT)

It seems this is partly available (without human readable descriptions) via IPlayerService/GetBadges and IPlayerService/GetCommunityBadgeProgress. Those are not available via ISteamWebAPIUtil/GetSupportedAPIList, see http://wiki.teamfortress.com/wiki/Category:WebAPI. --Koraktor 11:13, 12 June 2013 (PDT)

Provide an API to the Steam inventory

Gifts, trading cards, profile backgrounds, emoticons all reside inside Steam's inventory, but there's no API for that. I'd expect this to be accessible at IEconItems_730/GetPlayerItems. ---Koraktor 08:57, 12 June 2013 (PDT)

Allow querying multiple apps for GetPlayerAchievements

There should be a way to pass several app IDs to the GetPlayerAchievements call (e.g. comma-delimeted). Essentially this means one single call to the API to get all of a player's achievements across all their games, instead of one API call per app ID. e.g.: ISteamUserStats/GetPlayerAchievements/v00001/?key=xxxxxxxx&steamid=xxxxx&appids=200,210,400. --Dixta 15:52, 28 July 2013 (PDT)

GetUserAchievements DISAPPEAR DATA

With the new API, some achievements DATA have disappear, like the icon of the Achievement, and the gained date. --Gaeld 15:52, 08 August 2013 (PDT)

CS:GO Weapon Images

There is currently no way to get the skinned weapon image from CS:GO's Schema/GetPlayerItems response, with the wear. Steam's inventory viewer has access to the URLs, so maybe that could be ported across. Pigophone2 16:54, 14 September 2013 (PDT)

CS:GO ISteamUserStats/GetUserStatsForGame should show competitive stats, and also expanded

No competitive stats are listed in the method, and the 'last game' stats only count casual games, and seem to only update each hour. Pigophone2 16:54, 14 September 2013 (PDT)

CS:GO Competitive Match Information

It would be interesting to be able to find out competitive match information -- exactly like what DOTA 2 has. It could contain all the players in the map, with their steamids and competitive ranks, the score at half time/full time. There are probably a few more bits of info that could also be included. Pigophone2 16:54, 14 September 2013 (PDT)

Provide HTTPS access to Avatar images

We use the API on pages that we serve via HTTPS. Please make it possible to request the avatar url over HTTPS.

Bugs/Live issues

500 Error

The steamcommunity XML data is returning Error 500 for TF2 Game stats: e.g. this url http://steamcommunity.com/id/ChetFaliszek/stats/TF2/?xml=1 Gives an error page where as it was working before. As referred to by: https://partner.steamgames.com/documentation/community_data -- Jddcef 01:57, 9 January 2012 (PST)

GetAccountPublicInfoBySteamID Broken?

Using the following method call, I always get a failed result.

 result  {
   success: false,
   error: "SteamID does not refer to a persistent gameserver account"
 }

Where the steamID was the value returned for "gameserversteamid" from GetPlayerSummaries while I was connected to "Valve tf Server #8 (srcds111.iad-1)".

--Mooshee 15:04, 21 February 2012 (EST)

TF2 Item Origin

Item origin is buggy and/or incorrect. For example, many Bill's Hats are showing as timed drop. This was a promotional item and should be marked as such. There is also an origin flag "traded", but it's not clear when that attribute is used: Traded items usually do not acquire the origin to be set as "traded". For example, store purchased keys will keep their store purchased after being traded. My suggestion would be to make the item origin cumulative. If an item was purchased, then traded, it should be possible to tell what the original origin was, as well as the current origin. This way, we can tell in a user's inventory if the item has ever been traded, or if he is the original owner.

-- Srabouin 12:46, 24 April 2012 (PDT)

CS:GO GetServer/ClientVersion not linked

http://api.steampowered.com/IGCVersion_730/GetServerVersion/v0001 and http://api.steampowered.com/IGCVersion_730/GetClientVersion/v0001 return success, but state the version as 0. Pigophone2 16:49, 14 September 2013 (PDT)

Personal tools
Namespaces
Variants
Actions