Inventory

⚡ Fetch Steam Inventory with Pricing & Doppler Phase Detection

Baseurl: https://www.steamwebapi.com/steam/api/inventory?steam_id=760000022222&game=cs2&key=YOUR_API_KEY

Fetch a Steam inventory with live prices, float values, and item metadata — rate-limit free.

Returns either Steam's raw response or an enriched version with prices and metadata (controlled via parse).


Key features:

  • Live prices from Steam and 10+ third-party markets.
  • Float values & stickers included by default for CS2. Each float.stickers[] entry includes wear from 0 to 1 (0 = unscratched, 1 = fully worn), or null when unavailable or not safely matched.
  • Doppler phase detection — automatically detects the exact phase (Phase 1–4, Ruby, Sapphire, Black Pearl, Emerald) from the item image. The image field is replaced with the phase-specific variant image. Use with_phase_price=1 to also get the exact phase price in pricereal.
  • Trade-protected skins (CS2) — detect recently received skins that are not yet visible in normal public inventory, with parse=1 on the first page (without start_assetid). This context-16 detection does not include newly received cases; cases already present in context 2 remain included. Use the authenticated partner path and optionally provide a Trade URL with an access token. trade_locked=0 returns context 2 only (default), 1 returns context 16 only, 3 starts both and returns as soon as context 2 is usable, and 4 requires both. Partner modes 1 and 3 cost +1 credit; explicit mode 4 costs +2. Supplying a Trade URL alone does not request protected items and retains its separate +1-credit surcharge.
  • Own inventory — use steam_login_secure with trade_locked=0 for context 2 or 1 for context 16. Combined modes 3 and 4 are available only on the partner path without that cookie. No steam_id is needed (it is ignored). Find the cookie in your browser dev tools.
  • Fallback mode — returns cached data when inventories are private or unavailable.
  • Steam Community URL compatible — works like https://steamcommunity.com/inventory/{steamid}/730/2. Replace the Steam URL with our Baseurl.
  • Pagination — Steam returns at most 2,000 assets per page. Follow the last_assetid response header with start_assetid until the header is absent, and use limit and offset within a page.
  • Multiple formats — JSON, CSV, XML, gzip, and more.
get/steam/api/inventory

Request

  • Base URL: https://www.steamwebapi.com
  • URL: https://www.steamwebapi.com/steam/api/inventory
  • Auth: API key in query parameter key

Query parameters

keystring required
Example:your-api-key-here

Your API key from the dashboard (top-right corner). Required for authentication.

steam_idstring required
Example:76561198100000000

The Steam ID of the user. Accepts formats: steamid, steamid3, steamid64, or vanity URL. Using account names may slow the request due to additional Steam API calls.

state'active' | 'fallback' | 'takedb'

Specifies the inventory fetch mode:\n- active (default): Fetch live inventory from Steam.\n- fallback: Try live first, fallback to cached data if private/inaccessible.\n- takedb: Always fetch from our database (fastest, may be outdated).\n\nCached data includes timestamp in response headers. Explicit partner-inventory trade_locked=1, 3, or 4 requires active; historical database rows cannot guarantee the requested contexts.

steam_login_securestring

Your Steam login cookie for fetching your own inventory WITHOUT the 10-day trade block. When provided, steam_id is ignored. Find this cookie in your browser dev tools under "steamLoginSecure".

Short name of the game. Default is "cs2".

parse'0' | '1'

Enable steamwebapi parsing for enriched item data with prices and metadata. Set to 0 to get raw Steam response. Default: 1

language'arabic' | 'bulgarian' | 'schinese' | 'tchinese' | 'czech' | 'danish' | 'dutch' | 'english' | 'finnish' | 'french' | 'german' | 'greek' | 'hungarian' | 'indonesian' | 'italian' | 'japanese' | 'koreana' | 'norwegian' | 'polish' | 'portuguese' | 'brazilian' | 'romanian' | 'russian' | 'spanish' | 'latam' | 'swedish' | 'thai' | 'turkish' | 'ukrainian' | 'vietnamese'

Preferred language for item names and descriptions. Default: english

no_cache'0' | '1'

Bypass the default 3-day cache to get fresh data directly from Steam. Costs +1 additional credit. Default: 0

group'0' | '1'

Group identical items by market hash name and sum their count. Useful for inventories with many duplicate items (e.g., cases, keys). Default: 0

sort'price_max' | 'price_min' | 'price_real_max' | 'price_real_min' | 'price_mix_max' | 'price_mix_min' | 'count' | 'name'

Sort items by criterion:\n- Steam prices: price_max, price_min\n- Real/market prices: price_real_max, price_real_min\n- Mix prices: price_mix_max, price_mix_min\n- Other: count, name\n\nDefault: price_max

currency'USD' | 'EUR' | 'GBP' | 'CNY' | 'JPY' | 'RUB' | 'BRL' | 'TRY' | 'PLN' | 'UAH' | 'KRW'

Currency for item prices. Only works when parse=1. Default: USD

selectstring

Comma-separated list of fields to include in response. Reduces response size for faster transfers. Example: markethashname,pricelatest,assetid,float. Include tradeprotectedmaxdays to receive the remaining protection upper bound for CS2 items.

with_no_tradable'0' | '1'

