Counter-Strike 2 item data
CS2 float API for individual Steam Market listings
Read the wear rating, paint seed, inspect link and observed price of individual CS2 offers. Send an exact Steam market hash name, then page through current offers with one WOK key and the Inspect add-on.
GET /v1/cs2/market-listingsSteam AppID 730 · one page at a timeUpdated
curl --fail-with-body --max-time 35 --get "https://woksteamapi.com/v1/cs2/market-listings" -H "Authorization: Bearer $WOK_API_KEY" --data-urlencode "name=AK-47 | Redline (Field-Tested)" --data-urlencode "start=0"Make the first request
Use your WOK key in the Bearer header. The Inspect add-on extends that same key; a Valve Steam Web API key does not authenticate this route. name must be the exact market_hash_name, including exterior and any StatTrak or Souvenir prefix.
curl --fail-with-body --max-time 35 --get "https://woksteamapi.com/v1/cs2/market-listings" -H "Authorization: Bearer $WOK_API_KEY" --data-urlencode "name=AK-47 | Redline (Field-Tested)" --data-urlencode "start=0"The example name is a Field-Tested skin. An owned item from your CS2 inventory supplies its exact market hash name. This route observes items listed for sale by the Steam Market; it does not look up a particular player's inventory.
{
"listings": [{
"listing_id": "552409902335069142",
"market_hash_name": "AK-47 | Redline (Field-Tested)",
"float_value": 0.2967214286327362,
"paint_seed": 150,
"total_minor": 3027,
"currency": "EUR",
"price_display": "€30.27"
}],
"source_start": 0,
"source_count": 20,
"total_count": 1336,
"has_more": true,
"next_start": 20,
"coverage": "partial"
}The shortened example was observed from the Steam Community Market Redline group. Listings and prices move; use your fresh API response rather than copying the sample values.
Read a few Market pages with a bounded Node.js client
Start with an exact market_hash_name, including exterior and any StatTrak or Souvenir prefix. This server example reads up to three API pages and reuses the returned bucket_id; it never guesses a continuation or retries a failed request.
Download the Node.js example. Use Node.js 18 or later; no packages are required. Set the WOK key with the Inspect add-on in your server environment:
export WOK_API_KEY="your-wok-key"
export WOK_MARKET_NAME="AK-47 | Redline (Field-Tested)"
node cs2-market-listings.mjs
The whole flow has a 75-second deadline and a 1 MiB limit per response. It sends at most three authenticated WOK GET requests, with normal access and quota checks. That does not promise only three underlying Steam requests. Run it on your server and keep the key out of browser code.
An empty listings array can still have has_more=true because WOK filters one source page by the exact name. source_count counts source offers on that page; total_count describes the upstream query, not the number of exact-name matches. The client follows a returned offset only when it advances by the source count, is a multiple of 20 and does not exceed 9980. Unsupported continuation stops with an explicit error before another request; no replacement offset is invented.
The output keeps separate page observations and their original coverage. A page_limit stop leaves later offers unread. end_of_query describes the returned query cursor, not a guaranteed complete or stable market snapshot. Offers can move between pages or disappear; repeated listing IDs across pages remain separate observations.
Read float_status beside float_value. Unavailable or inconsistent floats remain null, and listing and asset IDs remain strings. Price fields stay in the returned Steam currency's minor units, with currency_id, nullable currency and price_display unchanged. A missing value is not zero; the client neither converts to USD nor computes a cross-currency total.
If a later page fails, the CLI exits unsuccessfully and writes stopped_because="error" with earlier validated pages and a sanitized error code. Imported callers receive those pages in MarketListingsError.pages. Neither path substitutes an empty or complete result for failure.
For owned items, start with the CS2 inventory API. To decode a supplied preview link, use the inspect-link guide. A saved name-level quote from the price API does not price an individual float or pattern premium. The OpenAPI contract documents the full listing response; this example returns the listing fields and pagination observations it validates.
Interpret one listing and its price
Every listing is filtered again by its exact market hash name. A missing Steam property remains null; it is never reported as float zero.
| Field | Meaning |
|---|---|
listing_id, asset_id | Identifiers for the current offer and its individual CS2 asset. Neither is a market hash name. |
float_value, float_status | Observed wear rating and whether it was resolved from the Steam inspect certificate or listing property, unavailable, or inconsistent. |
paint_seed, paint_index, inspect_link | Observed paint data and the Steam preview action when supplied. The preview certificate is checked against listing properties. |
price_minor, fee_minor, total_minor | Original Steam numeric price components in the returned currency's minor units. Read currency_id, currency and price_display; these values are not automatically USD. |
observed_at, cached | Unix observation time in seconds and whether WOK reused a brief shared snapshot. The offer can change or disappear after observation. |
For a saved item-type price in USD, use GET /v1/price. Its name-level quote does not represent an individual float, pattern or sticker premium.
Page through current offers without guessing coverage
Each request reads one bounded page of up to 20 Steam source offers. If has_more is true, send the returned next_start as start; valid offsets are multiples of 20. Reuse bucket_id from the first response to skip another name-to-group lookup. Choose a page cap for your application.
source_count describes rows Steam returned before exact-name filtering. listings can be empty on one page while later pages still contain the requested variant.
total_count describes Steam's current filter query. It can include variants that the final exact-name check removes, so it is not a guaranteed exact-name listing count.
coverage="partial" means the response alone does not cover the whole query. Even the last page is partial when earlier pages were returned separately.
WOK briefly caches the same page across API keys and limits simultaneous cold reads. For HTTP 429 or a temporary 503, respect Retry-After. A 402 can mean the Inspect add-on or quota is missing. Steam's Market data interface is subject to change and can temporarily refuse requests; WOK reports that condition instead of inventing a float.
Complete CS2 API mapSteam Market price guideIntegration guideOpenAPI schemaInspect add-on