Skip to content
API

SteamWebAPI to WOK API

Migrate from SteamWebAPI to WOK

Start with compatible endpoint paths. Validate prices, grouping, errors and quotas before switching your customers.

Configuration changeBASE_URL + API_KEY
- BASE_URL = "https://www.steamwebapi.com"
+ BASE_URL = "https://woksteamapi.com"

- API_KEY  = "your-steamwebapi-key"
+ API_KEY  = "your-wok-key"

The legacy ?key= parameter works. Prefer a server-side Bearer header so the key stays out of URL logs.

WOK API data shrine
2compatible endpoint paths
USDdocumented price units
Explicitsource and cache metadata
Validateyour parser before cutover

Map the endpoints you use

WOK supports the inventory and profile paths below, not every SteamWebAPI feature or parameter. Native endpoints have different contracts.

SteamWebAPI to WOK API endpoint mapping
Current callWOK APINotes
/steam/api/inventoryGET /steam/api/inventorySuccess is an item array. Grouped by default; validate missing prices, item fields and HTTP errors.
/steam/api/profileGET /steam/api/profileOne profile object. Check the documented fields rather than assuming full field parity.
Inventory totals and metadataGET /v1/inventoryNative object with status, total, items and meta. Not an array replacement.
Multiple inventoriesPOST /v1/inventoriesNative results[] envelope with per-pair success and errors. Adapt the payload and parser.
Price lookupsPOST /v1/pricesLook up market hash names without scanning Steam; use the price API guide.

Reference: WOK OpenAPI. FACEIT has its own documented WOK endpoints; it is not a claim of SteamWebAPI endpoint compatibility.

Run a compatibility request

Set WOK_API_KEY in your server environment. Use a public SteamID64; the Python example requires the requests package.

curlinventory
curl --fail-with-body --max-time 35 -G "https://woksteamapi.com/steam/api/inventory" \
  -H "Authorization: Bearer $WOK_API_KEY" \
  --data-urlencode "steam_id=76561198090744629" \
  --data-urlencode "game=cs2" \
  --data-urlencode "currency=USD" \
  --data-urlencode "price_source=auto" \
  --data-urlencode "group=1"
Pythonrequests
import os
import requests

response = requests.get(
    "https://woksteamapi.com/steam/api/inventory",
    headers={"Authorization": f"Bearer {os.environ['WOK_API_KEY']}"},
    params={
        "steam_id": "76561198090744629",
        "game": "cs2",
        "currency": "USD",
        "price_source": "auto",
        "group": 1,
    },
    timeout=35,
)
response.raise_for_status()  # Handle 403/410/429/5xx in your application.
items = response.json()
if not isinstance(items, list):
    raise ValueError("Expected the WOK compatibility inventory array")

print("Sellable value (USD):", response.headers.get("X-Wok-Total"))
for item in items:
    # Missing prices are unknown values, not proof that an item is worthless.
    print(item["markethashname"], item["count"],
          item["pricemedian"], item["pricesource"])

Choose a price source when needed

Pass price_source explicitly when comparing valuations. An omitted value uses the key or server default; auto explicitly chooses automatic selection.

autosteamsteam_buyskinportmarketbackpacktfbuffmix
?price_source=steam_buy&strict=1

auto uses an ordered preference, not the highest available price, and excludes BUFF163. mix selects the lowest eligible market price and can include a BUFF163 observation no older than 72 hours after an outlier check. Steam buy orders are excluded from both. Choose buff&strict=1 for BUFF-only values or steam_buy explicitly for a buy-order value.

strict=1 prevents fallback outside the selected mode; steam remains a family of Steam observations, not one feed. With a missing strict-source price, pricemedian can be null. Inspect pricesource, priceupdatedat and prices rather than assuming every item has that source.

Values are USD, not cents. The legacy currency parameter does not convert WOK responses. BUFF163 pricing covers supported CS2 catalog items; it does not provide BUFF account trading or order execution.

Check the contract before cutover

Replay a small set of saved responses in staging, then compare bounded live requests for the same SteamID, game and source.

What to validate when migrating from SteamWebAPI
CheckWOK behavior and acceptance check
Items and unitsgroup=1 groups equivalent rows with count; group=0 exposes individual assetid strings. Check quantities, tradability and null prices. Use X-Wok-Total for the compatibility sellable total in USD, not a sum of every row.
HTTP errorsCompatibility inventory: 403 private, 404 not found, 410 empty, 429 rate or capacity limit, 502 upstream failure. Handle authentication, quota and validation errors separately. Do not turn a failed scan into a zero-value inventory.
Native responsesA native inventory can return HTTP 200 with status=private, notfound, limited or error. For batches, inspect every results[].ok and results[].error; HTTP 200 does not mean all pairs succeeded.
FreshnessX-Wok-Cache-Age and X-Wok-Cache-TTL describe the inventory snapshot. Each item's priceupdatedat describes its selected catalog source. A cache hit can contain repriced items without a new Steam scan.
Repricing and retriesrefresh_prices=1 reprices an active snapshot locally; a missing snapshot returns 404 INVENTORY_CACHE_MISS. Do not combine it with no_cache=1. Use bounded retries with backoff, and Retry-After when supplied.

For native inventory batches, reserve one quota unit per player-game pair, with at most 80 pairs per call. A 20-player workload across eight games needs 160 units and at least two batches. GET /v1/key reports your effective remaining quotas without consuming a unit.

Route a small share of traffic only after these checks pass. Keep your previous configuration for rollback, and compare error rate, missing prices, inventory age and latency under the same workload. WOK is independent of SteamWebAPI; this guide does not promise complete feature parity.

Inventory response referenceCS2 inventory examplesInventory valuation rulesRate-limit handling

Plans

Prepaid access starts at 30 days and does not renew automatically. Pay by card, SBP, SberPay or USDT.

FREE DEVELOPER

Free

1,000 requests per 30 days. No payment card.
inventory calls / 30 days
1 000
per day
100
RPM
30

START

$12

per 30 days
inventory calls / 30 days
300 000
per day
10,000
RPM
120

PRO

$29

per 30 days
inventory calls / 30 days
700 000
per day
24,000
RPM
300

MAX

$59

per 30 days
inventory calls / 30 days
2 000 000
per day
80,000
RPM
600

ULTRA

$119

per 30 days
inventory calls / 30 days
7 000 000
per day
240,000
RPM
1200

TITAN

$199

per 30 days
inventory calls / 30 days
9 000 000
per day
350,000
RPM
1500

Docs, OpenAPI and SDKsFull pricing detailsSteamWebAPI alternative