BUFF163 CS2 prices
BUFF163 price API for CS2
Read saved BUFF163 listing prices in USD, or apply them to a public CS2 inventory with explicit fallback control.
GET /v1/items?game=cs2&source=buffBearer authenticationUpdated
curl --fail-with-body \
-H "Authorization: Bearer $WOK_API_KEY" \
--get "https://woksteamapi.com/v1/items" \
--data-urlencode "game=cs2" \
--data-urlencode "q=AK-47 | Redline (Field-Tested)" \
--data-urlencode "source=buff"Use BUFF prices for an owned inventory
The catalog quickstart below looks up market items without a SteamID. To value a player's actual items, request the inventory endpoint instead.
curl --fail-with-body \
-H "Authorization: Bearer $WOK_API_KEY" \
"https://woksteamapi.com/v1/inventory?steam_id=76561198090744629&game=cs2&top=0&price_source=buff&strict=1"Read status before using total. For an ok result, matched items have pricesource="buff" and a USD pricemedian. Missing BUFF prices remain null; unpriced tells you how much inventory is not valued. The total covers only priced, sellable items, so it is not a full appraisal when coverage is incomplete.
Need the same snapshot valued repeatedly? Normal successful cache hits use the current local catalog. To forbid a new inventory scan entirely, use price-only refresh; a missing snapshot returns inventory_cache_miss. Each API operation still consumes WOK plan quota even when no Steam or price-provider request is made.
When a BUFF observation is missing or too old
An unmatched catalog search can return items=[] with has_more=false; no price should be inferred from that result. Because q is a substring search, page through next_cursor and compare each market_hash_name exactly before declaring a specific item absent. A row with price_usd still needs an updated_at check against your application's maximum acceptable age. If it fails that policy, show the value as stale or unavailable; WOK does not promise that every saved observation is current to your threshold.
{"items": [], "next_cursor": null, "has_more": false}CS2 items and inspect permissionsQuote, batch and catalog endpoint differencesCompare WOK with SteamWebAPIValidate a SteamWebAPI migration
Quickstart
Use WOK from a trusted server. Keep the API key outside browser bundles and public repositories.
curl --fail-with-body \
-H "Authorization: Bearer $WOK_API_KEY" \
--get "https://woksteamapi.com/v1/items" \
--data-urlencode "game=cs2" \
--data-urlencode "q=AK-47 | Redline (Field-Tested)" \
--data-urlencode "source=buff"// Node.js: keep the API key on your server.
const url = new URL("https://woksteamapi.com/v1/items");
url.search = new URLSearchParams({
game: "cs2",
q: "AK-47 | Redline (Field-Tested)",
source: "buff"
});
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 quote = await response.json();import os
import requests
response = requests.get(
"https://woksteamapi.com/v1/items",
headers={"Authorization": f"Bearer {os.environ['WOK_API_KEY']}"},
params={
"game": "cs2",
"q": "AK-47 | Redline (Field-Tested)",
"source": "buff",
},
timeout=10,
)
response.raise_for_status()
quote = response.json()Response example
The values below illustrate the response shape. Field names and types match the public contract. This example uses a historical observation timestamp. The saved lowest-listing row still has its provider min, but it is too old for recent floor-quote statistics: price_statistics.source_count is 0 and coverage is unavailable. Check actual source timestamps before displaying a current price.
JSON
application/json{
"game": "cs2",
"query": "AK-47 | Redline (Field-Tested)",
"source": "buff",
"currency": "USD",
"items": [
{
"game": "cs2",
"market_hash_name": "AK-47 | Redline (Field-Tested)",
"icon_url": null,
"icon_url_large": null,
"image": null,
"image_url": null,
"image_url_large": null,
"image_source": null,
"image_observed_at": null,
"source_count": 1,
"prices": [
{
"source": "buff",
"price_usd": 11.25,
"currency": "USD",
"volume": 3,
"updated_at": 1787572800.0,
"statistics": {
"basis": "lowest_listing_only",
"currency": "USD",
"min": 11.25,
"max": null,
"avg": null,
"median": null
}
}
],
"price_statistics": {
"basis": "one_lowest_ask_per_marketplace",
"currency": "USD",
"source_count": 0,
"sources": [],
"min": null,
"max": null,
"avg": null,
"median": null,
"min_source": null,
"max_source": null,
"coverage": "unavailable"
}
}
],
"next_cursor": null,
"has_more": false
}
Response schema
Stable fields for typed clients, storage and error handling.
| Field | Type | Meaning |
|---|---|---|
game | string | Requested named game key. |
currency | string | USD for price_usd fields; native TM RUB quotes use price_rub. |
query | string | Search text; q is a substring search, not an exact-name assertion. |
source | string|null | Exact saved source filter; buff selects BUFF163 for CS2. |
items[].market_hash_name | string | Exact market hash name to match before using a quote. |
items[].icon_url | string|null | Observed Steam icon token, or null if unknown. |
items[].image_url | string|null | Renderable HTTPS Steam image URL, or null; no image fetch occurs on this call. |
items[].image_source | string|null | Steam inventory or market sweep provenance of the icon. |
items[].image_observed_at | number|null | Unix time when WOK observed the icon. |
items[].source_count | integer | Number of returned source rows for this item. |
items[].price_statistics | object | Recent floor-quote statistics across the returned sources; source_count counts eligible recent observations, not every saved row. |
items[].price_statistics.coverage | string | multiple_marketplaces, single_marketplace or unavailable; old rows can remain visible without fresh statistic coverage. |
items[].prices[].source | string | Source of this observation. |
items[].prices[].price_usd | number | Saved source observation in USD. |
items[].prices[].price_rub | number | Native TM RUB quote when available; not a converted USD amount. |
items[].prices[].volume | integer | Source activity/count metadata, never a player's item count. |
items[].prices[].updated_at | number | Source observation timestamp, not the time of this API request. |
items[].prices[].statistics | object | Provider-reported measures and basis; lowest_listing_only supplies min, while unsupported max/avg/median stay null. |
next_cursor | string|null | Opaque cursor for the next page with the same filters. |
has_more | boolean | Whether another page is available. |
Limits and error behavior
Rules clients should handle explicitly in production.
BUFF163 coverage is CS2-only. Inventory auto excludes BUFF, but mix can select an eligible BUFF observation no older than 72 hours after its outlier check. Choose price_source=buff with strict=1 when BUFF-only values are required. Other named games have no BUFF coverage promise.
GET /v1/items?source=buff is a source-filtered catalog read, not an inventory. q searches substrings; match market_hash_name exactly and follow next_cursor until found or has_more is false. No matching catalog row returns items=[], not a fake quote.
For inventories, price_source=buff&strict=1 requires a usable BUFF price. Otherwise pricemedian is null and unpriced increases. With strict=0, another source may be selected: inspect pricesource before labeling that item or total as BUFF-only.
These are lowest-listing observations in USD, not CNY amounts, buy orders, guaranteed sale proceeds or instance-level appraisals. Float, pattern, stickers, fees and liquidity can change value.
WOK imports the BUFF163 feed through its authorized Pricempire integration. This is not an official BUFF developer endpoint. Use a WOK API key; no BUFF login, Steam bot session, trading, buying, selling or account-management endpoints are provided.
Cache and freshness semantics
How to tell whether data was reused, shared or refreshed.
Requests read WOK's shared local catalog. Selecting source=buff or price_source=buff does not make a live provider request or force the upstream feed to update.
items[].prices[].updated_at is the provider's observation/change timestamp. A price can remain unchanged while the provider checks it again; the API does not replace that timestamp with the download or response time.
For a priced inventory, items[].priceupdatedat is the selected observation time. meta.cache_age is the inventory snapshot's age; neither field substitutes for the other.
Coverage can change between catalog refreshes. Decide a maximum acceptable observation age in your application and show unavailable or stale prices explicitly. No fixed real-time SLA is implied.
Frequently asked questions
Direct answers about access, freshness and result semantics.
Do I need to sign in to BUFF163?
No. You authenticate to WOK with a server-side API key. WOK imports the BUFF163 feed through an authorized Pricempire integration; it is not a direct official BUFF account API.
Will auto or mix use BUFF prices?
Auto excludes BUFF. Mix may select a BUFF observation no older than 72 hours when it passes the outlier check. Choose price_source=buff&strict=1 for BUFF-only inventory values, or source=buff for catalog rows.
How do I require BUFF-only inventory values?
Send price_source=buff&strict=1. Items without a usable BUFF price keep pricemedian=null and contribute to unpriced. With strict=0, other sources may fill gaps.
Does this API place trades or return CNY prices?
No. This integration exposes read-only CS2 price observations normalized to USD. It does not buy or sell items, manage BUFF accounts or return an executable trade quote.