Skip to content
LogoLogo

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, filters in the body. Selected by tag internal name, such as CSGO_Type_SniperRifle or WearCategory0.
  • Applied accessories — accessory_{Category} in the query string, accessoryFilters in the body. Selected by display name, such as Charm | Stitch-Loaded, with $any$ and $none$ sentinels.
  • Numeric asset properties — propertyFilters in 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

GET/market/

Returns the Steam Community Market HTML application. May redirect based on authentication or eligibility state.

Responses

Load the Market search page

GET/market/search

Returns 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

appid
integer

Steam application ID.

Example730
q
string

Free-text query. Matches Market hash names, and item descriptions when descriptions=1.

Exampledoppler
descriptions
integer

Set to 1 to extend the text query to item descriptions.

Values
01
sort
integer·default 0

Sort column. 0 and 4 both mean popularity, which is the default and ignores dir.

Values
01234
dir
integer

Sort direction. 1 ascending, 2 descending.

Values
12
category_Type
string[]

Item type. Repeat the parameter to select several types; repeated values are ORed.

Values
CSGO_Type_PistolCSGO_Type_SMGCSGO_Type_RifleCSGO_Type_SniperRifleCSGO_Type_Shotgun
Example[ "CSGO_Type_SniperRifle", "CSGO_Type_Rifle" ]
category_Weapon
string[]

Weapon. Repeat the parameter to select several weapons.

Values
weapon_ak47weapon_augweapon_awpweapon_bizonweapon_famas
Example[ "weapon_awp" ]
category_Quality
string[]

Item category, shown as "Category" in the Market UI. Covers StatTrak, Souvenir, and the star-prefixed knife and glove qualities.

Values
normalstrangetournamentunusualunusual_strange
Example[ "strange" ]
category_Rarity
string[]

Rarity, shown as "Quality" in the Market UI.

Values
Rarity_Common_WeaponRarity_Uncommon_WeaponRarity_Rare_WeaponRarity_Mythical_WeaponRarity_Legendary_Weapon
Example[ "Rarity_Legendary_Weapon" ]
category_Exterior
string[]

Exterior wear band.

Values
WearCategory0WearCategory1WearCategory2WearCategory3WearCategory4
Example[ "WearCategory0", "WearCategory1" ]
category_ItemSet
string[]

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

Example[ "set_community_31" ]
category_Tournament
string[]

Tournament, as Tournament{n}. New majors add values, so read the current list from GET /market/appfacets/{appid}.

Example[ "Tournament25" ]
category_TournamentTeam
string[]

Tournament team, as Team{n}. Read the current list from GET /market/appfacets/{appid}.

Example[ "Team12" ]
category_ProPlayer
string[]

Professional player, as a lowercase handle such as s1mple or zywoo. Read the current list from GET /market/appfacets/{appid}.

Example[ "zywoo" ]
accessory_CSGO_Tool_Sticker
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}.

Example[ "Sticker | BLAST.tv (Gold) | Paris 2023" ]
accessory_CSGO_Tool_Keychain
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}.

Example[ "Charm | Stitch-Loaded" ]

Responses

Search structured Market data

POST/market/search

Returns 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

appid
integer

Steam application ID.

Example730
q
string

Free-text query. Matches Market hash names, and item descriptions when descriptions=1.

Exampledoppler
descriptions
integer

Set to 1 to extend the text query to item descriptions.

Values
01
sort
integer·default 0

Sort column. 0 and 4 both mean popularity, which is the default and ignores dir.

Values
01234
dir
integer

Sort direction. 1 ascending, 2 descending.

Values
12
category_Type
string[]

Item type. Repeat the parameter to select several types; repeated values are ORed.

Values
CSGO_Type_PistolCSGO_Type_SMGCSGO_Type_RifleCSGO_Type_SniperRifleCSGO_Type_Shotgun
Example[ "CSGO_Type_SniperRifle", "CSGO_Type_Rifle" ]
category_Weapon
string[]

Weapon. Repeat the parameter to select several weapons.

Values
weapon_ak47weapon_augweapon_awpweapon_bizonweapon_famas
Example[ "weapon_awp" ]
category_Quality
string[]

Item category, shown as "Category" in the Market UI. Covers StatTrak, Souvenir, and the star-prefixed knife and glove qualities.

Values
normalstrangetournamentunusualunusual_strange
Example[ "strange" ]
category_Rarity
string[]

Rarity, shown as "Quality" in the Market UI.

