Steam Web API/Feedback

== Problems ==
=== GetPlayerAchievements doesnt return info for removed demos or expired subscription games ===
While the achievements are still on Steam, only made unavailable, this function doesnt return the achievements. It would be nice if it did, or made availble by passing a variable like showall as people did unlock those achievements and would like some mention on it on sites like AStats even though they don't have the game available to them at that specific moment.
=== Steam API randomly fails with user's game catalog ===
Some users utilizing the sign-in through authentication have reported not being able to see their game catalog. After some tests, the results are that for no apparent reason, Steam API does not provide this information even if the user has everything public in their profile. The only solution found was to revoke the API key and create a new one.
=== Steam API should respect account deletion, third-party sites should be required to remove archived data from their database after a person deletes their Steam account ===
Now that Steam has made it possible to completely delete your Steam account the Steam API usage policy needs to be updated to allow Steam users to remove their data that has been indexed by third-party websites through the API. Account deletion is a serious issue and there are serious reasons why people decide to delete their accounts and throw away hundreds or thousands of dollars worth of purchased games for their privacy. With the current state of the Steam API profile information including previous usernames, profile images, previous friends and other possibly identifying data is being archived and made available for search engine indexing. People using Steam currently have no way to opt-out of Steam API data usage for third-parties and they no way of forcing third-party websites to remove their data entirely upon account deletion. I also want to mention that this is not about GDPR, this is about the ethical usage of data. People should have the right to erase their data completely regardless if said data is considered to be legal by the law. 
Anon0 (talk) 19:32, 19 May 2019 (UTC)
=== IPlayerService/GetOwnedGames returning false empty response or error ===
Since about three weeks, the IPlayerService/GetOwnedGames/v0001 service gives back the following response now and then:
{"response":{}} or even An error occurred while processing your request. This last response is obviously wrong, but also the first: for instance it happens at my own public profile at the moment, with a public game library and public playing times. With that set, the expected response should contain my games. The issue seems to resolve itself after a bunch of retries or just waiting a few hours, but also comes back randomly.
Note that this does not happen only to me, but for various steamid variables being called; while viewing their Steam profile works fine and appears public. 
I'm calling it via: http://api.steampowered.com/IPlayerService/GetOwnedGames/v0001/?key=very_secret&steamid=76561198127577202&format=json
Solution for the time being is stepping back to the deprecated XML API https://steamcommunity.com/profiles/76561198127577202/games/?xml=1, but that does not work well for large libraries and is slow. 
Please advice.
=== 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.
* This can now be achieved by using ISteamUser/ResolveVanityURL --Spezifanta 05:48, 28 January 2012 (PST)
=== 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)
I had to experiment with this a lot before I got it to work. The trick is to URL-encode the entire input_json parameter. It will look something like this: %7B%22steamid%22%3A##########%2C%22include_appinfo%22%3Atrue%2C%22include_played_free_games%22%3Atrue%2C%22appids_filter%22%3A%5B10%2C20%2C30%5D%7D --BOLL (talk) 20:20, 5 November 2018 (UTC)
== Suggestions ==
=== Introduce INVISIBLE status to Steam Web API ===
Invisible status has been introduced to Steam back in 2018. However, Steam Web API still doesn't feature invisible status. According to the documentation, Steam Web API supports statuses such as: "0 - Offline, 1 - Online, 2 - Busy, 3 - Away, 4 - Snooze, 5 - looking to trade, 6 - looking to play" - Source. Introduction of invisible status for Steam Web API would be really useful!
=== Make the Leaderboards publicly available ===
In the Steam Web API, getting leaderboard data requires a publisher API key when calling the GetLeaderboardEntries or GetLeaderboardsForGame methods.
However, currently this data is already publicly available via the deprecated XML API. Is this requirement change intentional? It would be nice if the publisher API key requirement for both methods could be dropped, allowing developers to use the Web API for getting leaderboard data instead of using the deprecated XML API.
=== Filter game list by categories ===
Return the game/app list where GetOwnedGames/?category="MyCategory". Allow the list to be "anded" i.e. ThisCategory && ThatCategory. A nice to have would be a further filter for things like installed, VR etc. These seem to all be implemented as categories vs additional labels so some bitwise manipulation as mentioned above would be able to achieve this i.e ShowAllGames( (VRGamesToPlay && VR) ) --Fathamburger 11:02, 28 Dec 2016 (EST)
=== ResolveVanityURL ===
Currently ResolveVanityURL gives you a users steamID and that's it. It would be nice when you call ResolveVanityURL it gives you the entire users profile like GetPlayerSummaries does.
Currently you have to make two calls just to get a players name if they are using a vanityURL (if you don't want to use XML, which is depreciated). --Boonie 08:40, 1 July 2016 (UTC)
=== 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):
* http://api.steampowered.com/ISteamUser/GetPlayerProfile/v0001/?steamid=XXXXXXXXXXXX
* http://api.steampowered.com/ISteamUser/GetPlayerSummaries/v0001/?steamids=XXXXXXXXXXXX&full=1
=== 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.
* http://api.steampowered.com/ISteamUser/GetPlayerProfile/steamID64/v0003/?customURL=XXXXXXXX
* http://api.steampowered.com/ISteamUser/GetPlayerProfile/customURL/v0003/?steamid=XXXXXXXXXXXX
* http://api.steampowered.com/ISteamUser/GetPlayerProfile/friends/v0003/?steamid=XXXXXXXXXXXX
* http://api.steampowered.com/ISteamUser/GetPlayerProfile/games/v0003/?steamid=XXXXXXXXXXXX
* http://api.steampowered.com/ISteamUser/GetPlayerProfile/favoriteGame/v0003/?steamid=XXXXXXXXXXXX
--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:
* http://api.steampowered.com/ISteamUser/ResolveNickname/v0001/?nickname=XXXXXXXXX
--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.
=== 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)
::I wonder if there were some changes the past year in this regard? As in: is there a dedicated place now (besides this wiki) to discuss the Steam Web API or get support for it? --Lordkhonsu (talk) 21:06, 16 November 2014 (UTC)
=== 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. --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 more information ===
No competitive stats are listed in the method, and the 'last game' stats only count casual games, and seems to only update each hour. Pigophone2 16:54, 14 September 2013 (PDT)
It should also list "Profile Rank" and "experience points earned towards next rank" Pol 12:11, 31 Decemper 2021 (CET)
=== 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)
=== CS:GO Inspect Item URL ===
Is it possible to add 'D' parameter from 'Inspect item' url to IEconItems_730/GetPlayerItems request? Or how to calculate this parameter?
Shamilik 12:42, 19 January 2015 (PST)
=== No interface to access games wishlisted by friends ===
I was trying to find a way to cross-reference games I own on humble bundle against games my friends have on their steam wishlists. It would be nice if there were an interface in the API to check what games friends have on their wishlists. 
--Lemonzeppyman 13:30, 20 November 2021 (EST)
== Bugs/Live issues ==
=== IsPlayingSharedGame no longer working, always returns not shared. ===
I've been using this function to check for ban evaders for Life is Feudal: Your Own appid 290080 for two years and recently I've only seen it return 0. I recently got a new laptop and made myself a new account to steam share and tried it out and it returns that I'm not steam sharing when I am. Looks like this function is no longer working properly, even the example returns zero. --extant1 10:39, 15, February 2020 (EST)
=== 503 Error ===
The WebAPI IEconItems_730/GetPlayerItems is returning Error 503 in 20/21 requests:
http://api.steampowered.com/IEconItems_730/GetPlayerItems/v0001/?key=<KEY>&steamid=76561198120962980
-- Shamilik 12:42, 19 January 2015 (PST)
::This seems to be user specific, certain steam IDs I'm finding will just completely fail and return a 503 with { } as the contents while others will always succeed. This is an incredibly important API endpoint if you do anything relating to automated trading as it's the only way to get the original_id of an item. --BenWoodford (talk) 16:50, 5 June 2015 (UTC)
=== GetAccountPublicInfoBySteamID Broken? ===
Using the following method call, I always get a failed result.
* http://api.steampowered.com/ISteamGameServerAccount/GetAccountPublicInfoBySteamID/v0001/?steamID=90084331676311555
 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)
