Steam API
Read-only access to public Steam Store search, application details, user reviews, and featured-category data. Responses are fetched live from Steam's public store endpoints.
Endpoint health
Loading verification…
Connect your agent
Connect through MCP so your agent can find this API, read its docs, and call its endpoints.
Add the server from your terminal.
claude mcp add --transport http agent-data https://agent-data.motie.dev/mcpIn Claude Code, run /mcp, select agent-data, then Authenticate. Sign in to your agent-data account in the browser.
Then ask your agent to use the Steam API for your task.
Call it over HTTP
Get an API keySign up free, generate an API key, and set it as AGENT_DATA_API_KEY in your environment. Your first 100 calls each month are free.
curl --request GET --get 'https://api.agent-data.dev/store-steampowered-com/v1/search/products' \
--header "Authorization: Bearer $AGENT_DATA_API_KEY"Endpoints
Inputs and response fields for every endpoint in this API.
GETSearch products/v1/search/products
Search live Steam products using Steam's query, platform, tag, category, price, and pagination filters.
Input
osOptionalQuery · string | nullSteam platform filter, such as windows, mac, or linux.
Example: windows
tagsOptionalQuery · string | nullSteam tag filter. Accepts Steam's tag query syntax.
Example: 19
termOptionalQuery · string | nullProduct search text.
Example: portal
countOptionalQuery · integer, min: 1, max: 100, default: 10Number of products to return.
Example: 10
startOptionalQuery · integer, min: 0, default: 0Zero-based result offset.
Example: 0
sort_byOptionalQuery · string | nullSteam search sort key, such as relevance or released.
Example: relevance
categoryOptionalQuery · string | nullSteam category filter.
Example: 998
languageOptionalQuery · string, default: englishSteam response language.
Example: english
specialsOptionalQuery · integer | nullSet to 1 to restrict results to specials.
Example: 1
max_priceOptionalQuery · integer, min: 0 | nullMaximum price in the currency's minor unit.
Example: 2000
Response
countintegerstartintegerresultsobject[]results[].urlstringresults[].namestringresults[].appidintegerresults[].price?string | nullresults[].tag_ids?integer[]results[].platforms?string[]results[].price_cents?integer | nullresults[].release_date?string | nullresults[].review_summary?string | nullresults[].discount_percent?integer | nulltotal_countintegerFields marked ? are optional.
GETApps by appid/v1/apps/{appid}
Get live public Steam metadata, descriptions, pricing, requirements, media, and release information for an app.
Input
appidRequiredPath · integerSteam application ID.
Example: 620
countryOptionalQuery · string, default: usTwo-letter country code used for pricing and availability.
Example: us
Response
namestringtypestringgenres?object[]genres[].idinteger | stringgenres[].descriptionstringis_freebooleanplatformsobjectcategories?object[]categories[].idinteger | stringcategories[].descriptionstringdevelopers?string[]metacritic?object | nullpublishers?string[]screenshots?object[]screenshots[].idintegerscreenshots[].path_fullstringscreenshots[].path_thumbnailstringsteam_appidintegerrelease_date?objectabout_the_game?string, default: price_overview?objectprice_overview.finalintegerprice_overview.initialintegerprice_overview.currencystringprice_overview.final_formatted?string, default: price_overview.discount_percentintegerprice_overview.initial_formatted?string, default: pc_requirements?unknownmac_requirements?unknownshort_description?string, default: linux_requirements?unknowndetailed_description?string, default: Fields marked ? are optional.
GETApps by appid reviews/v1/apps/{appid}/reviews
Get live Steam user reviews with Steam's cursor pagination and review filters.
Input
appidRequiredPath · integerSteam application ID.
Example: 620
cursorOptionalQuery · string | nullOpaque Steam cursor returned by an earlier response.
filterOptionalQuery · string | nullSteam review filter, such as recent or updated.
Example: recent
languageOptionalQuery · string, default: allReview language filter.
Example: all
day_rangeOptionalQuery · integer, min: 0 | nullReview age window in days; 0 means all time.
Example: 365
review_typeOptionalQuery · string | nullSteam review type filter.
Example: all
num_per_pageOptionalQuery · integer, min: 1, max: 100, default: 10Number of reviews per response.
Example: 5
purchase_typeOptionalQuery · string, default: allSteam purchase type filter.
Example: all
Response
cursorstringreviewsobject[]reviews[].author?objectreviews[].author.steamidstringreviews[].author.num_reviews?integer | nullreviews[].author.personaname?string | nullreviews[].author.profile_url?string | nullreviews[].author.num_games_owned?integer | nullreviews[].author.playtime_forever?integer | nullreviews[].author.playtime_at_review?integer | nullreviews[].author.playtime_last_two_weeks?integer | nullreviews[].review?string, default: reviews[].language?string, default: reviews[].refunded?boolean | nullreviews[].voted_up?boolean, default: falsereviews[].votes_up?integer, default: 0reviews[].votes_funny?integer, default: 0reviews[].comment_count?integer, default: 0reviews[].steam_purchase?boolean, default: falsereviews[].recommendationidstringreviews[].received_for_free?boolean, default: falsereviews[].timestamp_created?integer, default: 0reviews[].timestamp_updated?integer, default: 0reviews[].weighted_vote_score?string, default: reviews[].primarily_steam_deck?boolean | nullreviews[].written_during_early_access?boolean | nullquery_summaryobjectquery_summary.num_reviewsintegerquery_summary.review_scoreintegerquery_summary.total_reviewsintegerquery_summary.total_negativeintegerquery_summary.total_positiveintegerquery_summary.review_score_descstringFields marked ? are optional.
For the next page, pass next_cursor from the response as cursor. Leave it empty on the first call.
GETFeatured/v1/featured
Get live Steam specials, coming-soon products, top sellers, and new releases by country and category.
Input
countryOptionalQuery · string, default: usTwo-letter country code for prices and availability.
Example: us
categoryOptionalQuery · string | nullOptional Steam featured category selector.
Example: specials
Response
specialsobjectspecials.idstringspecials.namestringspecials.itemsobject[]specials.items[].id?integer | nullspecials.items[].url?string | nullspecials.items[].namestringspecials.items[].type?integer | nullspecials.items[].currency?string | nullspecials.items[].discounted?boolean | nullspecials.items[].final_price?integer | nullspecials.items[].header_image?string | nullspecials.items[].mac_available?boolean | nullspecials.items[].original_price?integer | nullspecials.items[].linux_available?boolean | nullspecials.items[].discount_percent?integer | nullspecials.items[].windows_available?boolean | nullspecials.items[].controller_support?string | nullspecials.items[].large_capsule_image?string | nullspecials.items[].small_capsule_image?string | nullcoming_soonobjectcoming_soon.idstringcoming_soon.namestringcoming_soon.itemsobject[]coming_soon.items[].id?integer | nullcoming_soon.items[].url?string | nullcoming_soon.items[].namestringcoming_soon.items[].type?integer | nullcoming_soon.items[].currency?string | nullcoming_soon.items[].discounted?boolean | nullcoming_soon.items[].final_price?integer | nullcoming_soon.items[].header_image?string | nullcoming_soon.items[].mac_available?boolean | nullcoming_soon.items[].original_price?integer | nullcoming_soon.items[].linux_available?boolean | nullcoming_soon.items[].discount_percent?integer | nullcoming_soon.items[].windows_available?boolean | nullcoming_soon.items[].controller_support?string | nullcoming_soon.items[].large_capsule_image?string | nullcoming_soon.items[].small_capsule_image?string | nulltop_sellersobjecttop_sellers.idstringtop_sellers.namestringtop_sellers.itemsobject[]top_sellers.items[].id?integer | nulltop_sellers.items[].url?string | nulltop_sellers.items[].namestringtop_sellers.items[].type?integer | nulltop_sellers.items[].currency?string | nulltop_sellers.items[].discounted?boolean | nulltop_sellers.items[].final_price?integer | nulltop_sellers.items[].header_image?string | nulltop_sellers.items[].mac_available?boolean | nulltop_sellers.items[].original_price?integer | nulltop_sellers.items[].linux_available?boolean | nulltop_sellers.items[].discount_percent?integer | nulltop_sellers.items[].windows_available?boolean | nulltop_sellers.items[].controller_support?string | nulltop_sellers.items[].large_capsule_image?string | nulltop_sellers.items[].small_capsule_image?string | nullnew_releasesobjectnew_releases.idstringnew_releases.namestringnew_releases.itemsobject[]new_releases.items[].id?integer | nullnew_releases.items[].url?string | nullnew_releases.items[].namestringnew_releases.items[].type?integer | nullnew_releases.items[].currency?string | nullnew_releases.items[].discounted?boolean | nullnew_releases.items[].final_price?integer | nullnew_releases.items[].header_image?string | nullnew_releases.items[].mac_available?boolean | nullnew_releases.items[].original_price?integer | nullnew_releases.items[].linux_available?boolean | nullnew_releases.items[].discount_percent?integer | nullnew_releases.items[].windows_available?boolean | nullnew_releases.items[].controller_support?string | nullnew_releases.items[].large_capsule_image?string | nullnew_releases.items[].small_capsule_image?string | nullFields marked ? are optional.
Don’t see the endpoint you need?
Ask agent-data to add an endpoint or return more fields. Extensions are free and keep existing endpoints working.
An account is required to submit an extension. Prepare your request, then sign in to build.