Discovery
Search, autocomplete, and the filter metadata that drives them.
Search is expressed two ways. GET /market/search takes the selection as a query string and
returns a page; POST /market/search takes the same selection as JSON and returns data.
The query-string form is shareable but cannot express price bounds, numeric asset-property
ranges, or paging, so non-trivial searches belong on the POST form.
Filters come in three kinds:
- Catalog tags —
category_{Category}in the query string,filtersin the body. Selected by tag internal name, such asCSGO_Type_SniperRifleorWearCategory0. - Applied accessories —
accessory_{Category}in the query string,accessoryFiltersin the body. Selected by display name, such asCharm | Stitch-Loaded, with$any$and$none$sentinels. - Numeric asset properties —
propertyFiltersin the body only, as inclusive ranges.
Repeating a query parameter, or listing several values in one body array, ORs those values.
Different categories are ANDed. Categories, tags, and accessory names are per-application
and change with game updates; GET /market/appfacets/{appid} and
GET /market/appaccessories/{appid} return the current vocabulary with localized labels
and match counts.
Load the Market home page
/market/Returns the Steam Community Market HTML application. May redirect based on authentication or eligibility state.
Load the Market search page
/market/searchReturns HTML, or a serialized React Server Component loader payload, for a Market search URL.
The query string is the canonical, shareable representation of a search. It carries the same
selection that POST /market/search takes as a JSON body, so any search built here can be
replayed against the structured endpoint. See the tag description for the full filter model.
Query Parameters
stringFree-text query. Matches Market hash names, and item descriptions when descriptions=1.
integer·default 0Sort column. 0 and 4 both mean popularity, which is the default and ignores dir.
01234string[]Item type. Repeat the parameter to select several types; repeated values are ORed.
CSGO_Type_PistolCSGO_Type_SMGCSGO_Type_RifleCSGO_Type_SniperRifleCSGO_Type_Shotgunstring[]Weapon. Repeat the parameter to select several weapons.
weapon_ak47weapon_augweapon_awpweapon_bizonweapon_famasstring[]Item category, shown as "Category" in the Market UI. Covers StatTrak, Souvenir, and the star-prefixed knife and glove qualities.
normalstrangetournamentunusualunusual_strangestring[]Rarity, shown as "Quality" in the Market UI.
Rarity_Common_WeaponRarity_Uncommon_WeaponRarity_Rare_WeaponRarity_Mythical_WeaponRarity_Legendary_Weaponstring[]Exterior wear band.
WearCategory0WearCategory1WearCategory2WearCategory3WearCategory4string[]Collection. Values are set_ identifiers such as set_anubis, set_dust_2, or
set_community_31. The set is release-dependent; read the current list from
GET /market/appfacets/{appid}.
string[]Tournament, as Tournament{n}. New majors add values, so read the current list from
GET /market/appfacets/{appid}.
string[]Tournament team, as Team{n}. Read the current list from GET /market/appfacets/{appid}.
string[]Professional player, as a lowercase handle such as s1mple or zywoo. Read the current
list from GET /market/appfacets/{appid}.
string[]Applied sticker, selected by full display name, for example
Sticker | BLAST.tv (Gold) | Paris 2023. Repeat the parameter to OR several stickers.
$any$ matches any applied sticker and $none$ matches items with none. Read the
current list from GET /market/appaccessories/{appid}.
string[]Applied charm, selected by full display name, for example Charm | Stitch-Loaded. Repeat
the parameter to OR several charms. $any$ matches any applied charm and $none$ matches
items with none. Read the current list from GET /market/appaccessories/{appid}.
Responses
Search structured Market data
/market/searchReturns grouped catalog results, direct listing rows, or literal JSON null.
The body is a JSON array containing exactly one request object. Every filter in the query
string of GET /market/search has a body equivalent, and the body form is the one to use
for anything beyond a trivial search: it is the only form that accepts price bounds,
numeric asset-property ranges, and paging offsets.
filters selects catalog tags by internal name; accessoryFilters selects applied
stickers and charms by display name. Both map a key to an array, and values inside one
array are ORed while separate keys are ANDed. propertyFilters constrains numeric asset
properties by inclusive range.
Results are grouped by default. grouping: 1 in the response means rows are catalog
entries keyed by strHash; a response carrying listings instead of results contains
individual sell listings with owner-specific assets and fees.
Query Parameters
stringFree-text query. Matches Market hash names, and item descriptions when descriptions=1.
integer·default 0Sort column. 0 and 4 both mean popularity, which is the default and ignores dir.
01234string[]Item type. Repeat the parameter to select several types; repeated values are ORed.
CSGO_Type_PistolCSGO_Type_SMGCSGO_Type_RifleCSGO_Type_SniperRifleCSGO_Type_Shotgunstring[]Weapon. Repeat the parameter to select several weapons.
weapon_ak47weapon_augweapon_awpweapon_bizonweapon_famasstring[]Item category, shown as "Category" in the Market UI. Covers StatTrak, Souvenir, and the star-prefixed knife and glove qualities.
normalstrangetournamentunusualunusual_strangestring[]Rarity, shown as "Quality" in the Market UI.
Rarity_Common_WeaponRarity_Uncommon_WeaponRarity_Rare_WeaponRarity_Mythical_WeaponRarity_Legendary_Weaponstring[]Exterior wear band.
WearCategory0WearCategory1WearCategory2WearCategory3WearCategory4string[]Collection. Values are set_ identifiers such as set_anubis, set_dust_2, or
set_community_31. The set is release-dependent; read the current list from
GET /market/appfacets/{appid}.
string[]Tournament, as Tournament{n}. New majors add values, so read the current list from
GET /market/appfacets/{appid}.
string[]Tournament team, as Team{n}. Read the current list from GET /market/appfacets/{appid}.
string[]Professional player, as a lowercase handle such as s1mple or zywoo. Read the current
list from GET /market/appfacets/{appid}.
string[]Applied sticker, selected by full display name, for example
Sticker | BLAST.tv (Gold) | Paris 2023. Repeat the parameter to OR several stickers.
$any$ matches any applied sticker and $none$ matches items with none. Read the
current list from GET /market/appaccessories/{appid}.
string[]Applied charm, selected by full display name, for example Charm | Stitch-Loaded. Repeat
the parameter to OR several charms. $any$ matches any applied charm and $none$ matches
items with none. Read the current list from GET /market/appaccessories/{appid}.
Request Body
application/jsonobjectCatalog tag selection, keyed by facet category name without the category_ prefix
(Type, Weapon, Quality, Rarity, Exterior, ItemSet, Tournament,
TournamentTeam, ProPlayer). Values are tag internal names.
Values within one array are ORed; separate keys are ANDed. An empty object applies no tag filtering.
objectApplied-accessory selection, keyed by the full accessory_ parameter name
(accessory_CSGO_Tool_Sticker, accessory_CSGO_Tool_Keychain).
Unlike filters, values are accessory display names rather than internal names, for
example Sticker | BLAST.tv (Gold) | Paris 2023. Two sentinels are accepted: $any$
matches items carrying any accessory of that kind, $none$ matches items carrying none.
Values within one array are ORed; separate keys are ANDed.
objectNumeric asset-property constraints, keyed by asset property ID as a string. The key
repeats the property_id inside the value.
Bounds are inclusive. Integer-valued properties use int_min and int_max, which Steam
sends as strings; continuous properties use float_min and float_max. Property IDs and
their value ranges are application-specific.
Property filters have no query-string equivalent, so a search using them can only be
issued against POST /market/search.
objectCurrency selection and optional price bounds. Bounds are inclusive and expressed in the
minor units of eCurrency, so unMin: 2063 is $20.63 when eCurrency is 1. Omit a
bound to leave that end open. Price bounds have no query-string equivalent.
booleanExtends the text query to item descriptions. Equivalent to descriptions=1.
integer·default 0Sort column: 0 and 4 popularity, 1 name, 2 quantity, 3 price. Popularity
ignores direction.
01234integer·min 0Zero-based offset of the first result. The Market UI advances it in steps of 10 for
grouped results and 30 for listing rows; total_count bounds it.
Responses
Render legacy search results
/market/search/render/Returns a JSON envelope containing server-rendered listing HTML. This is the pre-structured
search endpoint; it accepts a text query, paging, a single sort, and price bounds, but none
of the tag, accessory, or property filters. Use POST /market/search for filtered searches.
count is capped server-side: the endpoint returns 10 results regardless of a larger value.
Page with start instead. Roughly 20 requests per minute per client.
Query Parameters
integer·default 0Set to 1 to receive a JSON body instead of server-rendered HTML. Without it these
endpoints answer with an HTML page.
01string·default popularSort column. Unlike the structured endpoint, this form names the column.
popularpricenamequantityinteger·default 0Set to 1 to match the query against item descriptions as well as names.
01Responses
Get search suggestions
/market/searchsuggestionsresultsReturns item-name autocomplete results and matching applications. apps can be empty.
The Market UI calls this on each keystroke, so results are ranked by search_score rather
than filtered; listing_count is the live sell-order count for the suggested item.
Get application filter facets
/market/appfacets/{appid}Returns the complete catalog-tag vocabulary for one application: every filter category, the tags inside it, their localized labels, and how many Market entries each tag matches.
This is the authoritative source for category_{Category} query values and filters body
keys. Category keys map to filter names by dropping the category_ prefix, and tag keys
are the internal names sent as filter values. Read it rather than hard-coding tags: CS2
adds collections, tournaments, teams, and players with each release.
Get application accessory facets
/market/appaccessories/{appid}Returns the applied-accessory vocabulary for one application: the sticker and charm names
accepted by accessory_{Category} query parameters and accessoryFilters body keys.
Accessories are matched by display name, so the names returned here are sent verbatim.
facets is empty for applications with no applied-accessory system.
List popular listings
/market/popularReturns the listings shown on the Market home page, ordered by popularity. Send norender=1
for a JSON body instead of an HTML page.
stop reports whether the requested window ran past the end of the list.
Query Parameters
integerSteam currency ID. Prices in the response are converted and formatted for this currency.
12345integer·default 0Set to 1 to receive a JSON body instead of server-rendered HTML. Without it these
endpoints answer with an HTML page.
01Responses
List recent listings
/market/recentReturns the most recently created Market listings across all applications, as the home page
activity feed shows them. Send norender=1 for a JSON body instead of an HTML page.
more reports whether further listings are available.
Query Parameters
integerSteam currency ID. Prices in the response are converted and formatted for this currency.
12345