Values
Rarity_Common_WeaponRarity_Uncommon_WeaponRarity_Rare_WeaponRarity_Mythical_WeaponRarity_Legendary_Weapon
Example[ "Rarity_Legendary_Weapon" ]
category_Exterior
string[]

Exterior wear band.

Values
WearCategory0WearCategory1WearCategory2WearCategory3WearCategory4
Example[ "WearCategory0", "WearCategory1" ]
category_ItemSet
string[]

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

Example[ "set_community_31" ]
category_Tournament
string[]

Tournament, as Tournament{n}. New majors add values, so read the current list from GET /market/appfacets/{appid}.

Example[ "Tournament25" ]
category_TournamentTeam
string[]

Tournament team, as Team{n}. Read the current list from GET /market/appfacets/{appid}.

Example[ "Team12" ]
category_ProPlayer
string[]

Professional player, as a lowercase handle such as s1mple or zywoo. Read the current list from GET /market/appfacets/{appid}.

Example[ "zywoo" ]
accessory_CSGO_Tool_Sticker
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}.

Example[ "Sticker | BLAST.tv (Gold) | Paris 2023" ]
accessory_CSGO_Tool_Keychain
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}.

Example[ "Charm | Stitch-Loaded" ]

Request Body

application/json
appidRequired
integer

Steam application ID.

Example730
filtersRequired
object

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

Example{ "Type": [ "CSGO_Type_SniperRifle", "CSGO_Type_Rifle" ], "Rarity": [ "Rarity_Legendary_Weapon" ] }
accessoryFiltersRequired
object

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

Example{ "accessory_CSGO_Tool_Keychain": [ "Charm | Stitch-Loaded" ], "accessory_CSGO_Tool_Sticker": [ "$none$" ] }
propertyFilters
object

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

Example{ "1": { "property_id": 1, "int_min": "385", "int_max": "678" } }
priceRequired
object

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

strQuery
string

Free-text query. Equivalent to q in the query string.

bSearchDescriptions
boolean

Extends the text query to item descriptions. Equivalent to descriptions=1.

sort
integer·default 0

Sort column: 0 and 4 popularity, 1 name, 2 quantity, 3 price. Popularity ignores direction.

Values
01234
direction
integer

1 ascending, 2 descending.

Values
12
startRequired
integer·min 0

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

strItemName
string

Restricts the search to one catalog entry, given as a Market hash name or an opaque G… group name. Used by the listing page rather than by search.

Responses

Render legacy search results

GET/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

queryRequired
string
startRequired
integer·min 0
Example0
countRequired
integer·min 1
Example10
norender
integer·default 0

Set to 1 to receive a JSON body instead of server-rendered HTML. Without it these endpoints answer with an HTML page.

Values
01
Example1
sort_column
string·default popular

Sort column. Unlike the structured endpoint, this form names the column.

Values
popularpricenamequantity
sort_dir
string·default desc
Values
ascdesc
search_descriptions
integer·default 0

Set to 1 to match the query against item descriptions as well as names.

Values
01
price_min
integer·min 0

Inclusive minimum price, in the minor units of the selected currency.

price_max
integer·min 0

Inclusive maximum price, in the minor units of the selected currency.

appid
integer

Steam application ID.

Example730

Responses

Get search suggestions

GET/market/searchsuggestionsresults

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

Query Parameters

qRequired
string

Search prefix or text.

Exampledoppler
appid
integer

Steam application ID.

Example730
debug
integer

Set to 1 to include scoring detail in the response.

Values
01

Responses

Get application filter facets

GET/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.

Path Parameters

appidRequired
integer

Steam application ID.

Example730

Responses

Get application accessory facets

GET/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.

Path Parameters

appidRequired
integer

Steam application ID.

Example730

Responses

List popular listings

GET/market/popular

Returns 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

countryRequired
string·min 2·max 2
ExampleUS
languageRequired
string
Exampleenglish
currencyRequired
integer

Steam currency ID. Prices in the response are converted and formatted for this currency.

Values
12345
Example1
norender
integer·default 0

Set to 1 to receive a JSON body instead of server-rendered HTML. Without it these endpoints answer with an HTML page.

Values
01
Example1
startRequired
integer·min 0
Example0
count
integer·min 1
Example10

Responses

List recent listings

GET/market/recent

Returns 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

countryRequired
string·min 2·max 2
ExampleUS
languageRequired
string
Exampleenglish
currencyRequired
integer

Steam currency ID. Prices in the response are converted and formatted for this currency.

Values
12345
Example1
norender
integer·default 0

Set to 1 to receive a JSON body instead of server-rendered HTML. Without it these endpoints answer with an HTML page.

Values
01
Example1

Responses