{"openapi":"3.1.0","info":{"title":"WOK Steam API","version":"1.1.0","description":"Public inventory, profile, FACEIT, price and CS2 inspect API. Account, payment and admin routes are intentionally excluded."},"servers":[{"url":"https://woksteamapi.com"}],"tags":[{"name":"Compatibility"},{"name":"Inventory"},{"name":"Profiles"},{"name":"Prices"},{"name":"CS2"},{"name":"Crawl"},{"name":"FACEIT"},{"name":"Service"}],"paths":{"/steam/api/inventory":{"get":{"tags":["Compatibility"],"operationId":"compatInventory","summary":"Compatible inventory array","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/InventoryItem"}}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"402":{"description":"Quota exhausted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Resource is private or restricted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"410":{"description":"Inventory is empty","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"Query or JSON body validation failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"502":{"description":"Upstream service failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"steam_id","in":"query","required":true,"schema":{"type":"string","maxLength":128}},{"name":"game","in":"query","required":false,"schema":{"type":"string","enum":["cs2","rust","tf2","dota2"]},"description":"Game key or supported alias"},{"name":"currency","in":"query","required":false,"schema":{"type":"string","default":"USD"}},{"name":"no_cache","in":"query","required":false,"schema":{"type":"integer","enum":[0,1]}},{"name":"group","in":"query","required":false,"schema":{"type":"integer","enum":[0,1]}},{"name":"key","in":"query","required":false,"schema":{"type":"string"},"description":"Deprecated alternative to Bearer authentication. Do not send both.","deprecated":true}],"security":[{"BearerAuth":[]},{"LegacyQueryKey":[]}],"description":"Bearer is recommended. The legacy key query is deprecated."}},"/steam/api/profile":{"get":{"tags":["Compatibility"],"operationId":"compatProfile","summary":"Compatible Steam profile","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SteamProfile"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"402":{"description":"Quota exhausted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"Query or JSON body validation failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"steam_id","in":"query","required":true,"schema":{"type":"string","maxLength":128}}],"security":[{"BearerAuth":[]}]}},"/v1/inventory":{"get":{"tags":["Inventory"],"operationId":"getInventory","summary":"Inventory totals and priced items","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NativeInventory"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"402":{"description":"Quota exhausted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"Query or JSON body validation failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"steam_id","in":"query","required":true,"schema":{"type":"string","maxLength":128}},{"name":"game","in":"query","required":false,"schema":{"type":"string","enum":["cs2","rust","tf2","dota2"]},"description":"Game key or supported alias"},{"name":"no_cache","in":"query","required":false,"schema":{"type":"integer","enum":[0,1]}},{"name":"top","in":"query","required":false,"schema":{"type":"integer","minimum":0,"maximum":100}},{"name":"include_inspect","in":"query","required":false,"schema":{"type":"integer","enum":[0,1],"default":0},"description":"Include Steam inspect links when available."}],"security":[{"BearerAuth":[]}]}},"/v1/inventories":{"post":{"tags":["Inventory"],"operationId":"getInventories","summary":"Synchronous inventory batch","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BatchResponse"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"402":{"description":"Quota exhausted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"Query or JSON body validation failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BatchRequest"}}}},"security":[{"BearerAuth":[]}],"description":"Up to 20 players, 4 games and 80 player-game pairs. Pair failures remain inside results."}},"/v1/profile":{"get":{"tags":["Profiles"],"operationId":"getProfile","summary":"One Steam profile","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SteamProfile"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"402":{"description":"Quota exhausted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"Query or JSON body validation failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"steam_id","in":"query","required":true,"schema":{"type":"string","maxLength":128}}],"security":[{"BearerAuth":[]}]}},"/v1/profiles":{"post":{"tags":["Profiles"],"operationId":"getProfiles","summary":"Up to 64 Steam profiles","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProfilesResponse"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"402":{"description":"Quota exhausted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"Query or JSON body validation failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProfilesRequest"}}}},"security":[{"BearerAuth":[]}]}},"/v1/player-security":{"get":{"tags":["Profiles"],"operationId":"getPlayerSecurity","summary":"VAC, game and economy bans","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlayerSecurity"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"402":{"description":"Quota exhausted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"Query or JSON body validation failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"502":{"description":"Upstream service failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"503":{"description":"Required upstream capability is not configured","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"steam_id","in":"query","required":true,"schema":{"type":"string","maxLength":128}}],"security":[{"BearerAuth":[]}]}},"/v1/friends":{"get":{"tags":["Profiles"],"operationId":"getFriends","summary":"Public Steam friend list","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FriendsPage"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"402":{"description":"Quota exhausted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Resource is private or restricted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"Query or JSON body validation failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"502":{"description":"Upstream service failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"503":{"description":"Required upstream capability is not configured","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"steam_id","in":"query","required":true,"schema":{"type":"string","maxLength":128}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":100,"default":50}},{"name":"cursor","in":"query","required":false,"schema":{"type":"string","maxLength":256}}],"security":[{"BearerAuth":[]}]}},"/v1/price":{"get":{"tags":["Prices"],"operationId":"getPrice","summary":"One cross-checked price","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PriceResponse"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"402":{"description":"Quota exhausted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"Query or JSON body validation failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"game","in":"query","required":false,"schema":{"type":"string","enum":["cs2","rust","tf2","dota2"]},"description":"Game key or supported alias"},{"name":"name","in":"query","required":true,"schema":{"type":"string","maxLength":512}}],"security":[{"BearerAuth":[]}]}},"/v1/prices":{"post":{"tags":["Prices"],"operationId":"getPrices","summary":"Up to 200 cross-checked prices","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PricesResponse"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"402":{"description":"Quota exhausted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"Query or JSON body validation failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PricesRequest"}}}},"security":[{"BearerAuth":[]}]}},"/v1/items":{"get":{"tags":["Prices"],"operationId":"listItems","summary":"Cursor-paginated item catalog","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CatalogPage"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"402":{"description":"Quota exhausted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"Query or JSON body validation failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"game","in":"query","required":false,"schema":{"type":"string","enum":["cs2","rust","tf2","dota2"]},"description":"Game key or supported alias"},{"name":"q","in":"query","required":false,"schema":{"type":"string","maxLength":120}},{"name":"source","in":"query","required":false,"schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":200,"default":50}},{"name":"cursor","in":"query","required":false,"schema":{"type":"string","maxLength":2048}}],"security":[{"BearerAuth":[]}]}},"/v1/price-history":{"get":{"tags":["Prices"],"operationId":"getPriceHistory","summary":"Real daily OHLC price history","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PriceHistory"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"402":{"description":"Quota exhausted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"Query or JSON body validation failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"game","in":"query","required":false,"schema":{"type":"string","enum":["cs2","rust","tf2","dota2"]},"description":"Game key or supported alias"},{"name":"name","in":"query","required":true,"schema":{"type":"string","maxLength":512}},{"name":"days","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":365,"default":30}},{"name":"source","in":"query","required":false,"schema":{"type":"string"}}],"security":[{"BearerAuth":[]}],"description":"Only observed points are returned. Missing days are not invented."}},"/v1/cs2/inspect":{"post":{"tags":["CS2"],"operationId":"inspectCs2","summary":"Decode CS2 float and paint metadata","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InspectResponse"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"402":{"description":"Quota exhausted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"Query or JSON body validation failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InspectRequest"}}}},"security":[{"BearerAuth":[]}],"description":"Self-encoded links are resolved locally. Legacy links return status unavailable instead of fabricated paint data."}},"/v1/crawl":{"post":{"tags":["Crawl"],"operationId":"createCrawl","summary":"Queue low-priority inventory crawl","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CrawlQueued"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"402":{"description":"Quota exhausted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"Query or JSON body validation failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"503":{"description":"Crawl queue capacity reached","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CrawlRequest"}}}},"security":[{"BearerAuth":[]}]}},"/v1/crawl/{batch}":{"get":{"tags":["Crawl"],"operationId":"getCrawl","summary":"Read crawl state","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CrawlStatus"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"402":{"description":"Quota exhausted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"batch","in":"path","required":true,"schema":{"type":"string","pattern":"^[0-9a-f]{12}$"}}],"security":[{"BearerAuth":[]}]}},"/faceit/data/v4/players":{"get":{"tags":["FACEIT"],"operationId":"getFaceitPlayer","summary":"FACEIT player by SteamID","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FaceitPlayer"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"402":{"description":"Quota exhausted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"Query or JSON body validation failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"502":{"description":"Upstream service failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"game","in":"query","required":false,"schema":{"type":"string","default":"cs2"}},{"name":"game_player_id","in":"query","required":true,"schema":{"type":"string","pattern":"^[0-9]{17}$","example":"76561198000000001"}}],"security":[{"BearerAuth":[]}]}},"/faceit/data/v4/players/{player_id}/stats/{game}":{"get":{"tags":["FACEIT"],"operationId":"getFaceitStats","summary":"FACEIT lifetime stats","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FaceitStats"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"402":{"description":"Quota exhausted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"502":{"description":"Upstream service failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"player_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"game","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"BearerAuth":[]}]}},"/faceit/data/v4/players/{player_id}/history":{"get":{"tags":["FACEIT"],"operationId":"getFaceitHistory","summary":"Recent FACEIT matches","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FaceitHistory"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"402":{"description":"Quota exhausted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"Query or JSON body validation failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"502":{"description":"Upstream service failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"player_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"game","in":"query","required":false,"schema":{"type":"string","default":"cs2"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":20,"default":5}}],"security":[{"BearerAuth":[]}]}},"/healthz":{"get":{"tags":["Service"],"operationId":"health","summary":"Service health","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Health"}}}},"503":{"description":"Database health check failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Health"}}}}}}}},"components":{"securitySchemes":{"BearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"WOK API key"},"LegacyQueryKey":{"type":"apiKey","in":"query","name":"key","description":"Deprecated compatibility option. Bearer is recommended."}},"schemas":{"ApiError":{"type":"object","required":["error"],"properties":{"error":{"oneOf":[{"type":"string"},{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}}}]},"status":{"type":"integer"},"message":{"type":"string"}}},"ErrorDetail":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}},"ValidationError":{"type":"object","required":["detail"],"properties":{"detail":{"type":"array","items":{"type":"object","required":["loc","msg","type"],"properties":{"loc":{"type":"array","items":{"type":["string","integer"]}},"msg":{"type":"string"},"type":{"type":"string"}},"additionalProperties":true}}}},"InventoryItem":{"type":"object","required":["markethashname","count","game"],"properties":{"markethashname":{"type":"string"},"marketname":{"type":"string"},"count":{"type":"integer","minimum":1},"game":{"type":"string","enum":["cs2","rust","tf2","dota2"]},"tradable":{"type":"integer","enum":[0,1]},"marketable":{"type":"integer","enum":[0,1]},"tradelocked":{"type":"boolean"},"tradelockuntil":{"type":["number","null"]},"pricemedian":{"type":["number","null"]},"prices":{"type":"object","additionalProperties":{"type":"number"}},"volume":{"type":"integer"},"image":{"type":"string"},"type":{"type":"string"},"inspect_link":{"type":"string"},"inspect_links":{"type":"array","items":{"type":"string"}}},"additionalProperties":true},"InventoryMeta":{"type":"object","required":["cached","lane","saved","ms","bytes","paid_bytes","upstream_attempts","detail"],"properties":{"cached":{"type":"boolean"},"lane":{"type":"string"},"saved":{"type":"boolean"},"ms":{"type":"integer","minimum":0},"elapsed_ms":{"type":"integer","minimum":0},"bytes":{"type":"integer","minimum":0},"paid_bytes":{"type":"integer","minimum":0},"upstream_attempts":{"type":"integer","minimum":0},"detail":{"type":"string"},"price_source":{"type":["string","null"]}},"additionalProperties":true},"NativeInventory":{"type":"object","required":["steamid","game","status","total","items_total","sellable","untradable","untradable_value","tradelocked","tradelocked_value","unpriced","items","meta"],"properties":{"steamid":{"type":"string","pattern":"^[0-9]{17}$","example":"76561198000000001"},"game":{"type":"string","enum":["cs2","rust","tf2","dota2"]},"status":{"type":"string","enum":["ok","empty","private","notfound","limited","error"]},"total":{"type":"number"},"items_total":{"type":"integer"},"sellable":{"type":"integer"},"untradable":{"type":"integer"},"untradable_value":{"type":"number"},"tradelocked":{"type":"integer"},"tradelocked_value":{"type":"number"},"unpriced":{"type":"integer"},"items":{"type":"array","items":{"$ref":"#/components/schemas/InventoryItem"}},"meta":{"$ref":"#/components/schemas/InventoryMeta"}}},"BatchRequest":{"type":"object","required":["steamids"],"properties":{"steamids":{"type":"array","minItems":1,"maxItems":20,"items":{"type":"string","pattern":"^[0-9]{17}$","example":"76561198000000001"}},"games":{"type":"array","minItems":1,"maxItems":4,"items":{"type":"string","enum":["cs2","rust","tf2","dota2"]},"default":["cs2"]},"no_cache":{"type":"boolean","default":false},"include_inspect":{"type":"boolean","default":false},"top":{"type":"integer","minimum":0,"maximum":100,"default":10}}},"BatchResponse":{"type":"object","required":["results","meta"],"properties":{"results":{"type":"array","items":{"allOf":[{"$ref":"#/components/schemas/NativeInventory"},{"type":"object","required":["ok","http_status"],"properties":{"ok":{"type":"boolean"},"http_status":{"type":"integer"},"error":{"$ref":"#/components/schemas/ErrorDetail"}}}]}},"meta":{"type":"object","required":["requested","succeeded","failed","cached","elapsed_ms","limits"],"properties":{"requested":{"type":"integer","maximum":80},"succeeded":{"type":"integer"},"failed":{"type":"integer"},"cached":{"type":"integer"},"elapsed_ms":{"type":"integer"},"limits":{"type":"object","required":["steamids","games","pairs"],"properties":{"steamids":{"type":"integer","const":20},"games":{"type":"integer","const":4},"pairs":{"type":"integer","const":80}}}}}}},"SteamProfile":{"type":"object","required":["steamid","personaname","loccountrycode","avatarfull","profileurl"],"properties":{"steamid":{"type":"string","pattern":"^[0-9]{17}$","example":"76561198000000001"},"personaname":{"type":"string"},"loccountrycode":{"type":"string"},"avatarfull":{"type":"string"},"profileurl":{"type":"string"},"visibility":{"type":"integer"},"cached":{"type":"boolean"}},"additionalProperties":true},"ProfilesRequest":{"type":"object","required":["steamids"],"properties":{"steamids":{"type":"array","minItems":1,"maxItems":64,"items":{"type":"string","pattern":"^[0-9]{17}$","example":"76561198000000001"}}}},"ProfilesResponse":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/SteamProfile"}},"PriceQuote":{"type":"object","required":["price","source","sources"],"properties":{"price":{"type":"number"},"source":{"type":"string"},"sources":{"type":"object","additionalProperties":{"type":"number"}}}},"PriceResponse":{"allOf":[{"$ref":"#/components/schemas/PriceQuote"},{"type":"object","required":["game","name","updated_at"],"properties":{"game":{"type":"string","enum":["cs2","rust","tf2","dota2"]},"name":{"type":"string"},"updated_at":{"type":"number"}}}]},"PricesRequest":{"type":"object","required":["names"],"properties":{"game":{"type":"string","enum":["cs2","rust","tf2","dota2"],"default":"cs2"},"names":{"type":"array","minItems":1,"maxItems":200,"items":{"type":"string","minLength":1,"maxLength":512}}}},"PricesResponse":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/PriceQuote"}},"CrawlRequest":{"type":"object","required":["steamids"],"description":"At most 64 unique player-game pairs may be queued in one call.","properties":{"steamids":{"type":"array","minItems":1,"maxItems":32,"items":{"type":"string","pattern":"^[0-9]{17}$","example":"76561198000000001"}},"games":{"type":"array","minItems":1,"maxItems":4,"items":{"type":"string","enum":["cs2","rust","tf2","dota2"]},"default":["cs2"]}}},"CrawlLimits":{"type":"object","required":["batch_jobs","key_active"],"properties":{"batch_jobs":{"type":"integer","const":64},"key_active":{"type":"integer","const":256}}},"CrawlQueued":{"type":"object","required":["batch","queued","limits"],"properties":{"batch":{"type":"string","pattern":"^[0-9a-f]{12}$"},"queued":{"type":"integer","minimum":1,"maximum":64},"limits":{"$ref":"#/components/schemas/CrawlLimits"}}},"CrawlStatus":{"type":"object","required":["batch","pending","running","done","failed","cancelled","outcomes"],"properties":{"batch":{"type":"string","pattern":"^[0-9a-f]{12}$"},"pending":{"type":"integer","minimum":0},"running":{"type":"integer","minimum":0},"done":{"type":"integer","minimum":0},"failed":{"type":"integer","minimum":0},"cancelled":{"type":"integer","minimum":0},"outcomes":{"type":"object","additionalProperties":{"type":"integer","minimum":0}}}},"Health":{"type":"object","required":["ok","db"],"properties":{"ok":{"type":"boolean"},"db":{"type":"string","enum":["ok","error"]}},"additionalProperties":false},"FaceitGame":{"type":"object","required":["faceit_elo","skill_level","game_player_id","game_player_name","region"],"properties":{"faceit_elo":{"type":"integer"},"skill_level":{"type":"integer"},"game_player_id":{"type":"string"},"game_player_name":{"type":"string"},"region":{"type":"string"}}},"FaceitPlayer":{"type":"object","required":["player_id","nickname","country","avatar","faceit_url","games"],"properties":{"player_id":{"type":"string"},"nickname":{"type":"string"},"country":{"type":"string"},"avatar":{"type":"string"},"faceit_url":{"type":"string"},"games":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/FaceitGame"}}}},"FaceitStats":{"type":"object","required":["lifetime"],"properties":{"lifetime":{"type":"object","additionalProperties":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]}}}},"FaceitMatch":{"type":"object","required":["match_id","game_id","region","competition_name","finished_at","faceit_url","elo","elo_delta","match_stats"],"properties":{"match_id":{"type":"string"},"game_id":{"type":"string"},"region":{"type":"string"},"competition_name":{"type":"string"},"finished_at":{"type":"integer"},"faceit_url":{"type":"string"},"elo":{"type":"integer"},"elo_delta":{"type":"integer"},"match_stats":{"type":"object","properties":{"Map":{"type":"string"},"Score":{"type":"string"},"Result":{"type":"string"},"Kills":{"type":"string"},"Deaths":{"type":"string"},"Assists":{"type":"string"},"K/D Ratio":{"type":"string"},"Headshots %":{"type":"string"}},"additionalProperties":false}}},"FaceitHistory":{"type":"object","required":["items","start","end"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/FaceitMatch"}},"start":{"type":"integer","minimum":0},"end":{"type":"integer","minimum":0}}},"CatalogPage":{"type":"object","required":["game","query","source","items","next_cursor","has_more"],"properties":{"game":{"type":"string","enum":["cs2","rust","tf2","dota2"]},"query":{"type":"string"},"source":{"type":["string","null"]},"items":{"type":"array","items":{"type":"object","required":["game","market_hash_name","source_count","prices"],"properties":{"game":{"type":"string","enum":["cs2","rust","tf2","dota2"]},"market_hash_name":{"type":"string"},"source_count":{"type":"integer"},"prices":{"type":"array","items":{"type":"object","required":["source","price_usd","volume","updated_at"],"properties":{"source":{"type":"string"},"price_usd":{"type":"number"},"volume":{"type":"integer"},"updated_at":{"type":"number"}}}}}}},"next_cursor":{"type":["string","null"]},"has_more":{"type":"boolean"}}},"PriceHistory":{"type":"object","required":["game","market_hash_name","source","days","points"],"properties":{"game":{"type":"string","enum":["cs2","rust","tf2","dota2"]},"market_hash_name":{"type":"string"},"source":{"type":["string","null"]},"days":{"type":"integer","minimum":1,"maximum":365},"points":{"type":"array","items":{"type":"object","required":["date","source","open_usd","high_usd","low_usd","close_usd","volume","samples","first_observed_at","last_observed_at"],"properties":{"date":{"type":"string","format":"date"},"source":{"type":"string"},"open_usd":{"type":"number"},"high_usd":{"type":"number"},"low_usd":{"type":"number"},"close_usd":{"type":"number"},"volume":{"type":"integer"},"samples":{"type":"integer"},"first_observed_at":{"type":"number"},"last_observed_at":{"type":"number"}}}}}},"PlayerSecurity":{"type":"object","required":["steam_id","bans","trade_eligibility"],"properties":{"steam_id":{"type":"string","pattern":"^[0-9]{17}$","example":"76561198000000001"},"bans":{"type":"object","required":["community_banned","vac_banned","vac_bans","game_bans","economy_ban","days_since_last_ban","last_ban_at","last_ban_date_approx"],"properties":{"community_banned":{"type":["boolean","null"]},"vac_banned":{"type":["boolean","null"]},"vac_bans":{"type":["integer","null"]},"game_bans":{"type":["integer","null"]},"economy_ban":{"type":["string","null"]},"days_since_last_ban":{"type":["integer","null"]},"last_ban_at":{"type":["string","null"]},"last_ban_date_approx":{"type":["string","null"]}}},"trade_eligibility":{"type":"object","description":"Public ban signals only. complete is always false because Steam does not expose every temporary trade hold here.","required":["status","reasons","basis","complete"],"properties":{"status":{"type":"string","enum":["no_public_restrictions","restricted","unknown"]},"reasons":{"type":"array","items":{"type":"string"}},"basis":{"type":"string","enum":["public_ban_signals"]},"complete":{"type":"boolean","const":false}}}}},"FriendsPage":{"type":"object","required":["steam_id","friends","total","has_more","next_cursor"],"properties":{"steam_id":{"type":"string","pattern":"^[0-9]{17}$","example":"76561198000000001"},"friends":{"type":"array","items":{"type":"object","required":["steam_id","relationship","friend_since"],"properties":{"steam_id":{"type":"string","pattern":"^[0-9]{17}$","example":"76561198000000001"},"relationship":{"type":"string"},"friend_since":{"type":["integer","null"]}}}},"total":{"type":"integer"},"has_more":{"type":"boolean"},"next_cursor":{"type":["string","null"]}}},"InspectRequest":{"type":"object","required":["inspect_link"],"properties":{"inspect_link":{"type":"string","maxLength":16384}}},"InspectResponse":{"type":"object","required":["status","format","capabilities","item"],"properties":{"status":{"type":"string","enum":["resolved","unavailable"]},"format":{"type":"string","enum":["self_encoded_v1","legacy_gc"]},"capabilities":{"type":"object","required":["float","paint_seed","paint_index","stickers","keychains","doppler","checksum_verified"],"properties":{"float":{"type":"boolean"},"paint_seed":{"type":"boolean"},"paint_index":{"type":"boolean"},"stickers":{"type":"boolean"},"keychains":{"type":"boolean"},"doppler":{"type":"boolean"},"checksum_verified":{"type":"boolean"}},"additionalProperties":{"type":"boolean"}},"item":{"oneOf":[{"type":"null"},{"type":"object","properties":{"item_id":{"type":"string"},"def_index":{"type":"integer"},"paint_index":{"type":"integer"},"paint_seed":{"type":"integer"},"float_value":{"type":["number","null"]},"doppler_phase":{"type":["string","null"]},"stickers":{"type":"array","items":{"type":"object"}},"keychains":{"type":"array","items":{"type":"object"}}},"additionalProperties":true}]},"error":{"$ref":"#/components/schemas/ErrorDetail"}}}}}}