Steam Community inventory
Steam Community inventory API for cards and more
Use AppID 753 for a public Steam Community inventory. Its context 6 includes cards, backgrounds and emoticons, not just cards. WOK returns grouped names and trade state but does not provide catalog prices or a card-only filter for this app.
GET /v1/inventory?game=753Bearer authenticationUpdated
WOK APIcurl --fail-with-body \
-H "Authorization: Bearer $WOK_API_KEY" \
"https://woksteamapi.com/v1/inventory?steam_id=76561198090744629&game=753&top=0"Read cards from the full Steam Community inventory
game=753 selects Steam AppID 753 and context 6. That context contains trading cards alongside profile backgrounds, emoticons and other Community items. The quickstart uses top=0 so a client-side card filter sees every grouped row instead of only the first ten.
Check status before reading items: private means unavailable ownership, while empty means the public Community inventory returned no items.
For a card-only view, inspect each Steam-supplied items[].type and markethashname in your client. Type text can vary or be empty; confirm your filter against actual returned items. WOK does not expose a server-side card-only filter or determine completed sets.
This numeric AppID has no WOK price catalog. pricemedian=null, unpriced and total=0 describe missing valuation, not worthless cards. refresh_prices=1 is unavailable for game=753.
AppID and context explainedInventory status and cache rulesCommunity inventory response
Quickstart
Use WOK from a trusted server. Keep the API key outside browser bundles and public repositories.
WOK APIcurl --fail-with-body \
-H "Authorization: Bearer $WOK_API_KEY" \
"https://woksteamapi.com/v1/inventory?steam_id=76561198090744629&game=753&top=0"WOK API// Node.js: keep the API key on your server.
const url = new URL("https://woksteamapi.com/v1/inventory");
url.search = new URLSearchParams({
steam_id: "76561198090744629",
game: "753",
top: "0"
});
const response = await fetch(url, {
headers: { Authorization: `Bearer ${process.env.WOK_API_KEY}` }
});
if (!response.ok) throw new Error(`${response.status}: ${await response.text()}`);
const inventory = await response.json();WOK APIimport os
import requests
response = requests.get(
"https://woksteamapi.com/v1/inventory",
headers={"Authorization": f"Bearer {os.environ['WOK_API_KEY']}"},
params={
"steam_id": "76561198090744629",
"game": "753",
"top": 0,
},
timeout=30,
)
response.raise_for_status()
inventory = response.json()Response example
The values below illustrate the response shape. Field names and types match the public contract. The example card name and type are illustrative; filter actual returned items using their Steam-supplied type.
JSON
application/json{
"steamid": "76561198090744629",
"game": "app753",
"status": "ok",
"total": 0.0,
"items_total": 2,
"sellable": 2,
"untradable": 0,
"untradable_value": 0.0,
"tradelocked": 0,
"tradelocked_value": 0.0,
"unpriced": 2,
"items": [
{
"markethashname": "Example Community trading card",
"count": 2,
"game": "app753",
"type": "Trading Card",
"tradable": 1,
"marketable": 1,
"pricemedian": null,
"pricesource": "",
"priceupdatedat": null,
"prices": {}
}
],
"meta": {
"cached": true,
"shared": false,
"lane": "cache",
"saved": false,
"ms": 0,
"bytes": 0,
"paid_bytes": 0,
"upstream_attempts": 0,
"detail": "",
"cache_age": 42,
"cache_ttl": 1800,
"price_source": "steam"
}
}
Response schema
Stable fields for typed clients, storage and error handling.
| Field | Type | Meaning |
|---|---|---|
steamid | string | Canonical 17-digit SteamID64. |
game | string | Documented key: cs2, rust, tf2, dota2, pubg, sandbox, unturned or payday2. Numeric Steam appids are also accepted and returned as app<appid> without catalog pricing. |
status | string | ok, empty, private, notfound, limited or error. |
total | number | Priced sellable inventory total in USD. |
items_total | integer | Number of item instances before top truncation. |
sellable | integer | Tradable and marketable item instances, including unpriced ones; total sums matched values. |
untradable | integer | Item instances excluded from sellable value. |
untradable_value | number | Value of excluded untradable items in USD. |
tradelocked | integer | Item instances currently trade locked. |
tradelocked_value | number | Value of trade-locked items in USD. |
unpriced | integer | Instances without a usable price. |
items[] | array | Items with market names, count, trade state, prices and optional inspect links. |
items[].markethashname | string | Canonical price-catalog market hash name. |
items[].marketname | string | Steam market display name when supplied. |
items[].type | string | Steam-supplied item type text; not a WOK-normalized category. |
items[].count | integer | Grouped item instance count. |
items[].tradable | integer | Steam tradability flag, 0 or 1. |
items[].marketable | integer | Steam marketability flag, 0 or 1. |
items[].tradelocked | boolean | Whether the grouped item is trade locked. |
items[].tradelockuntil | number|null | Unix expiry when a trade lock is known. |
items[].pricemedian | number|null | Selected source median price in USD. |
items[].pricesource | string | Selected catalog source; empty when the item is unpriced. |
items[].priceupdatedat | number|null | Selected source observation time, separate from inventory cache age. |
items[].prices | object | Per-source USD prices. |
items[].inspect_links | array | Optional CS2 inspect actions. |
meta | object | Cache age/TTL, cached/shared flags, timing, bytes, lane and upstream-attempt metadata. |
meta.cached | boolean | Whether the inventory snapshot was reused. |
meta.shared | boolean | Whether this request joined an in-flight singleflight fetch. |
meta.cache_age | integer | Snapshot age in seconds. |
meta.cache_ttl | integer | Applied freshness window in seconds. |
Limits and error behavior
Rules clients should handle explicitly in production.
AppID 753 is accepted as a numeric inventory-only target. WOK does not maintain card catalog prices or support refresh_prices=1 for this target; total is the sum of matched prices and remains 0 when all items are unpriced. Check unpriced and items[].pricemedian before interpreting that total as an inventory value.
The Steam inventory must be public and the profile must expose the Community inventory to the upstream endpoint.
Card sets, foil variants and marketability are represented by Steam's market names and flags; WOK does not infer collection completion or card-set value.
Cache and freshness semantics
How to tell whether data was reused, shared or refreshed.
Successful inventory snapshots use a 1,800-second default TTL. Negative defaults are 21,600 seconds for empty, 3,600 seconds for private and 600 seconds for not found.
For authenticated inventory responses that reach validation/result handling, read X-Wok-Cache-Age and X-Wok-Cache-TTL when present; authentication and quota errors may omit them.
Identical concurrent misses are coalesced. A waiter receives X-Wok-Singleflight: 1 and does not start another Steam inventory fetch.
This numeric AppID supports inventory reads, not WOK catalog repricing. A normal request may reuse a fresh cached inventory; no_cache=1 requests a new Steam scan subject to upstream limits.
Frequently asked questions
Direct answers about access, freshness and result semantics.
Which AppID is used for Steam trading cards?
Use game=753. WOK reads the entire Steam Community context 6 and returns game=app753; the result can also include backgrounds and emoticons.
Does a card inventory response always include a price?
No. AppID 753 is inventory-only coverage. Each unmatched item has pricemedian=null and contributes to unpriced. A total of 0 when all items are unpriced does not mean those cards have no market value.
Do I need a Steam login?
No. The profile and Community inventory must simply be public. WOK never asks for a Steam password or Guard code.