DOTA 2 INVENTORY API

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.

GET A FREE API KEY →FULL REFERENCE

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
curl -H "x-api-key: YOUR_KEY" "https://cs2.space/api/dota2/inventory/76561198001497299?sort=price_desc&limit=1"
JAVASCRIPT
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();
PYTHON
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()
RESPONSE (REAL, LONG ARRAYS SHORTENED)
{
  "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

GET /api/dota2/inventory/{id}

A player's Dota 2 inventory, parsed: hero, slot, type, rarity, quality, tradability and USD price for every item.

GET /api/dota2/inventory/{id}/summary

Totals only: item count, tradable count, total USD value, and counts per type, rarity and hero.

Built for

  • Dota 2 inventory value checkers
  • Trading and giveaway sites
  • Discord bots that show a player's rarest items

Plans

PlanPriceRequests / monthRate limitData
FREEFree500 requests60 per minuteSteam profile data, SteamID conversion and rank images
PRO$9.99/mo (7-day trial)10,000 requests600 per minuteEverything: adds Faceit, Leetify, and CS2 and Dota 2 inventories with prices
DEVELOPER$29.99/mo100,000 requests3,060 per minuteEverything: 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

Building with an AI assistant? Give it https://cs2.space/llms.txt or the OpenAPI spec.