<?xml version="1.0"?>
<rss version="2.0"><channel><title>All Activity</title><link>https://dev.doctormckay.com/discover/</link><description>McKay Development - All Activity</description><language>en</language><item><title>How to obtain Steam&#x2019;s real-time currency exchange rates?</title><link><![CDATA[https://dev.doctormckay.com/topic/5956-how-to-obtain-steam%E2%80%99s-real-time-currency-exchange-rates/?do=findComment&comment=14834]]></link><description>May I ask how I can obtain Steam&#x2019;s real-time currency exchange rates? Does Steam provide a dedicated API for this? Thank you very much!</description><pubDate>Tue, 22 Sep 2026 03:57:45 +0000</pubDate></item><item><title>Scraping community items</title><link><![CDATA[https://dev.doctormckay.com/topic/5955-scraping-community-items/?do=findComment&comment=14833]]></link><description>Hi! For many years I used steam's community market search to scrape list of community items. But not so long ago steam removed items with no listings (0 price) from the search results, which made it even less reliable. 
	 
	How do you update your list of community items? 
	 
	I'm talking about profile backgrounds, emoticons, etc. (I can fetch card names from badge page)</description><pubDate>Thu, 17 Sep 2026 11:09:42 +0000</pubDate></item><item><title>new_assetid from getExchangeDetails is undefined</title><link><![CDATA[https://dev.doctormckay.com/topic/5934-new_assetid-from-getexchangedetails-is-undefined/?do=findComment&comment=14832]]></link><description>You are right, thats actually doesn`t matter)
 


	 
 


	Thank you for your answers!</description><pubDate>Mon, 07 Sep 2026 18:02:55 +0000</pubDate></item><item><title>new_assetid from getExchangeDetails is undefined</title><link><![CDATA[https://dev.doctormckay.com/topic/5934-new_assetid-from-getexchangedetails-is-undefined/?do=findComment&comment=14831]]></link><description>Id argue float alone would be enough and pattern id makes it bulletproof. But I guess your addition wont hurt. 
 


	 
 

 


	I think you don't need all that. Same applies for cases and stickers, they are all identical. If you have 5 vanilla BFK from 5 diff users and one withdraws it does not matter which one you return. Or if someone buys/withdraws a case or vanilla knife you can send whichever one of the tradable stock. All you need to store is the class_id, the count and ownership. Exact unit is irrelevant. 
 

 


	Ye thats exactly why I suggested that. No possibility of any gaps no additional requests needed no need to implement caps on bots. Its a stopgap/workaround but what can you do when they pull shit like that.</description><pubDate>Mon, 07 Sep 2026 17:57:14 +0000</pubDate></item><item><title>new_assetid from getExchangeDetails is undefined</title><link><![CDATA[https://dev.doctormckay.com/topic/5934-new_assetid-from-getexchangedetails-is-undefined/?do=findComment&comment=14830]]></link><description>About multiple outbound offers, I will cap it at one live offer per bot at a time:
 


	1) bot sends trade offer 
	2) bot listens to sentOfferChanged event 
	3a) if user accepts: save data, mark bot as free, move to next offer in queue 
	3b) if user doesn`t respond within 5 min: bot cancels the offer, marks itself free, moves on
 


	(p.s. offers are queued via BullMQ, with concurrency capped at 1 per bot)
 


	 
 


	About replacing asset_id by hash. 
	 
	Good point. I just realised that we can do such operation:
 


	 
	
 


	 
 


	The hash is: pattern_id + float + class_id. 
	 
	Where class_id is the unique category of item, so 
	we don`t confuse two different items that have the same 
	float+pattern_id (a very small chance but whatever). 
	 
	And that kind of functionality doesn`t require comparison before and after every trade which won`t get us ratelimited.
 


	 
 


	But here is one little problem:
 


	In Counter Strike, there are items that don`t have pattern_id and float values... and i`m talking about vanilla-knifes.
 


	So, for normal items the logic above is great fast and reliable, and for vanilla items i don`t know another better solution than compairing inventories before and after trade.
 


	 
 


	Correct me if I`m wrong and thank you for answering.</description><enclosure url="https://dev.doctormckay.com/uploads/monthly_2026_09/image.png.874c9fad8a8b834414757ede586ed88c.png" length="105993" type="image/png"/><pubDate>Mon, 07 Sep 2026 13:14:06 +0000</pubDate></item><item><title>new_assetid from getExchangeDetails is undefined</title><link><![CDATA[https://dev.doctormckay.com/topic/5934-new_assetid-from-getexchangedetails-is-undefined/?do=findComment&comment=14829]]></link><description>What happens when you have multiple outbound offers, unless you cap it at one live outbound offer and like you said accept only one trade after a successful update. But all that can be done better like I said by replacing assetId by hashing float value with pattern ID, this is unique and immutable, no gaps ever.</description><pubDate>Mon, 07 Sep 2026 10:52:54 +0000</pubDate></item><item><title>new_assetid from getExchangeDetails is undefined</title><link><![CDATA[https://dev.doctormckay.com/topic/5934-new_assetid-from-getexchangedetails-is-undefined/?do=findComment&comment=14828]]></link><description>As I said, in theory, my idea should work. 
	You are absolutely right about the possibility of gaps caused by failed inventory updates. To prevent this, I will save every user`s operation in the database and retry every failed or pending operation until the bot can successfully compare the inventory before and after the trade. Only after the current operation is fully verified will the bot proceed to the next trade. 
	 
	P.S. I hope this will work not only in theeeooryy lol</description><pubDate>Sun, 06 Sep 2026 15:15:28 +0000</pubDate></item><item><title>new_assetid from getExchangeDetails is undefined</title><link><![CDATA[https://dev.doctormckay.com/topic/5934-new_assetid-from-getexchangedetails-is-undefined/?do=findComment&comment=14827]]></link><description>I guess you are right. As long as you make it airtight to fetch inventory on each accepted trade that could work. It is risky though as certain regions might have access to endpoints while yours might have issues that would create gaps (multiple trades that you sent are accepted by recipients in a short window where your system failed to update). Ridiculous on how they let it happen and not fix it for so long... Another a bit safer method would be mapping float values from incoming and outgoing trades that would be more bulletproof. For assets without float values there is no point in mapping exact units as they are all identical anyways and count book keeping is all you need.</description><pubDate>Sun, 06 Sep 2026 14:16:35 +0000</pubDate></item><item><title>new_assetid from getExchangeDetails is undefined</title><link><![CDATA[https://dev.doctormckay.com/topic/5934-new_assetid-from-getexchangedetails-is-undefined/?do=findComment&comment=14826]]></link><description>I tried to visualize my view of how It should work, and actually i cant see any problems except of getting ratelimited due to such operations. 
	 
 


	Correct me if Im wrong and ask questions Is something is not clear.</description><enclosure url="https://dev.doctormckay.com/uploads/monthly_2026_09/image.png.25040d620c8fb7ffa47a71c1ae6f6782.png" length="169046" type="image/png"/><pubDate>Sun, 06 Sep 2026 10:39:59 +0000</pubDate></item><item><title>new_assetid from getExchangeDetails is undefined</title><link><![CDATA[https://dev.doctormckay.com/topic/5934-new_assetid-from-getexchangedetails-is-undefined/?do=findComment&comment=14825]]></link><description>As I was writing an explanation on why that would not work I realised it potentially could depending on your actual needs, so I stand corrected. What I meant is that if someone sends you 5 x AK Redline FT you will not be able to map the old IDs to the new ones unless you track float to match that way.</description><pubDate>Sat, 05 Sep 2026 22:13:11 +0000</pubDate></item><item><title>new_assetid from getExchangeDetails is undefined</title><link><![CDATA[https://dev.doctormckay.com/topic/5934-new_assetid-from-getexchangedetails-is-undefined/?do=findComment&comment=14824]]></link><description>Why not? When I save the bot`s inventory data before trade, then after the trade i just compare old inventory with the new one. 
	No matter how much items user will send to my bot. 
	 
	I mean the logic should work like this: 
	 
	Inventory assets before trade: 
	1111 
	2222 
	3333 
	 
	Inventory assets after trade: 
	1111 
	2222 
	3333 
	4444 
	5555 
	 
	the new one are 4444 and 5555. 
	 
	So the comparison, in theory, should work on DB level. 
	 
	Currently I did not implement this feature due to a large amount of work on other aspects of my project and Im also trying to figure out how to correctly implement this kind of feature. 
	 
	I will be very gratefull if you can clarify how to do this</description><pubDate>Sat, 05 Sep 2026 20:21:43 +0000</pubDate></item><item><title>Issue with GetTradeOffer: Getting HTTP 420 Errors</title><link><![CDATA[https://dev.doctormckay.com/topic/5954-issue-with-gettradeoffer-getting-http-420-errors/?do=findComment&comment=14823]]></link><description>Just Use proxies for any kind of ratelimits steam ithink now applies dynamic ratelimits dont know for sure by yeah. 
	Use proxies</description><pubDate>Wed, 02 Sep 2026 02:42:18 +0000</pubDate></item><item><title>Issue with GetTradeOffer: Getting HTTP 420 Errors</title><link><![CDATA[https://dev.doctormckay.com/topic/5954-issue-with-gettradeoffer-getting-http-420-errors/?do=findComment&comment=14822]]></link><description>The GetTradeOffer function hasn't been working properly for a few weeks for me now. After just 2&#x2013;3 requests, it starts returning an HTTP 420 error.
 


	It seems like a strict IP rate limit, as the error persists even when switching between different Steam accounts.
 


	Has anyone else run into this issue or found a workaround?</description><pubDate>Tue, 01 Sep 2026 16:26:57 +0000</pubDate></item><item><title>new_assetid from getExchangeDetails is undefined</title><link><![CDATA[https://dev.doctormckay.com/topic/5934-new_assetid-from-getexchangedetails-is-undefined/?do=findComment&comment=14821]]></link><description>This would work fine for single item trades but exact pairings of assets still cant be achieved using that.</description><pubDate>Mon, 31 Aug 2026 15:23:07 +0000</pubDate></item><item><title>new_assetid from getExchangeDetails is undefined</title><link><![CDATA[https://dev.doctormckay.com/topic/5934-new_assetid-from-getexchangedetails-is-undefined/?do=findComment&comment=14820]]></link><description>Thank you very much!&#x1F609;</description><pubDate>Sun, 30 Aug 2026 21:53:09 +0000</pubDate></item><item><title>new_assetid from getExchangeDetails is undefined</title><link><![CDATA[https://dev.doctormckay.com/topic/5934-new_assetid-from-getexchangedetails-is-undefined/?do=findComment&comment=14819]]></link><description>yes after the trade the new asset id is visible so just set up a inventory poll and u should be good any steam trading bot does inventory poll but be careful not to set the poll too frequent u can get ratelimited very fast. 
	the old asset id is still in the event handler response so u have both the new id and the old one how i do it is i store a template of the doc in db then use a backfill script to fill in the new asset id. 
	Hope that helps 
	Regards</description><pubDate>Sun, 30 Aug 2026 14:30:40 +0000</pubDate></item><item><title>new_assetid from getExchangeDetails is undefined</title><link><![CDATA[https://dev.doctormckay.com/topic/5934-new_assetid-from-getexchangedetails-is-undefined/?do=findComment&comment=14818]]></link><description>Thank you for the answer! 
	 
	You mean I should compare my Bot`s inventory before and after the trade and then exctract the new items by asset_ids that i didn`t have before trade right?</description><pubDate>Thu, 27 Aug 2026 08:41:49 +0000</pubDate></item><item><title>new_assetid from getExchangeDetails is undefined</title><link><![CDATA[https://dev.doctormckay.com/topic/5934-new_assetid-from-getexchangedetails-is-undefined/?do=findComment&comment=14817]]></link><description>use the get inventory contents for hte new assetid</description><pubDate>Wed, 26 Aug 2026 23:19:28 +0000</pubDate></item><item><title>new_assetid from getExchangeDetails is undefined</title><link><![CDATA[https://dev.doctormckay.com/topic/5934-new_assetid-from-getexchangedetails-is-undefined/?do=findComment&comment=14816]]></link><description>Hi everyone! 
	Any updates on this topic?
 


	Currently the issue is still not fixed, maybe someone figured out another way to reliably determine who sent which item without new asset_id?
 


	I tried to check by Item Certificate but it also changes after trade between users.</description><pubDate>Fri, 21 Aug 2026 07:40:52 +0000</pubDate></item><item><title>New request limits? (429 error)</title><link><![CDATA[https://dev.doctormckay.com/topic/5946-new-request-limits-429-error/?do=findComment&comment=14815]]></link><description><![CDATA[I also used those headers and now works perfectly. I'm using a VPS without proxy and before it always failed (429) at https://steamcommunity.com/inventory/&lt;s teamId&gt;/440/2.]]></description><pubDate>Mon, 17 Aug 2026 22:58:23 +0000</pubDate></item><item><title>Do I Need Proxies for Fetching Steam Inventories at Scale?</title><link><![CDATA[https://dev.doctormckay.com/topic/5953-do-i-need-proxies-for-fetching-steam-inventories-at-scale/?do=findComment&comment=14814]]></link><description>1. Yes, and they are quite low 
	2. Basically after only a few dozen requests per day 
	3. Rotating (but sticky) proxies 
	4. Residentials are better 
	5. Decodo works fine, but make sure you get IPV4 and not IPV6 
	6. No</description><pubDate>Sun, 26 Jul 2026 12:57:57 +0000</pubDate></item><item><title>Do I Need Proxies for Fetching Steam Inventories at Scale?</title><link><![CDATA[https://dev.doctormckay.com/topic/5953-do-i-need-proxies-for-fetching-steam-inventories-at-scale/?do=findComment&comment=14813]]></link><description>Hi everyone,
 


	I'm currently building a system that needs to fetch users' Steam inventories programmatically.
 


	The main goal is to retrieve Steam inventory data reliably for a website/application, potentially for many different Steam accounts and with a relatively high number of requests.
 


	I'm trying to understand whether using proxies is necessary for this kind of setup.
 


	A few questions:
 


	
		Does Steam impose strict rate limits or IP-based restrictions when fetching public inventories?
	
	
		At approximately what request volume would proxies become necessary?
	
	
		Would rotating proxies be recommended, or would a small pool of static proxies be sufficient?
	
	
		Are datacenter proxies usually enough for Steam inventory requests, or are residential/ISP proxies required?
	
	
		What would be the most cost-effective proxy provider for this use case?
	
	
		Is there a better architecture for handling Steam inventory requests without relying heavily on proxies?
	



	My priority is reliability and keeping the operating cost as low as reasonably possible.
 


	I'd appreciate any advice from people who have experience dealing with Steam inventory endpoints at scale.
 


	Thanks!</description><pubDate>Fri, 24 Jul 2026 13:29:05 +0000</pubDate></item><item><title>How to use requestLiveGameForUser(steamid)?</title><link><![CDATA[https://dev.doctormckay.com/topic/5952-how-to-use-requestlivegameforusersteamid/?do=findComment&comment=14812]]></link><description><![CDATA[Hello,
 


	I've been trying to get this to work without any luck, and I can't find much information about it, so I thought I'd ask here.
 


	I'm currently trying to retrieve live match data for a user on my friends list who is currently playing a CS2 casual match, using the following code:
 


	
		let user = new SteamUser();
	

	
		let csgo = new GlobalOffensive(user);
	
	 

	
		user.logOn({ refreshToken: 'x' });
	
	 

	
		user.on('loggedOn', () =&gt; {
	

	
		        console.log('user logged on')
	

	
		        user.setPersona(SteamUser.EPersonaState.Online);
	

	
		        user.gamesPlayed(730);
	

	
		})
	
	 

	
		csgo.on('debug', (message) =&gt; {
	

	
		    console.log(message);
	

	
		})
	
	 

	
		csgo.on('connectedToGC', () =&gt; {
	

	
		    console.log('connected to GC')
	

	
		    csgo.requestLiveGameForUser('76561199034391625');
	

	
		});
	
	 

	
		csgo.on('matchList', (matches, data) =&gt; {
	

	
		    console.log(data)
	

	
		})
	



	The connectedToGC event is emitted successfully, and requestLiveGameForUser does send the following message: "Sending GC message MatchListRequestLiveGameForUser" but it never emits the matchList event in return.
 


	I've also tried requestRecentGames(), which works fine for my own logged-in user, but not for friends. That's not an issue for what I'm doing, though.
 


	Any help or advice would be greatly appreciated.]]></description><pubDate>Wed, 22 Jul 2026 00:04:10 +0000</pubDate></item><item><title>New request limits? (429 error)</title><link><![CDATA[https://dev.doctormckay.com/topic/5946-new-request-limits-429-error/?do=findComment&comment=14811]]></link><description>I only recently switched to this option and not a single error in few days. Previous iteration also worked well with confirmations, but had some issues with inventory loading. 
	 
	Did last community update fixed this issue? (github people say no)</description><pubDate>Sun, 19 Jul 2026 19:20:11 +0000</pubDate></item><item><title>Http 429 Load inventory</title><link><![CDATA[https://dev.doctormckay.com/topic/5948-http-429-load-inventory/?do=findComment&comment=14810]]></link><description>hi, did u update SteamCommunity on a new version?</description><pubDate>Wed, 15 Jul 2026 08:32:34 +0000</pubDate></item></channel></rss>