Include non-tradeable items (trade-locked items, StatTrak swap tools, etc.). Default: 0

trade_urlstring

Steam Trade URL. Fetches the partner inventory via the authenticated trade path. For CS2, trade_locked selects context 2 only (0), context 16 only (1), both with an immediate return when context 2 is usable (3), or both required (4). Costs +1 credit (ignored when steam_login_secure is set). Format: https://steamcommunity.com/tradeoffer/new/?partner=123456&token=AbCdEf

offsetinteger

Skip the first N items. Use with limit for pagination. Default: 0

limitinteger

Maximum number of items returned by this API. Steam delivers at most 2,000 assets per page, so larger inventories require pagination with start_assetid. Default: 10000

try_first_seven_days_blocked_items'0' | '1' | '2'

CS2 trading-inventory routing: 0 = normal routing, 1 = try trading inventory first and fall back to the normal inventory when it yields nothing, 2 = trading inventory only without normal-inventory fallback. trade_locked separately selects contexts; explicitly setting it to 1 or 4 prevents normal-inventory fallback. For compatibility, omitting trade_locked with this option enabled uses mode 4 while preserving this routing choice. Explicit trade_locked=0 requests context 2 only. Costs +1 credit when used alone, including implicit mode 4. With an explicit trade_locked value, the shared protected-item surcharge is +1 for modes 1/3 or +2 for mode 4, without adding this legacy surcharge again; explicit 0 with this routing option still costs +1. Does not change the own-inventory path with steam_login_secure. Default: 0

markets'skinbaron' | 'skinport' | 'dmarket' | 'buff' | 'waxpeer' | 'csgotm' | 'haloskins' | 'tradeit' | 'skinbid'

Comma-separated list of markets for price calculation. pricereal = lowest price among selected markets. Example: skinbaron,skinport,dmarket

with_prices'0' | '1'

Include detailed market prices array for each item with price, market name, logo, quantity, and direct link. May increase response time. Default: 0

with_phase_price'0' | '1'

CS2 Doppler items only. Replaces pricereal with the lowest selected-market price for the detected phase (e.g. Phase 2 instead of the generic Doppler price) and pricerealmedian with the selected-market median for that phase. Without markets, all available third-party markets are used. pricereal24h, pricereal7d, pricereal30d, and pricereal90d are set to null because these inventory horizon fields are not phase-scoped. Rollout-forward exact phase history is available through POST /steam/api/items/history; it does not populate the legacy inventory horizon fields. winloss and winlossprice are set to null because Steam has no phase-specific listing price to compare against. Only applies when a phase is detected AND the phase has a known price. If no phase price exists, all fields stay unchanged. Default: 0

searchstring

Filter items by name (case-insensitive). Matches partial names. Example: ak-47

production'0' | '1'

Set to 1 in production to remove info fields and get faster responses. Will be required in future API versions. Default: 0

trade_locked0 | 1 | 3 | 4

CS2 inventory contexts: 0 = context 2 only (default); 1 = context 16 only; 3 = start both contexts and return as soon as context 2 is usable, including context 16 only if already available and cancelling it otherwise; 4 = require both within the request budget, retaining successful results and retrying only missing contexts. Partner modes 1, 3, and 4 start with trading inventory. Modes 1 and 3 cost +1 credit; explicit mode 4 costs +2. These replace, rather than add to, the protected-item surcharge from try_first_seven_days_blocked_items. Context 16 can expose recently received skins that are not yet visible in normal public inventory; reconstruction requires parse=1 on the first page (without start_assetid). This detection does not include newly received cases; normal context-2 cases remain included. Explicit modes 1 and 4 never fall back to context-2-only public inventory. Mode 4 may use the last successful protected-item snapshot after live attempts fail, including with no_cache=1; cached assets expire seven days after first observation. With steam_login_secure, only the existing own-inventory modes 0 (context 2) and 1 (context 16) are supported, without this partner surcharge; modes 3 and 4 require omitting that cookie. For legacy partner requests, an enabled try_first_seven_days_blocked_items implies mode 4 only when trade_locked is absent. Explicit nonzero partner modes require CS2 and state=active; historical database fallback modes are not supported because they cannot guarantee the requested contexts.

start_assetidstring

Pagination for inventories larger than one Steam page of at most 2,000 assets. Check the last_assetid response header and use it here for the next page. Repeat while the header is present. A page can hold fewer items, for example because non-tradable assets are filtered by default, so rely on the header rather than on the item count.

format'json' | 'csv' | 'xml' | 'html' | 'gzip' | 'zip' | 'ndjson' | 'mysql' | 'mysql_with_table' | 'pgsql' | 'pgsql_with_table' | 'mongo'

Response format. Use gzip or zip for compressed downloads. Default: json

pretty'0' | '1'

Pretty-print JSON output. Only for json/gzip/zip formats. Default: 0

Response

Inventory fetched successfully. Returns array of items with prices and metadata. For CS2, tradeprotectedmaxdays is an integer from 0 to 7: the remaining upper bound in days, rounded up from our first observation in context 16. It is not the actual Steam unlock time. Unprotected items return 0; missing observation metadata conservatively returns 7 for protected items.

unknown required

Changes

No recorded changes to this operation across all 1 revision of this API.