Skip to content
LogoLogo

Response variants

Do not select a decoder from the route alone. Check the HTTP status and Content-Type first.

Transport variants

OperationsPossible body
Market, search, and listing pagesHTML or a serialized React Server Component loader payload. Page routes can redirect.
Structured search and listingsJSON object or literal JSON null.
Legacy listing renderer and order bookJSON or HTML.
Remaining data operationsJSON.

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]                   -> AppData

Listing 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.