Dota 2 inventory API with prices
CS2.SPACE's GET /api/dota2/inventory/{id} returns a player's public Dota 2 inventory as parsed JSON: each item's hero, slot, type, rarity, quality, tradability and a live USD market price, with totals per type, rarity and hero. Filter by hero or type and sort by price.
Available on the PRO and DEVELOPER plans, with the same API key as the CS2 endpoints. Pass a SteamID64 or custom profile name.
What you get
Hero & slot
Which hero each cosmetic belongs to and where it equips (weapon, head, shoulder...), so you can group a set or a hero's whole collection.
Rarity & quality
Rarity (Common to Arcana) and quality (Standard, Inscribed, Genuine, Unusual, Autographed...) with their colours.
Live prices
USD market prices, refreshed every 15 minutes, and the inventory's total value.
Filter & sort
?hero=Juggernaut, ?category=Courier, ?sort=price_desc, and pagination up to 1,000 items.
Example
curl -H "x-api-key: YOUR_KEY" "https://cs2.space/api/dota2/inventory/76561198001497299?sort=price_desc&limit=1"const res = await fetch("https://cs2.space/api/dota2/inventory/76561198001497299?sort=price_desc&limit=1", {
headers: { "x-api-key": process.env.CS2_SPACE_API_KEY },
});
const data = await res.json();import os, requests
data = requests.get(
"https://cs2.space/api/dota2/inventory/76561198001497299?sort=price_desc&limit=1",
headers={"x-api-key": os.environ["CS2_SPACE_API_KEY"]},
).json(){
"steamId": "76561198001497299",
"game": "dota2",
"steamInventoryUrl": "https://steamcommunity.com/profiles/76561198001497299/inventory/#570",
"summary": {
"totalCount": 2115,
"tradableCount": 1406,
"categoryCounts": {
"Wearable": 1665,
"Cursor Pack": 9,
"Loading Screen": 162,
"HUD Skin": 12,
"Bundle": 47,
"Taunt": 43,
"Announcer": 15,
"Courier": 28,
"Tool": 47,
"Pennant": 1,
"Ward": 13,
"Gem / Rune": 9,
"League": 3,
"Player Card": 9,
"Misc": 14,
"Music": 8,
"Terrain": 2,
"Treasure": 21,
"Roshan": 1,
"Sticker Capsule": 4,
"Emoticon Tool": 1,
"Versus Screen": 1
},
"rarityCounts": {
"Mythical": 323,
"Common": 636,
"Uncommon": 462,
"Rare": 522,
"Immortal": 143,
"Legendary": 28,
"Arcana": 1
},
"heroCounts": {
"Shadow Fiend": 4,
"Medusa": 8,
"Other": 361,
"Rubick": 21,
"Dragon Knight": 45,
"Axe": 26,
"Doom": 25,
"Batrider": 18,
"Necrophos": 16,
"Spectre": 15,
"Sven": 28,
"Alchemist": 26,
"Crystal Maiden": 18,
"Night Stalker": 18,
"Drow Ranger": 32,
"Earthshaker": 23,
"Juggernaut": 56,
"Mirana": 24,
"Morphling": 21,
"Phantom Lancer": 16,
"Puck": 17,
"Pudge": 33,
"Razor": 13,
"Sand King": 11,
"Storm Spirit": 15,
"Windranger": 43,
"Kunkka": 41,
"Lina": 7,
"Shadow Shaman": 7,
"Tidehunter": 33,
"Witch Doctor": 22,
"Riki": 14,
"Sniper": 17,
"Warlock": 16,
"Beastmaster": 19,
"Queen of Pain": 12,
"Faceless Void": 6,
"Wraith King": 26,
"Death Prophet": 31,
"Phantom Assassin": 22,
"Templar Assassin": 25,
"Luna": 26,
"Nature's Prophet": 61,
"Clinkz": 17,
"Omniknight": 27,
"Enchantress": 10,
"Broodmother": 19,
"Bounty Hunter": 41,
"Weaver": 14,
"Ursa": 16,
"Spirit Breaker": 30,
"Invoker": 26,
"Silencer": 19,
"Outworld Destroyer": 11,
"Lycan": 6,
"Brewmaster": 14,
"Lone Druid": 17,
"Chaos Knight": 15,
"Nyx Assassin": 22,
"Naga Siren": 16,
"Keeper of the Light": 15,
"Slark": 14,
"Centaur Warrunner": 22,
"Magnus": 29,
"Bristleback": 7,
"Tusk": 16,
"Skywrath Mage": 18,
"Abaddon": 11,
"Lich": 13,
"Venomancer": 13,
"Tiny": 2,
"Tinker": 2,
"Pugna": 8,
"Legion Commander": 23,
"Timbersaw": 25,
"Vengeful Spirit": 14,
"Gyrocopter": 15,
"Ogre Magi": 7,
"Leshrac": 9,
"Ember Spirit": 31,
"Earth Spirit": 10,
"Clockwerk": 11,
"Dark Seer": 10,
"Elder Titan": 3,
"Techies": 2,
"Dazzle": 9,
"Lion": 18,
"Anti-Mage": 8,
"Chen": 4,
"Troll Warlord": 5,
"Meepo": 3,
"Disruptor": 14,
"Bloodseeker": 16,
"Monkey King": 3,
"Slardar": 4,
"Lifestealer": 9,
"Huskar": 11,
"Zeus": 5,
"Shadow Demon": 1,
"Pangolier": 4,
"Enigma": 5,
"Bane": 2,
"Void Spirit": 1,
"Ancient Apparition": 2,
"Undying": 5,
"Mars": 1,
"Grimstroke": 1,
"Underlord": 1,
"Phoenix": 2,
"Viper": 2,
"Arc Warden": 4,
"Jakiro": 5,
"Winter Wyvern": 1,
"Treant Protector": 1
},
"totalValue": 343.07,
"totalValueFormatted": "$343.07"
},
"items": [
{
"assetId": "25929845931",
"classId": "5047971957",
"instanceId": "2781217946",
"amount": 1,
"name": "Feast of Abscession",
"marketName": "Feast of Abscession",
"marketHashName": "Feast of Abscession",
"type": "Arcana Wearable",
"category": "Wearable",
"hero": "Pudge",
"slot": "Hero Base",
"rarity": {
"name": "Arcana",
"color": "#ADE55C"
},
"quality": {
"name": "Standard",
"color": "#D2D2D2"
},
"iconUrl": "https://community.cloudflare.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1w...",
"iconUrlLarge": null,
"tradable": false,
"marketable": false,
"steamInventoryUrl": "https://steamcommunity.com/profiles/76561198001497299/inventory/#570_2_25929845931",
"price": {
"amount": 19.15,
"formatted": "$19.15",
"currency": "USD"
}
}
],
"pagination": {
"total": 2115,
"limit": 1,
"offset": 0,
"hasMore": true
},
"cached": false,
"cachedAt": "2026-10-02T03:17:45.136Z",
"stale": false
}Endpoints
Built for
- Dota 2 inventory value checkers
- Trading and giveaway sites
- Discord bots that show a player's rarest items
Plans
| Plan | Price | Requests / month | Rate limit | Data |
|---|---|---|---|---|
| FREE | Free | 500 requests | 60 per minute | Steam profile data, SteamID conversion and rank images |
| PRO | $9.99/mo (7-day trial) | 10,000 requests | 600 per minute | Everything: adds Faceit, Leetify, and CS2 and Dota 2 inventories with prices |
| DEVELOPER | $29.99/mo | 100,000 requests | 3,060 per minute | Everything: adds Faceit, Leetify, and CS2 and Dota 2 inventories with prices |
FAQ
How do I get a Dota 2 inventory through an API?
Call GET https://cs2.space/api/dota2/inventory/{steamId} with your API key in the x-api-key header. You get every item with hero, slot, type, rarity, quality and price, plus summary totals.
Can I filter a Dota 2 inventory by hero?
Yes. Add ?hero=HeroName (case-insensitive), for example ?hero=Sven. Use ?category= for item types such as Wearable, Courier or Ward.
How are Dota 2 items priced?
Every item has a USD market price, refreshed every 15 minutes, and the summary includes the inventory's total value. Items with no active market have price: null.
How much does it cost?
The free plan includes 500 requests a month for Steam profile data, SteamID conversion and rank images. PRO is $9.99 a month (7-day free trial) for 10,000 requests and adds Faceit, Leetify, and CS2 and Dota 2 inventories with prices. DEVELOPER is $29.99 a month for 100,000 requests. Inventory data requires the PRO or DEVELOPER plan.
More from the API
Get Counter-Strike 2 player stats with one REST call: Steam profile, bans, level and lifetime CS2 stats, Faceit Elo and skill level, Leetify ratings, Premier rank and medals. Free tier.
CS2 inventory API with floats and prices →Fetch any public Counter-Strike 2 inventory as clean JSON: every skin with category, rarity, exterior, exact float and pattern seed, stickers, inspect link and live USD price.
SteamID converter API →Convert a Steam custom profile URL or SteamID64 to SteamID64, Steam32, Steam2 (STEAM_0:X:Y) and Steam3 ([U:1:X]) with one API call, plus name and avatar.
Building with an AI assistant? Give it https://cs2.space/llms.txt or the OpenAPI spec.