Response variants
Do not select a decoder from the route alone. Check the HTTP status and Content-Type first.
Transport variants
| Operations | Possible body |
|---|---|
| Market, search, and listing pages | HTML or a serialized React Server Component loader payload. Page routes can redirect. |
| Structured search and listings | JSON object or literal JSON null. |
| Legacy listing renderer and order book | JSON or HTML. |
| Remaining data operations | JSON. |
Structured search
POST /market/search has three top-level variants:
type SearchResponse = GroupedSearch | DirectListings | null
interface GroupedSearch {
start: number
total_count: number
grouping: number
facets: ListingFacet[]
results: SearchResult[]
}
interface DirectListings {
start: number
total_count: number
more: boolean
facets: ListingFacet[]
listings: MarketListing[]
}Grouped results contain catalog-level asset_description data. Direct listings contain owner-specific assets, fees, accessory metadata, and optional enhanced-appearance media.
Structured listings
POST /market/listings/{appid}/{market_hash_name} returns a listing object or null:
interface ListingsResponse {
start: number
total_count: number
more: boolean
facets: ListingFacet[]
listings: MarketListing[]
}facets and listings can be empty. Fields inside MarketListing, MarketAsset, AssetDescription, AssetAccessory, and AssetProperty are optional because their presence depends on the application and item class.
Legacy listing maps
Legacy listing JSON uses identifier-keyed maps instead of arrays:
assets[appid][contextid][assetid] -> LegacyMarketAsset
listinginfo[listingid] -> LegacyListingInfo
app_data[appid] -> AppDataListing prices and fees are integer minor units. publisher_fee_percent is a string. HTML fields such as results_html, hovers, buy_order_table, and sell_order_table must be treated as opaque markup.
Order data
/market/orderbook returns compact flat arrays:
[price, quantity, price, quantity, ...]amtMaxBuyOrder is nullable when there are no buy orders. The compact buy array can be empty.
Histogram graph points are tuples:
[price, cumulative_quantity, formatted_label]Price-history points are tuples:
[steam_date_string, price_major_units, volume_string]Application success
HTTP 200 does not imply success. Depending on the endpoint, success is a boolean or integer. Mutation error codes are endpoint-specific and may include a message.