=== ISteamUser/GetPlayerSummaries returns incorrect personastate for ingame/wannatrade ===
GetPlayerSummaries returns "5" for both in-game/wannatrade statuses.
Demonstration in screenshots [imgur.com]
 — Always yours Fixator10 Talk|Обсуждение 18:54, 16 July 2016 (UTC)
=== Missing hcontent_file in GetPublishedFileDetails ===
Since 2017-12-20, the hcontent_file field seems to have disappeared from https://api.steampowered.com/ISteamRemoteStorage/GetPublishedFileDetails/v1, however it is a very convenient way to compare the remote version with a local SteamCMD manifest. Please remove if this is not the right place to discuss ISteamRemoteStorage API.
--Ashka (talk) 14:38, 21 December 2017 (UTC)
== Resolved ==
==== 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)
Category:Steam
Better late than never: it seems the TF2 feed works fine again. Although your profile has the games not-public, another profile seems to work fine: https://steamcommunity.com/id/GETITOFFMEJEBUS/stats/TF2/?xml=1 You could also try the new Steam API, it allows public retrieval of stats as well.
--Reforced 11:26, 15 April 2019 (UTC+2)
==== Unlisted owned games in IPlayerService/GetOwnedGames, no game names included too ====
The WebAPI IPlayerService/GetOwnedGames is not including a certain game that I own, which was gifted to me by another user. I should TECHNICALLY own the game, and so it should appear in IPlayerService/GetOwnedGames. I'm not sure if this issue only involves gifted games. Also, I'm not able to get game names, even though I should be getting them.
* http://api.steampowered.com/IPlayerService/GetOwnedGames/v0001/?key=KEY_HERE&steamid=76561197987487345
-- Syprene 04:16, 18 November 2018 (PST)
I have experienced the same thing both with a game key I got from a Kickstarter and a game I bought directly in the store. The games in question are IDs 551440 and 928370, they just won't appear in the resulting list, with or without filtering using "appids_filter". I also have set "include_appinfo" and "include_played_free_games" to true. 
-- BOLL 20:10, 18 November 2018 (CET)
This behaviour is by design: games that are limited (e.g. "Steam is still learning about this game" or "Profile functions limited") are not in the Web API anymore. The appid's mentioned above have both "Profile functions limited".
You could use the deprecated XML API instead, otherwise you're out of luck. Announcement regarding this change can be found here: https://steamcommunity.com/groups/steamworks/announcements/detail/3077529424431732424
--Reforced 10:42, 15 April 2019 (UTC+2)
=== Provide more information with the API call ===
* I'm currently developing an app where the unlockTimestamp would be very appreciated in the newer web api, as it's currently only available on the deprecated XML one --Lordkhonsu (talk) 21:03, 16 November 2014 (UTC)
* Providing achievements' unlock timestamps in the Web API would allow achievement tracker sites to completely refrain from using the deprectated Community Data XML feeds. This is the only reason these sites still call steamcommunity.com (at least astats.nl and completionist.me afaik). Luchaos 08:14, 6 January 2017 (CET)
Timestamps are included in GetPlayerAchievements as of 2017-05-02. --Luchaos (talk) 14:39, 7 May 2017 (UTC)
=== 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.
Avatars can be fetched over HTTPS --Luchaos (talk) 14:39, 7 May 2017 (UTC)
Parse the avatar hash accordingly in your application and prefix it with the akamai base URL:
* https://steamcdn-a.akamaihd.net/steamcommunity/public/images/avatars/ 6b/6bd606bced97bdfc053ef877c57f33b6fc1dc638_full.jpg